栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

tokio-tun(llinux下的tun)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
所以他们是一个网段==

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号