一提到Python获取数据包的方式,相信很多Python爱好者会利用Linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:1.Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。2.dpkt协议分析并非必须,如果你对RFC791和RFC793等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。如果你平常习惯使用tcpdump抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpdump将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:tcpdumpdst10.13.202.116andtcpdstport80-s0-ieth1-w../pcap/tcpdump.pcap-C1k-W5我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:sturctpcap_file_header{DWORDmagicWORDversion_majorWORDversion_minorDWORDthiszoneDWORDsigfigsDWORDsnaplenDWORDlinktype}structpcap_pkthdr{structtimevaltsDWORDcaplenDWORDlen}structtimeval{DWORDGMTtimeDWORDmicroTime}这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,这里有一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用。一个规范的抓包过程:importpcapimportdpktpc=pcap.pcap()#注,参数可为网卡名,如eth0pc.setfilter('tcpport80')#设置监听过滤器forptime,pdatainpc:#ptime为收到时间,pdata为收到数据printptime,pdata#对抓到的以太网V2数据包(rawpacket)进行解包:p=dpkt.ethernet.Ethernet(pdata)ifp.data.__class__.__name__=='IP':ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=='TCP':ifdata.dport==80:printp.data.data.data一些显示参数nrecv,ndrop,nifdrop=pc.stats()返回的元组中,第一个参数为接收到的数据包,第二个参数为被核心丢弃的数据包。至于对于如何监控tcpdump生成的pcap文件数据,大家可以通过pyinotify软件包来实现,如下:classPacker(pyinotify.ProcessEvent):def__init__(self,product):self.product=productself.process=Nonedefprocess_IN_CREATE(self,event):logger.debug("createfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_MODIFY(self,event):self.process_IF_START_THREAD(event)logger.debug("modifyfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_DELETE(self,event):filename=os.path.join(event.path,event.name)logger.debug("deletefile:%s"%filename)defprocess_IF_START_THREAD(self,event):filename=os.path.join(event.path,event.name)iffilename!=self.process:self.process=filenameself.product.put(filename)ifself.product.qsize()>1:try:logger.debug("createconsumerproduct.qsize:%s"%self.product.qsize())consumer=Consumer(self.product)consumer.start()exceptException,errmsg:logger.error("createconsumerfailed:%s"%errmsg)returnfilenameclassFactory(object):def__init__(self,product):self.product=productself.manager=pyinotify.WatchManager()self.mask=pyinotify.IN_CREATE|pyinotify.IN_DELETE|pyinotify.IN_MODIFYdefwork(self):try:try:notifier=pyinotify.ThreadedNotifier(self.manager,Packer(self.product))notifier.start()self.manager.add_watch("../pcap",self.mask,rec=True)notifier.join()exceptException,errmsg:logger.error("createnotifierfailed:%s"%errmsg)exceptKeyboardInterrupt,errmsg:logger.error("factoryhasbeenterminated:%s"%errmsg)在获得要分析的pcap文件数据之后,就要对其分析了,只要你足够了解pcap文件格式就可以了,对于我们来讲只需要获得TCP数据段的数据即可,如下:classWriter(threading.Thread):def__init__(self,product,stack):threading.Thread.__init__(self)self.product=productself.stack=stackself.pcap_pkthdr={}defrun(self):whileTrue:filename=self.product.get()try:f=open(filename,"rb")readlines=f.read()f.close()offset=24whilelen(readlines)>offset:self.pcap_pkthdr["len"]=readlines[offset+12:offset+16]try:length=struct.unpack("I",self.pcap_pkthdr["len"])[0]self.stack.put(readlines[offset+16:offset+16+length])offset+=length+16exceptException,errmsg:logger.error("unpackpcap_pkthdrfailed:%s"%errmsg)exceptIOError,errmsg:logger.error("openfilefailed:%s"%errmsg)在获得TCP数据段的数据包之后,问题就简单多了,根据大家的具体需求就可以进行相应的分析了,我这里是想分析其HTTP协议数据,同样也借助了dpkt软件包进行分析,如下:defworker(memcache,packet,local_address,remote_address):try:p=dpkt.ethernet.Ethernet(packet)ifp.data.__class__.__name__=="IP":srcip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.src)))dstip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=="TCP":tcpacket=p.data.dataiftcpacket.dport==80anddstip==local_address:srcport=tcpacket.sportkey=srcip+":"+str(srcport)iftcpacket.data:ifnotmemcache.has_key(key):memcache[key]={}ifnotmemcache[key].has_key("response"):memcache[key]["response"]=Noneifmemcache[key].has_key("data"):memcache[key]["data"]+=tcpacket.dataelse:memcache[key]["data"]=tcpacket.dataelse:ifmemcache.has_key(key):memcache[key]["response"]=dpkt.http.Request(memcache[key]["data"])try:stackless.tasklet(connection)(memcache[key]["response"],local_address,remote_address)stackless.run()exceptException,errmsg:logger.error("connectremoteremote_addressfailed:%s",errmsg)logger.debug("oldheaders(nonecontent-length):%s",memcache[key]["response"])memcache.pop(key)exceptException,errmsg:logger.error("dpkt.ethernet.Ethernetfailedinworker:%s",errmsg)如果大家只是想单纯的获取IP地址、端口、流量信息,那么问题就更简单了,这里只是抛砖引玉。另外再提供一段代码供参考:importpcap,dpkt,structimportbinasciidefmain():a=pcap.pcap()a.setfilter('udpportrange4000-4050')try:fori,pdataina:p=dpkt.ethernet.Ethernet(pdata)src='%d.%d.%d.%d'%tuple(map(ord,list(p.data.src)))dst='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))sport=p.data.data.sportdport=p.data.data.dport =int(binascii.hexlify(p.data.data.data[7:11]),16)print' :%d,From:%s:%d,To:%s:%d'%( ,src,sport,dst,dport)exceptException,e:print'%s'%en=raw_input()if__name__=='__main__':main()这个需要下载wpdpack(winpcap的开发包),并且在命令行指明wpdpack的路径。我用过pcap这个包,pyx是依赖于cython来编译成c,然后编译成扩展的,只要有mingw编译器或者vs编译器,还是很容易的
如何利用Python嗅探数据包
给您推荐相同类型的内容:
python ide是什么
IDE是开发者创建程序时所使用的软件包,它可以通过简单的用户界面集成多个高度关联的组件,从而最大化提升开发者的生产效率,本质上,IDE是一种改进代码创建、测试和debug流程的工具,它使这些工作更加简单。IDE使用的工具包括:文本编辑器和Python 如何将该列表转换成excel表格?
可以使用 Python 的第三方库 pandas 将列表转换成 excel 表格。首先需要安装 pandas 库,在命令行中输入:pip install pandas然后可以使用 pandas 库中的 DataFrame 函数将列表转java培训学校去哪好
java培训学校推荐选择【达内教育】,【达内教育】致力于面向IT互联网行业,培养软件开发工程师、测试工程师、UI设计师、网络营销工程师、会计等职场人才,拥有行业内完善的教研团队,强大的师资力量,确保学员利益,全方位保障学员学习;更是与多家企我们开始学习C语言了,只是一个开始就感觉好难,学这个的秘诀是什么啊
你指的难是哪种?对那些语法概念不理解,还是自己不会写程序?一开始你就慢慢的啃书吧,把每一个细节的知识点,语法点都理解透彻,同时,如果书上有相应知识点的小列子,可以自己跟着敲敲,最好能自己打出来,不要不带脑子的按键盘,要思考,即使是十行二十行Python生成密码字典,配合解密使用
这篇文章主要介绍了python如何生成密码字典,密码字典主要是配合解密使用,下面利用python实现生成密码字典,需要的小伙伴可以参考一下 所谓密码字典,主要是配合解密使用,一般情况用来暴力破解密码,是由指定字符排列组合组成的文本文件matlab编程:下图为广州恒大足球队的一张海报,图中左边是一个印度数学家发现的恒等式,叫拉马努金恒等式
左边的叫欧拉恒等式。两边都生冷。3:0是结果。但最后还不是3:3平了,还是靠客场进球多才赢(夺冠)的。加油恒大,看好你们。也不要太小看了首尔。最终结果:左边3,右边0.====================================北京黑马java培训怎么样?
前段时间曾去了解过,说一下我自己的看法。我首先去了一个是java实验班,因为他们说可以报销路费,而且还不要押金,所以我就打算去北京看一下,了解一下这个java实验班好不好。哪个班总共是四十多个人, 是有老师面授进行讲课的,好像是王老师讲的。请问,用四个独立按键来制作简易密码锁C语言程序该怎么编写
这个可以模拟那种拨码形式的密码锁方式来设计,比如OFO共享单车的拨码方式。#include<reg51.h>#define uchar unsigned charuchar mima[4]={1,2,3,4}uchar语言是什么
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。发展历史R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。python培训去哪儿好?
python培训去【达内教育】好,该机构Python培训拥有一支具有丰富教学经验的教师队伍。不仅有丰富的教学经验,而且有丰富的Python项目实战经验。老师们会从模拟的Python项目出发,依托真实的Python业务项目,进行实训。达内教育JAVA开发什么工具最好用?
常见的十四种Java开发工具的特点1、JDK(JavaDevelopmentKit)Java开发工具集从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显Go语言是做什么的
应用于搭建 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。Go 是谷歌的编程语言,而不是社区的。在这位博主看来,虽然 Go 语言拥有一个贡献者社区,但是它并不是社区的项目,只是谷歌的一个项目。所以只要是谷歌反对的东西,Python(六十五)抓包及其简单解析
04_抓包及其简单解析01_分析摄图网.py: 04_抓包及其简单解析02_xpinyin模块.py 04_抓包及其简单解析03_requests_html模块.py: 04_抓包及其简单解析04_摄图网简单解析.py:学习java 的软件有哪些?
学习java 的软件有如下:1、Intellij IDEAIntellij IDEA是当前Java开发人员呼声很高的一款IDE,具有美观,高效等众多特点,小编还是非常喜欢的,所以以往我都是在自己电脑安装这款软件的。2、EclipseEpython打印输出2到200的所有偶数?
在 Python 中,可以使用如下代码来打印输出 2 到 200 的所有偶数:for i in range(2, 201, 2): # 使用 range 函数生成 2 到 200 的序列,每次增加 2print(i) # 打印输出偶数Go语言的优势有哪些
1. 部署简单Go 编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。2. 并发学java在深圳工作和泉州哪个好
深圳好。原因如下:第一,深圳是一个比较年轻有活力的城市,同时又是一个发展比较成熟的城市,深圳比较重视科技和人才,政策也比较好,因此,深圳的IT行业发展比较好,许多程序员都选择到这里工作和生活,深圳无疑是最佳的选择地。第二,互联网发达的城市当R语言[ ]用法总结
Summary: 中括号里面使用的函数要么返回行号列号,要么返回布尔值。 例如: 1. 筛选:kkk[which(kkk$Abundance.ppm.>=1000),2]<-1000 2. 排序:d如何从零开始学Java?
Java语言的学习开始,很多同学不知道从哪入手?如果你也想知道如何从零开始学java?怎样学java有效?java培训班本文为你解答。虽然Java面象对象很多东西都是被封装好的直接用,相对其他语言没那么复杂,但是学的东西也没有那么的so《Go语言编程》pdf下载在线阅读全文,求百度网盘云资源
《Go语言编程》百度网盘pdf最新全集下载:链接:https:pan.baidu.coms12soZuRrnDGL1HPKxA8ddoQ?pwd=hcru 提取码:hcru简介:这本书从整体的写作风格来说,会以介绍 Go 语言特性R语言中$是什么意思
$是S3类的引用方式,@是S4类的引用方式。$比较常用,@比较少用。通常我们的data.frame, list. 向量等用$就可以。S4也有例如,有个维恩包Vennerable:S4类型,想取得里面IntersectionSets,信息必如何使用Python爬取网易云音乐歌单内的歌曲
1首先在浏览器在打开网易云音乐的网页版,并点进一个歌单。 2.在浏览器的开发者工具审查该页面的元素(一般按f12可以弹出该工具),选择Network,之后选择doc可以简便地找到我们需要的元素。 注:以下两步第3,第4步主要是为了防止网站的回归分析 | R语言 -- 多元线性回归
多元线性回归是简单线性回归的扩展,用于基于多个不同的预测变量(x)预测结果变量(y)。 例如,对于三个预测变量(x),y的预测由以下等式表示:y = b0 + b1*x1 + b2*x2 + b3*x3回r语言是什么
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。发展历史R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。杭州Java培训哪家好?
杭州现在的java培训机构非常多,比如千锋教育、动力节点、蜗牛学院、达内、传智播客、IT培训网、中软国际教育集团、课工场、开课吧等等。千锋教育就有线上免费Java线上公开课。但是要注意的是,培训机构虽多,但质量却良莠不齐。很多培训机构的用C语言编程实现快速排序算法
给个快速排序你参考参考********************** 快速排序 ****************************基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当前的无序区go语言 一个主package包引入同级目录下go文件包编译出错!!
go语言 一个主package包引入同级目录下go文件包编译出错是设置错误造成的,解决方法为:1、先使用import "strings"导入strings库。2、HasPrefix 判断字符串 s 是否以 prefixC语言数组下标
下标可以是变量 也可以是常量。直接说a[0],a[1],a[2],a[3]这样的下标就是常量。对于访问来说, 不在意是变量还是常量, 系统只是需要一个值, 作为偏移量不管是变量还是常量, 访问的时候 肯定是一个特定值, 而系统要的 无非是这【接口测试】Go语言进行简单的接口测试
在正常的测试中,当我们需要进行接口测试时,通常使用接口调试工具,如postman进行接口测试 目前我在尝试使用Go语言进行接口测试,使用的库均为Go自带的库。注:当前采用的接口为时事新闻接口,每天可以请求100次,需要的同学,可r语言两个百分号什么意思
输出百分号。%具有特殊含义,比如%d输出整数,所以%%就是输出%, %%d就是输出%d。语言中主要有两个地方使用%作为运算符:一个为取余运算符,另一个为格式输入输出的时候格式控制符。% 是取余运算符。一个表达式的值除以另一个表达式的