通过python对本局域网进行ARP扫描获取MAC

2021-07-20 12:07

阅读:721

标签:short   none   ali   函数   ldl   变量   能力   注入   轻松   

#!/usr/local/bin/python3 """ 对本局域网进行ARP扫描 ARP (Address Resolution Protocol,ARP); 以太网MAC地址识别(如下): 主机在整个局域网广播ARP请求消息,该ARP请求中包含目标设备的IP地址; 局域网上的每一台设备都会检查该ARP请求,看该ARP请求中的IP地址是不是自己; 只有符合该IP地址的设备才会发送ARP响应; ARP响应该中包涵了ARP请求中的IP地址及对应的MAC地址; """ """ 这里需要Scapy这个模块 https://pypi.org/project/ 去这里下载scapy 或者去它官网https://scapy.net/ 下载 Scapy是一个功能强大的交互式包操作程序.它能够伪造或解码大量的协议包, 还有能发送,捕获,匹配及回复各种大量的协议包.它还能轻松的处理大量的经典任务, 如扫描,跟踪,探测,单元测试,×××或网断扫描; 并且它还能处理其它其它工具所无法处理的任务,如发送无效帧及注入自己的802.11帧, 还有一些结合技术(如VLAN跳转+ARP缓存中毒,WEP加密信道上的VoIP解码等), 总之就是很强大 执行本脚本时 ,如果需要用sudo来执行 """ """ ls() 列出所有的协议及协议选项 lsc() 列出所有scapy的命令函数 """ """ /操作符在两层之间起到一个组合的作用。当使用该操作符时, 下层可以根据其上层,使它的一个或多个默认字段被重载。 本例中需要用的下面几个函数 >>>ls(Ether) dst : DestMACField = (None) src : SourceMACField = (None) type : XShortEnumField = (36864) #dst 目标mac地址 6字节 48位 dst设置为ff:ff:ff:ff:ff:ff 为广播设置 #src 源mac地址 6字节 48位 #type 以太网类型,用于标识上一层使用的是什么协议;比如0800是IP协议,0806是ARP协议,8035是RARP协议 >>>ls(ARP) hwtype : XShortField = (1) ptype : XShortEnumField = (2048) hwlen : FieldLenField = (None) plen : FieldLenField = (None) op : ShortEnumField = (1) hwsrc : MultipleTypeField = (None) psrc : MultipleTypeField = (None) hwdst : MultipleTypeField = (None) pdst : MultipleTypeField = (None) #hwtype 硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1 #ptype 标识上一层使用的是什么协议 #op 是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。 #hwsrc 源mac地址 #psrc 源ip地址 #hwdst 目标mac地址 #pdst 目标ip地址 >>> srp1(pkt,timeout=1,verbose=0 ) #srp1 在第二层协议上发送及接收包并返回第一次的应答 #pkt 构建包的变量 #timeout=1 超时1秒就丢弃,实际时间看程序处理能力而定 #verbose=0 不显示详细信息 """ from scapy.all import * import sys,getopt,socket def get_local_net(): #获取主机名 hostname = socket.gethostname() #获取主机的局域网ip localip = socket.gethostbyname(hostname) localipnums = localip.split(‘.‘) localipnums.pop() localipnet = ‘.‘.join(localipnums) return localipnet def get_vlan_ip_and_mac(): localnet = get_local_net() result = [] for ipFix in range(1,254): ip =localnet+"."+str(ipFix) #组合协议包 arpPkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip) res = srp1(arpPkt,timeout=1,verbose=0) if res: result.append({"localIP":res.psrc,"mac":res.hwsrc}) return result result = get_vlan_ip_and_mac() print(result)

通过python对本局域网进行ARP扫描获取MAC

标签:short   none   ali   函数   ldl   变量   能力   注入   轻松   

原文地址:http://blog.51cto.com/quietnight/2162891


评论


亲,登录后才可以留言!