我正在使用 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
验证了接口(interface)的实际 MTU。
我错过了什么吗?
最佳答案
如果您不添加 IFF_NO_PI 标志,您将在您的帧上获得一个 4 字节的 header 。
来自内核文档/networking/tuntap.txt
3.2 Frame format:
If flag IFF_NO_PI is not set each frame format is:
Flags [2 bytes]
Proto [2 bytes]
Raw protocol(IP, IPv6, etc) frame.
据推测,你应该能够得到你想要的东西
from pytun import TunTapDevice, IFF_TUN, IFF_NO_PI
tun = TunTapDevice(name="vpn",flags=(IFF_TUN | IFF_NO_PI))
关于python - 大于 MTU 的数据包到达 TUN 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25262108/