我正在试着做一个网络扫描仪,用的是scapy。但每次我运行以下代码时,它都会给我不同的结果。它有时显示两个客户端,有时显示三个客户端,但总共显示5个客户端。它没有给出完整结果。怎么了?请帮帮我..
def scan(ip):
arp_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast/arp_request
answered , unanswered = scapy.srp(arp_request_broadcast,timeout=1)
print(answered.summary())
scan("192.168.0.1/24")发布于 2020-04-25 04:04:09
问题是你的超时时间太短了。它当前设置为1,因此您当前不需要等待某些响应。您也可以使用内置的arping来执行arp扫描。
您可以修改代码进行迭代,直到找到产生最多响应的超时为止:
import scapy.all as scapy
def scan(subnet):
i = 0
prev = 0
while True:
i+=1
ans, unans = scapy.arping(subnet, timeout=i, verbose=0)
num_responses = len(ans)
print("Got {} responses in {} seconds".format(num_responses, i))
if num_responses > prev:
prev = num_responses
else:
break
print("You should set your timeout to {} seconds".format(i-1))
scan("192.168.0.0/24")运行这个,我们看到4秒对于我的局域网来说是一个很好的超时(即你的可能不同):
$ sudo python3 arping.py
Got 3 responses in 1 seconds
Got 6 responses in 2 seconds
Got 18 responses in 3 seconds
Got 19 responses in 4 seconds
Got 18 responses in 5 seconds
You should set your timeout to 4 secondshttps://stackoverflow.com/questions/61416031
复制相似问题