如何在python中获取网站的跳数

时间:2017-08-20 16:43:41

标签: python scapy traceroute

y

我正在使用上面的代码并获得低于输出。如何获得我的机器和服务器之间的跳数,即下面的情况为18?

addr = socket.gethostbyname('dalitstan.org')
target = [addr]
result, unans = traceroute(target,maxttl=32)

1 个答案:

答案 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])