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]
|
[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]
|
||||||
|
@ -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
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