Python Scapy Arp扫描子网脚本来自一本书
我正在读一本Python书,书中有一个脚本,可以使用scapy(Python工具/模块)扫描子网中任何启动的主机,并报告它们的IP和MAC地址。此脚本是对先前调用Python Scapy Arp扫描子网脚本来自一本书,python,scapy,Python,Scapy,我正在读一本Python书,书中有一个脚本,可以使用scapy(Python工具/模块)扫描子网中任何启动的主机,并报告它们的IP和MAC地址。此脚本是对先前调用/usr/bin/arping的脚本的增强。以前的脚本一次只允许一个IP地址,并且平台依赖于可用的arping工具。显然,这个脚本(对我来说不适用)是独立于平台的 如果有人可以查看脚本并调试它,那将是非常棒的。以下是脚本: #! /usr/bin/env python from scapy.all import srp from sc
/usr/bin/arping
的脚本的增强。以前的脚本一次只允许一个IP地址,并且平台依赖于可用的arping
工具。显然,这个脚本(对我来说不适用)是独立于平台的
如果有人可以查看脚本并调试它,那将是非常棒的。以下是脚本:
#! /usr/bin/env python
from scapy.all import srp
from scapy.all import Ether, ARP, conf
import sys
def arping(iprange="10.0.1.0/24"):
"""Arping function takes IP Address or Network, returns nested mac/ip list"""
#conf, verb = 0
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=iprange), timeout=2)
collection = []
for snd, rcv in ans:
result = rcv.sprintf(r"%ARP.psrc% %Ether.src%").split()
collection.append(result)
return collection
if __name__ == "__main__":
if len(sys.argv) > 1:
for ip in sys.argv[1:]:
print "arping", ip
print arping(ip)
else:
print arping()
脚本不起作用。它只是打印出它正在扫描东西,但什么也没找到
我在这个网站上找到了一个同样不起作用的教程。该网站的相关内容如下:
请参阅下面的示例,了解我在运行此脚本时获得的输出:
loser@loser:~/Desktop/pyFun2$ gedit arp_scanz.py
loser@loser:~/Desktop/pyFun2$ sudo python arp_scanz.py
WARNING: No route found for IPv6 destination :: (no default route?)
Begin emission:
Finished to send 256 packets.
Received 0 packets, got 0 answers, remaining 256 packets
[]
有人知道我错过了什么吗
更新-解决方案
更改srp函数或方法调用以指定要扫描的确切接口,如下所示:
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=iprange),iface="en1", timeout=2)
可能有很多东西。使用有效的IP起始点,我的网络上的脚本似乎运行得很好 你的IP范围合适吗 例如,我使用:
def arping(iprange="192.168.1.*"):
这将产生正确的结果,并且与scapy的内置arping()函数的结果相同
因此,我认为可能不是代码本身,而是您正在尝试的范围。感谢您在您的机器上测试此功能并提供一些有用的建议。我发现我必须指定要扫描的接口是我的问题。我还发现,在交互式shell中使用
arping()
方法在使用sudo
命令打开python交互式shell后,确实会返回相同的结果。我不确定昨晚为什么不起作用。也许我需要重新启动我的机器,或者我太累了,错过了一些小细节。请参见上文,了解我现在对srp
的调用,并指定要扫描的接口:DIt不是我正在使用的范围,但我没有意识到这个,scapy脚本,实际上对任何其他人都有效。感谢您了解这一点,并报告您的结果。这激发了我的灵感……我发现我还可以使用我认为是CIDR的符号指定I范围,比如so192.168.1.0/24
这将扫描子网中的所有内容,就像192.168.1.*
:D一样