注意
* scapy在windows下需要安装npcap,代码使用的python版本是3.8
代码如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : arp_scan.py
# @Author: Feng
# @Date : 2020/11/4
# @Desc : trace
import ipaddress
from scapy.all import *
from multiprocessing import Process
def arp_request(ip_address, queue=None, ifname='Realtek 8812BU Wireless LAN 802.11ac USB NIC'):
result_raw = srp(Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(op=1, hwdst='00:00:00:00:00:00', pdst=ip_address),
timeout =1, iface = ifname, verbose = False)
try:
# arp响应包分两个部分组成的一个元组,前面是收到响应的数据,后面是未收到响应的数据
result_list = result_raw[0].res
# result_list = [(s,r),(s,r),(s,r)]
print((ip_address, result_list[0][1].getlayer(ARP).fields['hwsrc']))
except:
return
def scapy_arp_scan(network):
#qyt_queue =Queue()
net = ipaddress.ip_network(network)
for ip in net:
ip_addr = str(ip)
#arp_request(ip_addr, qyt_queue)
arp_one = Process(target=arp_request, args=(ip_addr,))
arp_one.start()
time.sleep(1)
''' ip_mac_list = []
while True:
if qyt_queue.empty():
break
else:
print(qyt_queue.get())
ip,mac = qyt_queue.get()
ip_mac_list.append((ip,mac))
return ip_mac_list
'''
if __name__ == '__main__':
active_ip_mac = scapy_arp_scan('192.168.31.0/24')