无法在python中使用socket modu设置ECN位

2024-09-30 18:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个tcp服务器,它用SYN+ACK和IP报头集中的ECN位进行响应。在

下面是我编写的示例代码:

# pythonTCPserver.py

import socket

TCP_IP = "127.0.0.1" TCP_PORT = 7979

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_IP, socket.IP_TOS, 0x01)
s.setsockopt(socket.SOL_IP, socket.IP_TTL, 5)

iptos = s.getsockopt(socket.SOL_IP, socket.IP_TOS) ipttl =
s.getsockopt(socket.SOL_IP, socket.IP_TTL)

print "IP TOS is now set to ", iptos print "IP TTL is not set to ", ipttl

s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print "Connection accepted from :", addr print "Closing connection"

conn.close()

在wireshark上运行并捕获包时,我看到TTL被正确地设置为5,但是ECN位没有被设置,实际上整个TOS部分没有改变。在

有没有办法设置ECN位???在


Tags: ipisportsockettcpprintsetttl
1条回答
网友
1楼 · 发布于 2024-09-30 18:18:08

我相信你不能用setsockopt设置ECN位。使用IP_TOS选项,您只能在IP报头中设置DSCP位。两个低位被忽略。因此,使用值0x5而不是0x1会将DSCP设置为1,并保持ECN位不变。在

相反,您可以使用原始套接字,这允许您指定自己的头,这样您就可以为每个数据包设置ECN位。有很多examples的原始套接字,或者您可以看看python documentation。请注意,您不必指定所有标题。例如,您可以选择仅指定from IP up。在

相关问题 更多 >