如何使用 Python 的套接字库更改 TCP Header 和选项

How to change TCP Header and options using Python's socket library

我想获得一些关于如何修改 TCP header 以及更改 TCP header 上的选项的帮助。我对选项的 MSS 部分特别感兴趣。

我试过使用不同选项的 setsockopt() 但没有成功。

下面是一些尝试更改 MSS 的代码:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #! Settings mss
    s.setsockopt(socket.IPPROTO_TCP, socket.IP_OPTIONS , b"MSS:400")

我希望 MSS 更改为 400。代码运行但它不会更改 MSS(使用 Wireshark 检查)。

使用 TCP_MAXSEG 选项。

s.setsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG, 400)

除了@Barmar 所说的之外,您还可以在任何 unix 系统的 "man pages" 中找到更多信息,方法是键入以下之一:

man 7 ip
man 7 tcp
man 7 udp

man是manual的缩写,7overview/misc section

tcp page 关于 TCP_MAXSEG 的说法:

The maximum segment size for outgoing TCP packets. In Linux 2.2 and earlier, and in Linux 2.6.28 and later, if this option is set before connection establishment, it also changes the MSS value announced to the other end in the initial packet. Values greater than the (eventual) interface MTU have no effect. TCP will also impose its minimum and maximum bounds over the value provided.