scapy.srp不提供所有客户端

问题描述 投票:0回答:1

我正在尝试使用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")
python networking scapy arp
1个回答
0
投票

问题是您的超时时间太短。当前设置为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
© www.soinside.com 2019 - 2024. All rights reserved.