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抓到的包:

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

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

发布了31 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/q759451733/article/details/84144907