我想创建一个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位???在
我相信你不能用setsockopt设置ECN位。使用IP_TOS选项,您只能在IP报头中设置DSCP位。两个低位被忽略。因此,使用值0x5而不是0x1会将DSCP设置为1,并保持ECN位不变。在
相反,您可以使用原始套接字,这允许您指定自己的头,这样您就可以为每个数据包设置ECN位。有很多examples的原始套接字,或者您可以看看python documentation。请注意,您不必指定所有标题。例如,您可以选择仅指定from IP up。在
相关问题 更多 >
编程相关推荐