1
我构建了一个traceroute-ish工具来确定UDP数据包仅使用一个探针到达地址所需的跳数。为此,我想从发送探测后收到的ICMP消息中提取TTL。我做以下,并成功接收到ICMP消息:从通过Python原始套接字接收到的ICMP消息中读取TTL
data, source = in_socket.recvfrom(d_bufsize)
但我不知道如何把data
到的东西,我可以阅读从TTL。 in_socket
声明如下:
in_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp_proto)
这里,icmp_proto
仅仅是ICMP协议号(通过执行icmp_proto = socket.getprotobyname("icmp")
获得)。
任何帮助将不胜感激!
TTL位于IP标头中,不属于ICMP。所以除非这个返回整个IP数据包,否则你不能这样做。 – Barmar
@Barmar:诀窍是ICMP消息包含触发错误的数据报的一部分。因此,通过发送一个已知TTL的数据报,然后使用错误触发数据报的包含部分来确定到达时的TTL,您应该能够确定跳数。 – hexaflexagonal
噢,我以为你在谈论接收到的数据报的TTL,而不是触发ICMP的发送数据报的TTL。 – Barmar