Mac下tun的测试
cargo.toml
tokio={version="1.0",features=["full"]}
tun = { version = "0.5", features = ["async"] }
futures="0.3"
tokio-util="0.6.9"
packet="0.1.4"
main.rs
use std::io::Error;
use futures::{SinkExt};
use packet::{builder::Builder, icmp, ip, Packet};
use tun::{self, Configuration, TunPacket};
use std::process::Command;
use futures::StreamExt;
#[tokio::main]
async fn main() {
let mut config = tun::Configuration::default();
config
.address((10, 0, 0, 1))
.netmask((255, 255, 255, 0))
.up();
#[cfg(target_os = "linux")]
config.platform(|config| {
config.packet_information(true);
});
let dev = tun::create_as_async(&config).unwrap();
let upeth_str: String = "ifconfig utun3 10.0.0.13 10.0.0.1 up ".to_string();
let routeadd_str: String = "sudo route -n add -net 18.10.49.3 -netmask 255.255.255.0 10.0.0.1".to_string();
let upeth = Command::new("sh").arg("-c").arg(upeth_str).output().expect("sh exec error!");
let ifconfigcmd = Command::new("sh").arg("-c").arg(routeadd_str).output().expect("sh exec error!");
let cmd_str: String = " ifconfig|grep flags=8051|awk -F ':' '{print $1}'|tail -1".to_string();
let ifconfigcmd = Command::new("sh").arg("-c").arg(cmd_str).output().expect("sh exec error!");
println!("{:?}", ifconfigcmd);
let mut stream = dev.into_framed();