首先是抓包,使用scapy模塊,
sniff()函數 在其中參數為本地文件路徑時,操作為打開本地文件
若參數為BPF過濾規則和回調函數,則進行Sniff,回調函數用于對Sniff到的數據包進行處理
import os
from scapy.all import *
pkts=[]
count=0
pcapnum=0
filename=''
def test_dump_file(dump_file):
print "Testing the dump file..."
if os.path.exists(dump_file):
print "dump fie %s found." %dump_file
pkts=sniff(offline=dump_file)
count = 0
while (count<=2):
print "----Dumping pkt:%s----" %dump_file
print hexdump(pkts[count])
count +=1
else:
print "dump fie %s not found." %dump_file
def write_cap(x):
global pkts
global count
global pcapnum
global filename
pkts.append(x)
count +=1
if count ==3: <span >#每3個TCP操作封為一個包(為了檢測正確性,使用時盡量增多)</span>
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 "Start packet capturing and dumping ..."
sniff(filter="dst net 127.0.0.1 and tcp",prn=write_cap) #BPF過濾規則
下面是對pcap文件的解析,會自動查找下一個pcap文件,按照src.ip和dst.ip進行劃分
# -*- coding: cp936 -*-
import re
import zlib
import os
from scapy.all import *
num=1
a=rdpcap("pcap1.pcap") #循環打開文件
while True:
try:
num+=1
file_name="pcap%d.pcap" % num
b=rdpcap(file_name)
a=a+b
except:
break
print "[*] Read pcap file ok"
print "[*] Begin to parse pcapfile..."
print a
try:
#print "[*] OPen new pcap_file %s" % pcap_file
sessions=a.sessions()
for session in sessions:
print "[*]New session %s" % session
data_payload=""
for packet in sessions[session]:
try:
data_payload +=str(packet[TCP].payload)
print "[**] Data:%s" % data_payload
except:
pass
except:
print "[*]no pcapfile..."
以上這篇python 抓包保存為pcap文件并解析的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。