我正在尝试使用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")
问题是您的超时时间太短。当前设置为1,因此您当前无需等待某些响应。您也可以使用内置的Scapy 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秒钟对我的LAN来说是一个很好的超时时间(即您的时间可能有所不同:]
$ 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 seconds