我使用pytun设置TUN并使用UDP将转发到其上的数据包转发到另一台计算机。让我感到困惑的是,即使我已经将TUN配置为具有141字节的MTU,我也会读取大小为145的数据包。请参阅以下代码:
from pytun import TunTapDevice
tun = TunTapDevice(name="vpn")
tun.addr = '10.8.0.1'
tun.dstaddr = '10.8.0.2'
tun.netmask = '255.255.255.0'
tun.mtu = 141
tun.up()
assert len(tun.read(1000)) <= tun.mtu # <-- fails for some packets
我已使用ifconfig
验证了界面的实际MTU。
我错过了什么吗?
答案 0 :(得分:4)
如果你没有添加IFF_NO_PI标志,你的帧上会得到一个4字节的标题。
从内核Documentation / networking / tuntap.txt
3.2帧格式:
如果未设置标志IFF_NO_PI,则每种帧格式为:
标志[2字节]
Proto [2字节]
原始协议(IP,IPv6等)框架。
据推测,你应该能够得到你想要的东西
from pytun import TunTapDevice, IFF_TUN, IFF_NO_PI
tun = TunTapDevice(name="vpn",flags=(IFF_TUN | IFF_NO_PI))