为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Scapy 实现 ARP ping?

如何使用 Scapy 实现 ARP ping?

三国纷争 2022-06-02 15:25:01
我一直在尝试创建一个类似于 netdiscover 的网络扫描仪。我使用 Python 和 Scapy 模块来做到这一点。我在虚拟盒子上的 Kali linux 上运行我的脚本,当我扫描由 Virtual Box 创建的 NAT 网络时,它向我显示已连接的设备,但是当我使用无线适配器扫描我的 wifi 网络时,扫描仪无法找到任何设备,这很奇怪,因为 netdiscover 找到了大量的设备。但是,当我使用 Scapy 实现的 arping 功能时,设备也会显示,但是当我运行我的代码时,它不会检测到任何设备。这是为什么?我使用了 Scapy 文档建议的代码,但它仍然没有显示任何设备。只有 Scapy arping 功能才能检测到任何设备import scapy.all as scapyimport subprocess as subimport redef get_IP():    output=sub.check_output("route -n",shell=True)    ips={}    for row in output.split("\n")[2:]:        found=re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",row)        device=re.findall("[a-z]{2,10}\d$",row)        for ip in found:            if ("0.0.0" not in ip and "255.255.255" not in ip):                ips[device[0]]=ip    for device,ip in ips.items():        print("Device: {}\tIP: {}".format(device,ip))    device = raw_input("Choose a device > ")    return(ips[device][:-1]+"1/24")def scan(ip):    #My code    print("Scanning...")    arp_request=scapy.ARP(pdst=ip)    brodcast=scapy.Ether(dst="ff:ff:ff:ff:ff:ff")    arp=brodcast/arp_request    answered=scapy.srp(arp, timeout=1,verbose=False)[0]    for element in answered:        print("IP:{}".format(element[1].psrc))        print("MAC address: {}\n".format(element[1].hwsrc))def scan2(ip):    #Code from scapy documentation and it's also not detecting any devices    ans, unans = scapy.srp(scapy.Ether(dst="ff:ff:ff:ff:ff:ff")/scapy.ARP(pdst=ip),timeout=2)    ans.summary(lambda (s,r): r.sprintf("%Ether.src% %ARP.psrc%") )def scan3(ip):    #This works    scapy.arping(ip)ip = get_IP()scan(ip)scan2(ip)scan3(ip)
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我只是通过停用与 NAT 网络的连接来解决它,所以我使用了ifconfig eth0 down. 但是在某些情况下,这不是问题。如果您的路由器不允许网络扫描,您需要更改您的 MAC 地址,这意味着您需要运行一系列这些命令


ifconfig wlan0 down

ifconfig wlan0 hw ether 00:22:44:66:88:33 # Ofcourse you can choose any MAC address you want

ifconfig wlan0 down

ifconfig wlan0 up

service network-manager restart

之后,网络扫描仪将检测当前在网络中的设备


查看完整回答
反对 回复 2022-06-02
?
心有法竹

TA贡献1866条经验 获得超5个赞

试试这种方式:


from scapy.all import scapy,ARP,Ether,srp,arping

或者这样:


from scapy.layers.l2 import *

在这两种情况下,请记住删除“scapy.”,如下所示:


#Before

scapy.arping(ip)

#After

arping(ip)


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信