想知道如何写一个网络包探嗅器吗?Python教你
基本嗅探器
嗅探器是一种程序,它可以逐包捕获/嗅探/检测网络流量包,并对其进行各种原因的分析。常用于网络安全领域。Wireshark是一种非常常见的包嗅探器/协议分析器。包嗅探器也可以用Python编写。在本文中,我们将用Python为Linux平台编写一些非常简单的嗅探器。Linux是因为,尽管python是可移植的,但是这些程序在Windows上不会运行或给出类似的结果。这是由于SocketAPI的实现有所不同。
这里显示的嗅探器不使用任何额外的库,如libpcap。它们只使用原始套接字。所以让我们开始编码它们
嗅探器最基本的形式是
#Packet sniffer in python #For Linux import socket #create an INET, raw socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) # receive a packet while True: print s.recvfrom(65565)
在Ubuntu上使用根权限或sudo运行此命令:
$ sudo python sniffer.py
上述嗅探器的工作原理是:原始套接字能够在Linux中接收所有(其类型,如af-inet)传入的流量。
输出可能如下所示:
$ sudo python raw_socket.py ("E\x00x\xcc\xfc\x00\x000\x06j%J}G\x13\xc0\xa8\x01\x06\x01\xbb\xa3\xdc\x0b\xbeI\xbf\x1aF[\x83P\x18\xff\xff\x88\xf6\x00\x00\x17\x03\x01\x00\x1c\xbbT\xb3\x07}\xb0\xedqE\x1e\xe7;-\x03\x9bU\xb7\xb1r\xd2\x9e]\xa1\xb8\xac\xa4V\x9a\x17\x03\x01\x00*\xed\x1f\xda\xa4##Qe\x9a\xe9\xd6\xadN\xf4\x9b\xc4\xf0C'\x01\xc4\x82\xdb\xb2\x8d(\xa5\xd0\x06\x95\x13WO\x0f\x8e\x1c\xa6f\x1d\xdf\xe1x", ('74.125.71.19', 0)) ('E\x00I\xcc\xfd\x00\x000\x06jSJ}G\x13\xc0\xa8\x01\x06\x01\xbb\xa3\xdc\x0b\xbeJ\x0f\x1aF[\x83P\x18\xff\xff:\x11\x00\x00\x17\x03\x01\x00\x1c\xaa];\t\x81yi\xbbC\xb5\x11\x14(Ct\x13\x10wt\xe0\xbam\xa9\x88/\xf8O{', ('74.125.71.19', 0))
上面是以十六进制表示的网络包的转储。它们可以使用unpack函数进行解析。
小编推荐一个学python的学习qun 740322234
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
分析嗅探的数据包
这是代码嗅探和解析TCP包
#Packet sniffer in python for Linux #Sniffs only incoming TCP packet import socket, sys from struct import * #create an INET, STREAMing socket try: s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) except socket.error , msg: print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] sys.exit() # receive a packet while True: packet = s.recvfrom(65565) #packet string from tuple packet = packet[0] #take first 20 characters for the ip header ip_header = packet[0:20] #now unpack them :) iph = unpack('!BBHHHBBH4s4s' , ip_header) version_ihl = iph[0] version = version_ihl >> 4 ihl = version_ihl & 0xF iph_length = ihl * 4 ttl = iph[5] protocol = iph[6] s_addr = socket.inet_ntoa(iph[8]); d_addr = socket.inet_ntoa(iph[9]); print 'Version : ' + str(version) + ' IP Header Length : ' + str(ihl) + ' TTL : ' + str(ttl) + ' Protocol : ' + str(protocol) + ' Source Address : ' + str(s_addr) + ' Destination Address : ' + str(d_addr) tcp_header = packet[iph_length:iph_length+20] #now unpack them :) tcph=unpack('!HHLLBBHHH', tcp_header) source_port=tcph[0] dest_port=tcph[1] sequence=tcph[2] acknowledgement=tcph[3] doff_reserved=tcph[4] tcph_length=doff_reserved >>4 print'Source Port : '+str(source_port)+' Dest Port : '+str(dest_port)+' Sequence Number : '+str(sequence)+' Acknowledgement : '+str(acknowledgement)+' TCP header length : '+str(tcph_length) h_size=iph_length+tcph_length*4 data_size=len(packet)-h_size #get data from the packet data=packet[h_size:] print'Data : '+data
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
程序员初入公司:10大经验让你能力提升20倍!
IT企业普遍有个特点,“把女人当男人用,把男人当**(此处略去2个字)用。” 有句俗话说,“男怕入错行”,我想这句话其实也同样适用IT女生。 我们可以做个小测试工,就是问自己一百遍“喜欢当程序员吗”,如果你的回答总是肯定的,那么好的,开始认真学吧; 如果发现50多次后面,自己不再那么确定了,那么就为自己打打劲,在后续的学习中多加努力; 如果没几次就懒得回答这个问题了,那么可能就真的应该好好想想,是否有必要在一个自己不喜欢并且无法投入的行业中浪费宝贵的几年时光呢。 有人会说,不试一试又怎么知道喜不喜欢呢,这种看法,也有一定的道理,但我想说的是,认真思考,果断决定,为自己负责,为企业负责。 关于C/C++语言的学习,我个人有以下几点感受: 首先,做C/C++语言相关业务开发应该学什么? 1、C语言 这好像不用想,必须学的。 - 2、C++语言 配合对OO的学习,也是必须的。 - 3、UNIX下的C编程 学习了C和C++的语言后,因为我们的应用程序一般都是在UNIX环境下运行,所以,学习UNIX环境下的相关技术也是非常必要的。 - 4、SHELL命令及编程 要把程序在UNIX环境下运行起来,...
- 下一篇
Zookeeper详细参数解析zoo.cfg文件
Zookeeper分布式协调服务,在分布式架构中非常重要。比如我们搭建Kafka集群,或者Hadoop大数据集群。就需要使用到Zookeeper。Zookeeper本意是 动物管理员,动物饲养员。 ZooKeeper是一种分布式协调服务,提供集中式协调服务,用于维护配置信息,命名,提供分布式同步和选举服务。 zookeeper的配置文件包含许多可以配置的参数,这里在使用zookeeper的时候必须要明白每个参数的含义。zookeeper的配置文件在conf文件下的zoo.cfg。主要配置参数都在例子文件中可以看到,但是集群配置参数没有提供,特殊配置需要查看官方文档,每个版本不同可能存在差别。 #每个tick的毫秒数,每个确认消息持续2秒,等待应答。 tickTime= 2000 #初始同步阶段,可以发送的确认的最大的同步消息的数量 i
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- 2048小游戏-低调大师作品
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题