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:
parent
5170a4d743
commit
4a183e2d4a
@ -44,7 +44,7 @@ wintun = "0.5.0"
|
||||
[target.'cfg(target_os="windows")'.build-dependencies]
|
||||
embed-resource = "2.3"
|
||||
|
||||
[target.'cfg(target_os="darwin")'.dependencies]
|
||||
[target.'cfg(target_os="macos")'.dependencies]
|
||||
tun-tap = "0.1.4"
|
||||
|
||||
[target.'cfg(target_os="linux")'.dependencies]
|
||||
|
@ -15,3 +15,9 @@ mod linux_tun;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
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
51
frida_core/src/mac_tun.rs
Normal 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)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user