python - 大于 MTU 的数据包到达 TUN 接口(interface)

标签 python mtu tun

我正在使用 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/

相关文章:

android - Android TCP/IP MTU 的构建时配置

python - 使用 Python 发送原始 IP 流量 : Detect MTU

c - 如何使用 TUN/TAP 接口(interface)在两个进程之间发送数据包?

linux - 使用 Linux::TunTap 读取数据包

linux - 伪装docker接口(interface)和主机接口(interface)

javascript - 通过程序获取 Coursera 视频下载链接

python - 逻辑回归 : plotting decision boundary from theta

linux - 在每个套接字的基础上调整 MTU?

python - 从函数调用的输出中删除 None

python - Django模型复杂查询