tokio-tun(llinux下的tun)

tokio-tun(llinux下的tun),第1张

tokio-tun(llinux下的tun)
use std::net::Ipv4Addr;
use std::os::unix::io::AsRawFd;
use tokio::io::AsyncReadExt;
use tokio_tun::result::Result;
use tokio_tun::TunBuilder;

#[tokio::main]
async fn main() -> Result<()> {
    let queues = 3;

    let tuns = TunBuilder::new()
        .name("")
        .tap(false)
        .packet_info(false)
        .mtu(1350)
        .up()
        .address(Ipv4Addr::new(10, 0, 0, 1))
        .destination(Ipv4Addr::new(10, 1, 0, 1))
        .broadcast(Ipv4Addr::BROADCAST)
        .netmask(Ipv4Addr::new(255, 255, 255, 0))
        .try_build_mq(queues)?;

    println!("--------------");
    println!("{} tuns created", queues);
    println!("--------------");

    println!(
        "┌ name: {}n├ fd: {}, {}, {}n├ mtu: {}n├ flags: {}n├ address: {}n├ destination: {}n├ broadcast: {}n└ netmask: {}",
        tuns[0].name(),
        tuns[0].as_raw_fd(), tuns[1].as_raw_fd(), tuns[2].as_raw_fd(),
        tuns[0].mtu().unwrap(),
        tuns[0].flags().unwrap(),
        tuns[0].address().unwrap(),
        tuns[0].destination().unwrap(),
        tuns[0].broadcast().unwrap(),
        tuns[0].netmask().unwrap(),
    );

    println!("---------------------");
    println!("ping 10.1.0.2 to test");
    println!("---------------------");

    let mut tuns = tuns.into_iter();
    let mut tun0 = tuns.next().unwrap();
    let mut tun1 = tuns.next().unwrap();
    let mut tun2 = tuns.next().unwrap();

    let mut buf0 = [0u8; 1024];
    let mut buf1 = [0u8; 1024];
    let mut buf2 = [0u8; 1024];

    loop {
        let (buf, id) = tokio::select! {
            Ok(n) = tun0.read(&mut buf0) => (&buf0[..n], 0),
            Ok(n) = tun1.read(&mut buf1) => (&buf1[..n], 1),
            Ok(n) = tun2.read(&mut buf2) => (&buf2[..n], 2),
        };
        println!("reading {} bytes from tuns[{}]: {:?}", buf.len(), id, buf);
    }
}

目前不支持mac 只能先跑下官方demo

一些笔记:

255的二进制是11111111
255.255.255.0 就是8+8+8 24个1
所以子网掩码24 =255.255.255.0

怎么证明10.1.22.13和10.1.22.14是一个网段
10.1.22.13&255.255.255.0=10.1.22.0
10.1.22.14&255.255.255.0=10.1.22.0
所以他们是一个网段==

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5719218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存