我正在阅读一本Python书籍,其中有一个脚本可以使用scapy(Python工具/模块)来扫描子网中任何已启动的主机并报告其IP和MAC地址。此脚本是对前一个调用/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()
该脚本不起作用。它只是打印它扫描的东西,但没有找到任何东西。
我查看了这个网站,发现了一个也没有用的教程。该网站及相关内容如下:http://www.secdev.org/projects/scapy/doc/usage.html#arp-ping
请参阅下面的示例,了解运行此脚本时获得的输出示例:
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)
答案 0 :(得分:1)
可以是任何数量的东西。我似乎使用有效的IP起点在我的网络上运行该脚本。
您是否正在使用适当的IP范围?
例如我使用:
def arping(iprange="192.168.1.*"):
为arping()函数内置的scapy产生正确的结果和相同的结果。
所以我想也许这不是代码,而是你正在尝试的范围。