scapy.srp 不给所有客户

Posted

技术标签:

【中文标题】scapy.srp 不给所有客户【英文标题】:scapy.srp dont give all client***y.srp 不给所有客户 【发布时间】:2020-08-08 11:29:26 【问题描述】:

我正在尝试使用 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】:

问题是你的超时时间太短了。它当前设置为 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

【讨论】:

以上是关于scapy.srp 不给所有客户的主要内容,如果未能解决你的问题,请参考以下文章

用http.get()简单实现网络验证防止客户不给尾款_电脑计算机编程入门教程自学

如何使用 jquery 检查多个复选框而不给每个复选框一个 id?

Linux的文件权限

destoon后台权限-不给客户创始人权限并屏蔽部分功能

星际谁帮我罗列一下三族所有科技的作用,及做啥建筑可做啥兵种?

老师上课总是不给PPT?于是我用几行python代码偷偷复制U盘文件