Python之ARP协议探测MAC地址

因为是ARP协议(Address Resolution Protocol,地址解析协议),ARP只能在局域网内使用,如果熟悉该编程,不仅可以对包的结构更熟练,还能进行某些攻击。

代码区:


from scapy.all import * #主要是用来构造包(Windows系统需要安装scapy模块,如果不懂安装可以看https://blog.csdn.net/q759451733/article/details/84038114

def scapy_arp_request(ip_address):#定义函数

    packet = Ether(dst = 'FF:FF:FF:FF:FF:FF')/ARP(op = 1,hwdst = '00:00:00:00:00:00',pdst = ip_address)

#构造ARP包,dst是广播地址,op = 1 和op = 'who-has'是一个意思,意思是发一个广播问谁是XXX(IP地址),告诉发送者。hwdst是目的MAC地址,由于不知道对方的ACM地址,所以设置为全0。pdst是目的地址。(如图一所示)


    packet.show()#展现自己构造的包,可有可无,可以更熟悉哪些参数可以修改


    result_raw = srp(packet,timeout=2,verbose = False)#发送二层数据包,并且等待响应,timeout定义超时的时间,verbose如果不将该参数定义为False,那么屏幕将会打印一些不相关的字符串,定义为False之后,就可以打印自己想看到的字符串


    result_list = result_raw[0].res#表示接收到的数据包的第0层里面的res全部赋值给result_list(如图二所示)

 

    return result_list[0][1].getlayer(ARP).fields['hwsrc']#返回目的MAC地址,在第0层中的第1层,并获取ARP层里面的hwsrc(MAC地址)(如图三所示)

 

if __name__ == '__main__':
    print(scapy_arp_request('192.168.1.1'))
#传参进去,然后打印出来

 

(图一) 2 是目的地址的MAC地址。

(图二)这就是没有过滤后接收到的数据包。

 

(图三)

 

下图便是用wireshark抓到的包:

总结:如果有很多不明白的地方都是可以调试来了解,这样有助于自己对代码和数据包有更深的理解,虽然代码量很少,但是掌握更深内涵还是需要一番功夫。

如果有什么讲解得不好的地方,或者想问的问题都可以在下方评论区评论哟!

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值