關(guān)于python+scapy抓包與解析
最近一直在使用做流量分析,今天把 scapy 部分做一個(gè)總結(jié)。
Python 的 scapy 庫(kù)可以方便的抓包與解析包,無(wú)奈資料很少,官方例子有限,大神博客很少提及, 經(jīng)過(guò)一番嘗試后,總結(jié)以下幾點(diǎn)用法以便大家以后使用。
python scapy抓包與解析
作為初學(xué)者,關(guān)心的首先是如何安裝,本人電腦系統(tǒng)是 fedora, 建議使用 linux。
推薦下載 pip,直接:(當(dāng)然得在 su 權(quán)限下)
pip install scapy
在 terminal 中輸入 scapy, 如果有下面形式即安裝好了:
抓包
from scapy.all import * dpkt = sniff(iface = "wlp7s0", count = 100)
sniff() 是 scapy 內(nèi)置函數(shù),有很多參數(shù), 如圖:
這里就不一一解釋, iface 參數(shù)是網(wǎng)卡信息, 也就是 eth0 之類的, 我這里是 wlp7s0, count 參數(shù)是抓取的連接數(shù)量, 這里是 100, 還有 filter 參數(shù)是過(guò)濾等。
pcap 格式保存
wrpcap("demo.pcap", dpkt)
pcap 格式較為通用, 可以將上述抓取的包保存為 pcap,dpkt 是上面抓取的流量變量。
數(shù)據(jù)包解析
可以看到有 94 個(gè) tcp 包, 4個(gè) udp 包, 還有兩個(gè)其他類型的包。
類似于 python 中的 list 類型, 可以使用下標(biāo)訪問(wèn), 比如用 python 可寫個(gè) for 循環(huán)遍歷每個(gè)連接。
長(zhǎng)度可以使用 len 計(jì)算
注意這里 dpkt 不是 list 類型, 也不是 string 類型, 因此如果要進(jìn)行字符串處理,要把它轉(zhuǎn)換為 string 類型,
scapy強(qiáng)大地方在于可以通過(guò)字段來(lái)查看每一個(gè)字段信息,首先我們看一下它有那些字段:
可以使用 ls() 查看支持的協(xié)議類型,有很多,具體看幾個(gè):
甚至還有硬件信息:
還有很多, 可以自己去看一下, 不附圖了。
知道它有那些字段后, 就可以調(diào)用了,隨便舉個(gè)例子, 比如第四個(gè)連接 dpkt[3]
它的結(jié)構(gòu)非常清楚,首先是 Ether 層, 然后是 IP 層, 然后是 TCP 層,訪問(wèn)時(shí)就按張如圖就可以訪問(wèn)各個(gè)字段信息。
要注意的是, 不是所有連接都是這幾個(gè)層, Ether 是都有的, 但是 udp 連接肯定就沒(méi)有 TCP 層, 而是改為 udp 層, ARP 包肯定就沒(méi)有 IP 層, 更沒(méi)有 TCP 層,如果再 arp 連接使用 dpkt[i][IP] 就會(huì)報(bào)錯(cuò), 因?yàn)樗鼪](méi)有 IP 這一層。
python 使用時(shí)可以時(shí)使用 ether 的 type 判斷是不是 IP 包, 使用 ip 的 proto 判斷時(shí) tcp 還是 udp。
訪問(wèn)包中的報(bào)文可以使用 dpkt[i][Raw].load 字段, (假設(shè)第 i +1 個(gè)包有報(bào)文信息),同樣,如果沒(méi)有報(bào)文信息, 就沒(méi)有 Raw 這一層,也就沒(méi)有 load 這一字段。比如這里:
第六個(gè)連接并沒(méi)有 Raw 數(shù)據(jù),訪問(wèn)出錯(cuò), 第七個(gè)有 Raw 數(shù)據(jù),可以得到報(bào)文信息。
使用離線數(shù)據(jù)包
pcap = sniff(offline = "xx/xx.pcap")`
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用type動(dòng)態(tài)創(chuàng)建類操作示例
這篇文章主要介紹了Python使用type動(dòng)態(tài)創(chuàng)建類操作,結(jié)合實(shí)例形式詳細(xì)分析了Python使用type動(dòng)態(tài)創(chuàng)建類的具體原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02python PyAUtoGUI庫(kù)實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤
這篇文章主要介紹了python PyAUtoGUI庫(kù)實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-09-09教你利用PyTorch實(shí)現(xiàn)sin函數(shù)模擬
這篇文章主要給大家介紹了關(guān)于教你利用PyTorch實(shí)現(xiàn)sin函數(shù)模擬的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01機(jī)器學(xué)習(xí)之?dāng)?shù)據(jù)清洗及六種缺值處理方式小結(jié)
本文主要介紹了機(jī)器學(xué)習(xí)之?dāng)?shù)據(jù)清洗及六種缺值處理方式小結(jié),包括刪除空行、填充平均值、中位數(shù)、眾數(shù)、線性插值和隨機(jī)森林填充,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03