python分析数据包_Python解析pcap数据包
Post Views:
29,789
零、前言
歷時(shí)數(shù)月,終于結(jié)束了考研初試,Blog也很長(zhǎng)時(shí)間沒(méi)有更新了,期間還是有些小伙伴來(lái)Blog看文章很是感動(dòng)。以后一定會(huì)堅(jiān)持更新,盡量給大家推送一些干貨。這次發(fā)的是Python解析pcap數(shù)據(jù)包的腳本,其實(shí)用wireshark就能解決大部分的數(shù)據(jù)包分析問(wèn)題了,但有時(shí)候會(huì)遇到分析大量數(shù)據(jù)包或從大量數(shù)據(jù)包中提取某個(gè)信息的需求,這時(shí)用wireshark一個(gè)一個(gè)的打開(kāi)就不現(xiàn)實(shí)了,這時(shí)就要心中默念“Python大法好!”。
一、pcap數(shù)據(jù)包格式
注意,這里是要解析pcap數(shù)據(jù)包格式的文件,而現(xiàn)在wireshark都是默認(rèn)保存pcapng類型的文件,pcapng下一代文件格式,是為了突破現(xiàn)有廣泛使用但是受限的PCAP格式的一個(gè)嘗試。我們使用的庫(kù)scapy,要是解析pcapng或其他類型的數(shù)據(jù)包文件可能會(huì)報(bào)錯(cuò)。另外scapy是不自帶的,需要下載安裝,如果安裝不成功可以在kali下直接運(yùn)行。
網(wǎng)絡(luò)模型大家應(yīng)該有所了解,按不同的標(biāo)準(zhǔn)有七層和五層的分法,wireshark就是按不同層次解析數(shù)據(jù)
同理scapy也是如此。下面這段代碼打開(kāi)數(shù)據(jù)包后是這樣的
def test(filepath):
pcaps = rdpcap(filepath)
for p in pcaps:
print p.show()
break
不過(guò)scapy主要是分為Ethernet、IP、TCP、Raw這四層,每一層都有每一層的關(guān)鍵字,可以利用鍵值對(duì)的方式直接讀取相應(yīng)的內(nèi)容。
二、Python代碼
代碼寫(xiě)的比較糙,大家可以根據(jù)的自己的需要再改進(jìn)
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from scapy.all import *
import os
import re
import shutil
import time
rootpath = "/root/pcap/"
def openfiles(path):
filelist = []
files = os.listdir(path)
for f in files:
filelist .append(f)
return filelist
def writefile(filename,stringlist):
f = open("/root/result/"+filename+".txt","w")
for i in stringlist:
f.write(i+"\n")
f.close()
shutil.copy(rootpath+filename,"/root/result/"+filename)
def search(filename):
filepath = rootpath+filename
stringlist = []
pcaps = rdpcap(filepath)
for p in pcaps:
for f in p.payload.payload.fields_desc:
fvalue = p.payload.getfieldval(f.name)
reprval = f.i2repr(p.payload,fvalue) #轉(zhuǎn)換成十進(jìn)制字符串
if str(f.name)=="src" and reprval=="10.250.109.12": #指定特定的ip地址
for f2 in p.payload.payload.payload.payload.fields_desc: #payload向下解析一層
#print f2.name
if f2.name=="load"or f2.name=="data":
fvalue = p.payload.getfieldval(f2.name)
reprval = f2.i2repr(p.payload,fvalue)
refind = re.compile(r'[A-Fa-f0-9]{32}') #根據(jù)自己的需求設(shè)置正則
temp = refind.findall(reprval)
stringlist.extend(temp)
if len(stringlist)>0:
writefile(filename,stringlist) #將解析結(jié)果和對(duì)應(yīng)的pcap包保存下來(lái)
if __name__=="__main__":
filelist = openfiles(rootpath)
for file in filelist:
print file
search(file)
print "DONE!"
總結(jié)
以上是生活随笔為你收集整理的python分析数据包_Python解析pcap数据包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机在工程设计的应用,计算机辅助软件和
- 下一篇: firefox浏览器批处理插件imacr