0221-使用 TUN 来进行通信
环境
- Time 2022-11-20
- WSL-Ubuntu 22.04
- Rust 1.65.0
- pnet 0.31.0
- tun-tap 0.1.3
前言
说明
参考:https://docs.rs/pnet_packet/latest/pnet_packet/index.html
参考:https://www.kernel.org/doc/html/latest/networking/tuntap.html
目标
数据链路层基本上就这样了,接下来看看三层的协议。
TUN 属于三层设备,可以模拟三层的数据交换。
新建 TUN 设备
root@jiangbo12490:~# ip tuntap add tun0 mode tun
root@jiangbo12490:~# ip addr add 172.24.51.244/20 dev tun0
root@jiangbo12490:~# ip link set up dev tun0
root@jiangbo12490:~# ip addr show tun0
22: tun0: <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 500
link/none
inet 172.24.51.244/20 scope global tun0
valid_lft forever preferred_lft forever
main.rs
fn main() -> std::io::Result<()> {
let iface = Iface::without_packet_info("tun0", Mode::Tun)?;
let mut buffer = vec![0; 1500];
loop {
let size = iface.recv(&mut buffer)?;
println!("{:?}", &buffer[..size]);
}
}
Cargo.toml
[package]
edition = "2021"
name = "network"
version = "1.0.0"
[dependencies]
pnet = "0.31.0"
tun-tap = "0.1.3"
pnet_packet 和 pnet_datalink 统一到 pnet 包里。
发送回应
iface.send(eth.packet_mut()).unwrap();
抓包结果
使用 ping 命令抓包,ping -I tun0 172.24.51.243
root@jiangbo12490:~# tcpdump -X -i tun0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
21:44:12.370724 IP 172.24.51.244 > 172.24.51.243: ICMP echo request, id 46399, seq 306, length 64
0x0000: 4500 0054 ad63 4000 4001 cd2d ac18 33f4 E..T.c@.@..-..3.
0x0010: ac18 33f3 0800 d5dd b53f 0132 2cd2 7c63 ..3......?.2,.|c
0x0020: 0000 0000 fea7 0500 0000 0000 1011 1213 ................
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
21:44:13.410790 IP 172.24.51.244 > 172.24.51.243: ICMP echo request, id 46399, seq 307, length 64
0x0000: 4500 0054 adbe 4000 4001 ccd2 ac18 33f4 E..T..@.@.....3.
0x0010: ac18 33f3 0800 4e40 b53f 0133 2dd2 7c63 ..3...N@.?.3-.|c
0x0020: 0000 0000 8444 0600 0000 0000 1011 1213 .....D..........
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
总结
新增了三层的模拟设备 TUN,使用 ping 命令和抓包工具来验证了通信的正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-08-13 【JavaScript】Object 实例属性