fix: more cleaning up for FreeBSD
This commit is contained in:
parent
f6428b92fe
commit
1dfd7e0499
6
Cargo.lock
generated
6
Cargo.lock
generated
@ -1316,7 +1316,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sparse-05-client"
|
||||
version = "0.5.0"
|
||||
version = "0.7.0"
|
||||
dependencies = [
|
||||
"ansi_term",
|
||||
"anyhow",
|
||||
@ -1335,7 +1335,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sparse-05-common"
|
||||
version = "0.1.0"
|
||||
version = "0.7.0"
|
||||
dependencies = [
|
||||
"ecies-ed25519",
|
||||
"ed25519-dalek",
|
||||
@ -1346,7 +1346,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sparse-05-server"
|
||||
version = "0.5.0"
|
||||
version = "0.7.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"catconf",
|
||||
|
||||
13
flake.lock
generated
13
flake.lock
generated
@ -77,6 +77,18 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"freebsd": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"narHash": "sha256-rKgZfcUDZpwF8Pi7Ybh+fSIRsVZshOgX5Qe2owMxKLQ=",
|
||||
"type": "file",
|
||||
"url": "https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso"
|
||||
},
|
||||
"original": {
|
||||
"type": "file",
|
||||
"url": "https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso"
|
||||
}
|
||||
},
|
||||
"libnl": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@ -130,6 +142,7 @@
|
||||
"crane": "crane",
|
||||
"fenix": "fenix",
|
||||
"flake-utils": "flake-utils",
|
||||
"freebsd": "freebsd",
|
||||
"libnl": "libnl",
|
||||
"libpcap-src": "libpcap-src",
|
||||
"nixpkgs": "nixpkgs",
|
||||
|
||||
29
flake.nix
29
flake.nix
@ -29,15 +29,36 @@
|
||||
url = "https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
freebsd = {
|
||||
url =
|
||||
"https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, crane, fenix, rust-overlay
|
||||
, libpcap-src, libnl, winpcap }:
|
||||
, libpcap-src, libnl, winpcap, freebsd }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ (import rust-overlay) fenix.overlays.default ];
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
|
||||
freebsdVm = pkgs.stdenv.mkDerivation {
|
||||
name = "sparse-freebsd-vm";
|
||||
|
||||
buildInputs = with pkgs; [ qemu xz libguestfs ];
|
||||
|
||||
unpackPhase = ''
|
||||
mkdir -p $out/vm
|
||||
cp ${freebsd} $out/vm/freebsd.qcow2.xz
|
||||
xz -d $out/vm/freebsd.qcow2.xz
|
||||
'';
|
||||
|
||||
installPhase = "\n";
|
||||
};
|
||||
|
||||
buildTools = with pkgs; [
|
||||
@ -156,16 +177,18 @@
|
||||
devShells.default = craneLib.devShell {
|
||||
name = "sparse";
|
||||
|
||||
buildInputs = windowsBuildTools ++ [ rust-analyzer rustup ];
|
||||
buildInputs = windowsBuildTools ++ [ rust-analyzer packer ];
|
||||
|
||||
SPARSE_BUILD_WINPCAP = "${winpcap}/Lib";
|
||||
SPARSE_BUILD_LIBPCAP = "${libpcap-src}";
|
||||
SPARSE_BUILD_LIBNL = "${libnl}";
|
||||
|
||||
FREEBSD_ISO = "${freebsd}";
|
||||
};
|
||||
|
||||
packages = {
|
||||
inherit sparse-05-linux-server sparse-05-windows-server
|
||||
sparse-05-windows-service sparse-05-client;
|
||||
sparse-05-windows-service sparse-05-client freebsdVm;
|
||||
|
||||
inherit sparse-c2-linux-beacon sparse-c2-server sparse-c2-client;
|
||||
|
||||
|
||||
@ -42,7 +42,6 @@ fn main() {
|
||||
.define("DISABLE_TC", "ON")
|
||||
.build();
|
||||
|
||||
// panic!("hahahahah test {}", dst.display());
|
||||
println!("cargo:rustc-link-search=native={}/lib", dst.display());
|
||||
println!("cargo:rustc-link-search=native={}/lib64", dst.display());
|
||||
println!("cargo:rustc-link-lib=static=pcap");
|
||||
|
||||
@ -228,7 +228,7 @@ impl<T: Disabled> Interface<T> {
|
||||
}
|
||||
|
||||
pub fn activate(mut self) -> error::Result<Interface<DevActivated>> {
|
||||
if unsafe { dbg!(ffi::pcap_activate(self.dev)) } != 0 {
|
||||
if unsafe { ffi::pcap_activate(self.dev) } != 0 {
|
||||
Err(unsafe { ffi::pcap_geterr(self.dev) })?;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
[toolchain]
|
||||
channel = "stable"
|
||||
components = []
|
||||
targets = [ "x86_64-unknown-freebsd" ]
|
||||
profile = "minimal"
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "sparse-05-client"
|
||||
version = "0.5.0"
|
||||
version = "0.7.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
@ -12,7 +12,7 @@ libc = "0.2.147"
|
||||
rand = "0.7"
|
||||
rmp-serde = "1.1.2"
|
||||
serde = { version = "1.0.188", features = ["derive"] }
|
||||
sparse-05-common = { version = "0.1.0", path = "../sparse-05-common" }
|
||||
sparse-05-common = { version = "0.7.0", path = "../sparse-05-common" }
|
||||
structopt = { version = "0.3.26", features = ["paw"] }
|
||||
tempfile = "3.8.0"
|
||||
tokio = { version = "1.32.0", features = ["full"] }
|
||||
|
||||
@ -10,6 +10,7 @@ pub fn print_capabilities(capabilities: &Capabilities, ip: &IpAddr) {
|
||||
"\tOperating system: \t{}",
|
||||
match &capabilities.operating_system {
|
||||
OperatingSystem::Linux => "Linux",
|
||||
OperatingSystem::FreeBSD => "FreeBSD",
|
||||
OperatingSystem::Windows => "Windows",
|
||||
}
|
||||
);
|
||||
@ -57,7 +58,7 @@ pub fn print_capabilities(capabilities: &Capabilities, ip: &IpAddr) {
|
||||
}
|
||||
);
|
||||
}
|
||||
OperatingSystem::Windows => {
|
||||
OperatingSystem::Windows | OperatingSystem::FreeBSD => {
|
||||
println!(
|
||||
"\tAdmin user: \t\t{}",
|
||||
match capabilities.root {
|
||||
|
||||
@ -26,6 +26,7 @@ impl std::str::FromStr for TargetOs {
|
||||
fn from_str(input: &str) -> Result<Self, Self::Err> {
|
||||
match input {
|
||||
"linux" => Ok(Self::Linux),
|
||||
"freebsd" => Ok(Self::FreeBSD),
|
||||
"windows" => Ok(Self::Windows),
|
||||
"windows-service" => Ok(Self::WindowsService),
|
||||
_ => Err("could not parse target operating system"),
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "sparse-05-common"
|
||||
version = "0.1.0"
|
||||
version = "0.7.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "sparse-05-server"
|
||||
version = "0.5.0"
|
||||
version = "0.7.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
@ -13,7 +13,7 @@ libc = { version = "0.2.147" }
|
||||
serde = { version = "1.0.188", features = ["derive"] }
|
||||
rmp-serde = "1.1.2"
|
||||
catconf = "0.1.2"
|
||||
sparse-05-common = { version = "0.1.0", path = "../sparse-05-common" }
|
||||
sparse-05-common = { version = "0.7.0", path = "../sparse-05-common" }
|
||||
ecies-ed25519 = { version = "0.5.1", features = ["serde"] }
|
||||
packets = { path = "../../packets" }
|
||||
pcap-sys = { path = "../../pcap-sys", optional = true }
|
||||
|
||||
@ -34,7 +34,7 @@ impl Interface {
|
||||
.ok_or(anyhow!("could not get an ethernet interface"))?
|
||||
} else {
|
||||
interfaces
|
||||
.find(|eth| eth.starts_with("eth") || eth.starts_with("en"))
|
||||
.find(|eth| eth.starts_with("eth") || eth.starts_with("en") || eth.starts_with("vtnet") || eth.starts_with("vmx"))
|
||||
.ok_or(anyhow!("could not get an ethernet interface"))?
|
||||
};
|
||||
|
||||
@ -57,27 +57,24 @@ impl Interface {
|
||||
}};
|
||||
}
|
||||
|
||||
log::debug!("opening interface {interface_name}...");
|
||||
let mut interface = retry!(pcap_sys::Interface::<pcap_sys::DevDisabled>::new(
|
||||
&interface_name
|
||||
));
|
||||
|
||||
retry!(interface.set_buffer_size(1024));
|
||||
retry!(interface.set_buffer_size(2048));
|
||||
retry!(interface.set_non_blocking(false));
|
||||
retry!(interface.set_promisc(false));
|
||||
retry!(interface.set_timeout(10));
|
||||
|
||||
log::debug!("Configured raw listener interface");
|
||||
|
||||
let interface = retry!(interface.activate());
|
||||
|
||||
log::debug!("Activated raw listener interface");
|
||||
|
||||
if cfg!(windows) {
|
||||
retry!(interface.set_filter(&format!("udp port {port}"), true, None));
|
||||
} else {
|
||||
log::debug!("setting pcap filter");
|
||||
if cfg!(linux) {
|
||||
retry!(interface.set_filter(&format!("inbound and udp port {port}"), true, None));
|
||||
} else {
|
||||
retry!(interface.set_filter(&format!("udp port {port}"), true, None));
|
||||
}
|
||||
|
||||
log::debug!("Updated filter for listener interface");
|
||||
|
||||
if interface.datalink() != pcap_sys::consts::DLT_EN10MB {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user