通过python对本局域网进行ARP扫描
admin
2023-07-21 00:21:56
0
#!/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)

相关内容

热门资讯

《乌苏里船歌》词作者胡小石逝世... 讣 告黑龙江省歌舞剧院著名词作家、国家一级编剧,中国音乐家协会原理事、中国音乐文学学会主席团原委员,...
鲍国安:参加总台端午晚会,我读... “老骥伏枥,志在千里。”作者:鲍国安端午节恰好是我的生日,今年我80岁了,也是第二次收到中央广播电视...
单场圈钱1000万,顶流演唱会... 观众对明星跨界开演唱会的不满,终于在谢娜这里被引爆。6月初,谢娜在《浪姐》舞台上官宣了7月份的演唱会...
原创 5... 6月11日,参考消息网援引《南华早报》报道,中国电子科技集团第55研究所与南京国博电子股份有限公司,...
官方确认:张颂文见义勇为 据广东省韶关市广播电视台官方公众号“韶关头条”6月20日消息,韶关市武江区16日下午组织召开见义勇为...
原创 6... 相比往年,今年的618更加安静,不过618大促结束了,还是要给出高低的,手机行业的数据已经出来,国产...
清华唐杰正面硬刚马斯克:中国A... 新智元报道 【新智元导读】硅谷教父Marc Andreessen亲自转发唐杰的回应,附上「Inte...
85岁大爷长期遭老伴儿家暴,多... 85岁高龄的赵大爷近半年来已经是第三次到派出所求助了,究其原因十分奇葩,竟然是因为家暴,老伴儿对他的...
美情报界警告:内塔尼亚胡可能要... 【文/观察者网 柳白】美伊顺利达成谅解备忘录引发以色列方面强烈抵触,直接导致美以传统梦游关系出现显著...
以军在黎南部地区持续空袭,造成... △当地时间6月20日,黎巴嫩奈拜提耶,以色列空袭后升起烟雾据黎巴嫩民防部门20日宣布,当天以色列国防...