当前位置: 首页 > 工具软件 > arpscan > 使用案例 >

python实现arp协议扫描

濮阳旺
2023-12-01

注意

* 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')





 类似资料: