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文件并解析的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。