y
我正在使用上面的代码并获得低于输出。如何获得我的机器和服务器之间的跳数,即下面的情况为18?
addr = socket.gethostbyname('dalitstan.org')
target = [addr]
result, unans = traceroute(target,maxttl=32)
答案 0 :(得分:1)
您正在寻找的结果是TCP层的第一个答案(因为之前的跃点回答了ICMP数据包)。更准确地说,您正在寻找已发送的TCP答案的较低TTL。
在Scapy中,您可以使用(probe, answer)
:SndRcvList
从包含TCP图层的[TCP]
对象中选择result[TCP]
元组。如果我不够清楚,您可以将result.show()
与result[TCP].show()
进行比较。
现在,要提取已发送数据包的ttl
值,您可以使用[snd[IP].ttl for snd, _ in result[TCP]]
。您只需要使用min()
(或使用[0]
或next()
的第一个值来获取最小值,因为数据包已排序;我觉得使用min()
更安全不过):
result, _ = traceroute('dalitstan.org')
min(snd[IP].ttl for snd, _ in result[TCP])