MacOS support

modified:   frida_core/Cargo.toml
	modified:   frida_core/src/lib.rs
	new file:   frida_core/src/mac_tun.rs
This commit is contained in:
Michael Wain 2024-12-10 04:33:06 +03:00
parent 5170a4d743
commit 4a183e2d4a
3 changed files with 59 additions and 2 deletions

View File

@ -44,7 +44,7 @@ wintun = "0.5.0"
[target.'cfg(target_os="windows")'.build-dependencies] [target.'cfg(target_os="windows")'.build-dependencies]
embed-resource = "2.3" embed-resource = "2.3"
[target.'cfg(target_os="darwin")'.dependencies] [target.'cfg(target_os="macos")'.dependencies]
tun-tap = "0.1.4" tun-tap = "0.1.4"
[target.'cfg(target_os="linux")'.dependencies] [target.'cfg(target_os="linux")'.dependencies]

View File

@ -14,4 +14,10 @@ pub use r#win_tun::*;
mod linux_tun; mod linux_tun;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub use r#linux_tun::*; pub use r#linux_tun::*;
#[cfg(target_os = "macos")]
mod mac_tun;
#[cfg(target_os = "macos")]
pub use r#mac_tun::*;

51
frida_core/src/mac_tun.rs Normal file
View File

@ -0,0 +1,51 @@
use std::process::Command;
use std::sync::Arc;
use tun_tap::{Iface, Mode};
use crate::device::AbstractDevice;
fn cmd(cmd: &str, args: &[&str]) {
let ecode = Command::new("ip")
.args(args)
.spawn()
.unwrap()
.wait()
.unwrap();
assert!(ecode.success(), "Failed to execte {}", cmd);
}
pub fn create(cfg: AbstractDevice) -> (DeviceReader, DeviceWriter) {
let iface = Iface::new("tun%d", Mode::Tun).unwrap();
let address = cfg.address.unwrap().to_string();
address.push_str("/24");
cmd("ip", &["addr", "add", "dev", iface.name(), address]);
cmd("ip", &["link", "set", "up", "dev", iface.name()]);
let iface = Arc::new(iface);
let writer = Arc::clone(&iface);
let reader = Arc::clone(&iface);
(DeviceReader {reader}, DeviceWriter {writer})
}
pub struct DeviceWriter {
writer: Arc<Iface>
}
pub struct DeviceReader {
reader: Arc<Iface>
}
impl DeviceWriter {
pub async fn write(&self, buf: &Vec<u8>) -> Result<usize, Box<dyn Error>> {
self.send(buf)
}
}
impl DeviceReader {
pub async fn read(&self, buf: &mut Vec<u8>) -> Result<usize, Box<dyn Error>> {
self.recv(buf)
}
}