python scapy arp scan [局域网arp扫描]

写个多线程 局域网arp扫描器
看到网上绝大多数的python scapy arp 局域网扫描脚本写的实在是不敢恭维
spended 3mins code this

流程

1.开启数据包捕捉器
2.构造数据包并发送
本python 局域网arp 扫描器是基于多线程进行接收的,
ps:这年头谁还用sr或者srp 一个个发送并接收的,效率太低了,还慢。
主要是接收包慢,发包并不消耗太多时间及内存

code[name: arp_scan.py]

import sys
from scapy.all import *
from threading import Thread


def scanHOST(IP_list):		//构造数据包并发送
    pkt = Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(pdst=IP_list)		
    sendp(pkt,verbose=False)		


def is_host_live():			//捕捉数据包并过滤出指定条件的数据包确定主机是否存活
    def arp_scan_callback(pkt):
        if ARP in pkt and pkt[ARP].op is 2:			//如果捕捉的数据包有ARP层并且是op 参数为is-at,则确定主机存活
            return pkt.sprintf("%ARP.hwsrc%\t%ARP.psrc%    is lived")
    
    sniff(filter='arp', store=0,prn=arp_scan_callback,timeout=3)	//定义一个过滤器,只捕捉arp 数据包,并调用回调函数进行处理

def main():
    args = sys.argv
    if len(args) != 2:   //如果接受的参数不是两个的话,则打印提示并退出
        print('Usage: python arp_scan.py 192.168.10.0/24')
        exit()

    Thread(target=is_host_live).start()		//定义一个子线程并运行捕捉器函数
    scanHOST(args[1])						//将参数传入扫描函数并运行

if __name__ == '__main__':
    main()

如何使用

 [root@local]# python arp_scan.py 192.168.199.0/24 

你可能感兴趣的:(python,scapy,module)