写个多线程 局域网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