在
我尝试在Python中使用原始套接字将UDP包发送到主机,然后获取包的ICMP响应——基本上是重新实现traceroute。在
我已经成功地构造了IP和UDP报头并发送了数据包。我可以在Wireshark上看到。我还看到Wireshark中的ICMP响应告诉我TTL超过了。在
我有以下代码:me = gethostbyname(gethostname())
my_socket = socket(AF_INET, SOCK_RAW)
my_socket.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
my_socket.bind((me, 0))
hostname = ''
hostip = gethostbyname(hostname)
packet = create_packet(hostname)
send_socket.sendto(packet, (hostip , 0))
然后,在发送数据包后,我调用另一个函数来侦听传入的数据包,其中包括以下代码段:
^{pr2}$
我能够成功地解包IP报头并检查协议,但它总是6或17(TCP或UDP)。即使包含Wireshark的ICMP包中也没有出现它。在
我尝试过将Wireshark中的ICMP包与我的程序可以看到的Wireshark中的其他包进行比较,IP报头几乎完全相同。我不知道怎么了。在
谢谢你的帮助