首先是抓包,使用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:
#每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 "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文件并解析的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
