Python之scapy-sniff(流量监控)

本篇文章主要讲述的是ARP流量监控,就当局域网中有攻击者运用ARP毒化,如果IP地址和MAC地址不对应时,就打印出不对应的字符,或者该局域网没有的IP地址,也会打印没有该主机。也可以改成TCP、UDP等协议的监控,不过ARP比较方便阐述,因为ARP协议几乎每时每刻都在发送。该篇文章对防黑客是有很大功效的,当黑客发送一些奇奇怪怪的数据报时,我们可以运用Python来报警,告知管理员有奇怪的数据报发来,并作出相应的对策。我们虽然有wireshark抓包工具,但是人总不可能一直都盯着那么多的数据报的,总是需要计算机对抗计算机。那么Python将是最好的选择,代码量极少,不但能抓包显示,还能发出报警。

 

我们需要用到scapy模块,如果在Windows系统下不会安装此模块的可以参考(https://blog.csdn.net/q759451733/article/details/84038114),若是Linux系统先安装好Python后,就可以直接在终端输入pip install ... 便安装成功了。

注意!注意!注意!尽量使用Linux系统运行,因为Windows系统有可能会出现莫名其妙的错误,比如:本人不知道发生了什么情况居然无法使用scapy模块(很奇葩,前天还舒舒服服得用着,第二天就出问题了)。本人是用kali Linux系统,里面自带nmap。运行Python代码尽量用kali Linux系统,因为不管是黑客大赛还是黑客攻击,该系统里面都自带非常的多的黑客软件,所以用起来非常的方便。

代码区:

 from scapy.all import *  

arp_table = {"192.168.1.102":"00:0c:29:63:08:6c","192.168.1.1":"0c:d8:6c:65:c2:52"}   #定义一个字典,字典里面存储IP地址和MAC地址

def telnet_monitor(pkt):    

   if arp_table .get(pkt[ARP].psrc):        #如果接收到的数据报中IP地址在arp_table有相对应的,执行

     if arp_table [pkt[ARP].psrc] == pkt[ARP].hwsrc:          #如果接收到的数据报中MAC地址在arp_table有相对应的MAC地址,执行

       print(pkt[ARP].psrc + ' : ' + pkt[ARP].hwsrc + ' matching')         #打印IP地址和MAC地址并与arp_table中匹配

    else:             #如果接收到的数据报中MAC地址在arp_table没有相对应的MAC地址,执行

      print(pkt[ARP].psrc + ' : ' + pkt[ARP].hwsrc + ' mismatching')     #打印IP地址和MAC地址并与arp_table中不匹配

  else:        #如果接收到的数据报中IP地址在arp_table没有相对应的,执行

       print(pkt[ARP].psrc + ' : ' + pkt[ARP].hwsrc + ' can not find host')       #打印改数据报中的IP地址和MAC地址并显示没有该主机

if __name__ == '__main__':

  PTKS = sniff(prn = telnet_monitor,filter = "arp",store=1,timeout=15)      #嗅探ARP数据报后执行telnet_monitor函数,store=1是存储嗅探到的数据报,超时时间是15

  wrpcap("ARP.cap",PTKS)      #在该Python代码目录下存储数据报为ARP.cap,主要是给wireshark运行。在Windows系统下,想把该文件存放到相应的绝对路径下,比如:C:/Users/Administrator/Desktop/telnet.cap,注意:是 / 而不是\ 与文件中的路径有一点出路。

如下图是执行该代码的结果:

Python之scapy-sniff(流量监控)_第1张图片

如下图是该抓取到的数据报,简洁清晰,极易分析。

Python之scapy-sniff(流量监控)_第2张图片

 

总结:该篇运用scapy中的sniff功能,对于公司管理人员是极其有用的,不但可以抓取存储数据报,还能对其报警,比如设置一个函数可以发送email等,告知管理员有特殊情况,这样便可以最快地作出反应。其实这个ARP主要是用来熟悉sniff的强大之处,真正实用之处还是嗅探其他协议,比如telnet协议,当有人想Telnet主机时,可以选择报警或打印对方输入的数据。

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

你可能感兴趣的:(Python网络编程入门)