python 抓包保存为pcap文件并解析的实例
首先是抓包,使用scapy模块,
sniff()函数在其中参数为本地文件路径时,操作为打开本地文件
若参数为BPF过滤规则和回调函数,则进行Sniff,回调函数用于对Sniff到的数据包进行处理
importos fromscapy.allimport* pkts=[] count=0 pcapnum=0 filename='' deftest_dump_file(dump_file): print"Testingthedumpfile..." ifos.path.exists(dump_file): print"dumpfie%sfound."%dump_file pkts=sniff(offline=dump_file) count=0 while(count<=2): print"----Dumpingpkt:%s----"%dump_file printhexdump(pkts[count]) count+=1 else: print"dumpfie%snotfound."%dump_file defwrite_cap(x): globalpkts globalcount globalpcapnum globalfilename pkts.append(x) count+=1 ifcount==3:#每3个TCP操作封为一个包(为了检测正确性,使用时尽量增多) pcapnum+=1 pname="pcap%d.pcap"%pcapnum wrpcap(pname,pkts) filename="./pcap%d.pcap"%pcapnum test_dump_file(filename) pkts=[] count=0 if__name__=='__main__': print"Startpacketcapturinganddumping..." sniff(filter="dstnet127.0.0.1andtcp",prn=write_cap)#BPF过滤规则
下面是对pcap文件的解析,会自动查找下一个pcap文件,按照src.ip和dst.ip进行划分
#-*-coding:cp936-*- importre importzlib importos fromscapy.allimport* num=1 a=rdpcap("pcap1.pcap")#循环打开文件 whileTrue: try: num+=1 file_name="pcap%d.pcap"%num b=rdpcap(file_name) a=a+b except: break print"[*]Readpcapfileok" print"[*]Begintoparsepcapfile..." printa try: #print"[*]OPennewpcap_file%s"%pcap_file sessions=a.sessions() forsessioninsessions: print"[*]Newsession%s"%session data_payload="" forpacketinsessions[session]: try: data_payload+=str(packet[TCP].payload) print"[**]Data:%s"%data_payload except: pass except: print"[*]nopcapfile..."
以上这篇python抓包保存为pcap文件并解析的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。