我尝试在 Scapy 中进行 tracert 操作,但它对我不起作用,它写给我打印错误(NoneType),有人可以帮我解决问题吗?
from scapy.all import *
from scapy.layers.inet import IP, ICMP, Ether, UDP, traceroute
TTL = 28
packet = IP(dst = '8.8.8.8') / ICMP(type = 0)
for i in range(TTL):
packet[IP].ttl = i + 1
ans = sr1(packet, timeout = 2, verbose = 0)
print(ans[IP].src)
回答1
您不能假设您发送的每个 ICMP 回显请求都会得到答复。如果您没有收到答案,则 sr1
会在 2 秒延迟后返回 None
。这解释了错误消息,因为 ans[IP].src
不正确,因为 ans
是 None
。因此,您必须在代码中处理这种情况:
from scapy.all import IP, ICMP, sr1
TTL = 28
packet = IP(dst = '8.8.8.8') / ICMP(type = 0)
for i in range(TTL):
packet[IP].ttl = i + 1
ans = sr1(packet, timeout = 2, verbose = 0)
if ans is None:
print('no response...')
else:
print(ans[IP].src)