Python3+pyshark捕獲數據包並保存為文件


一、直接使用wireshark捕獲數據包並保存為文件

可以使用wireshark通過圖形界面的操作來實現捕獲數據包並保存為文件。

wireshark默認捕獲的數據包保存為臨時文件,如果最后退出時不選擇保存那么臨時文件將會被刪除。

可以在“菜單欄----捕獲----選項----輸出”窗口進行配置,指示wireshark直接將捕獲結果保存為文件。

文件----數據包要保存到的文件

輸出格式----數據包保存成的文件的文件格式

自動創建新文件----指示當當前文件達到某個指標后,就把后續數據包另存到另一個文件。(本質是通過關閉當前監聽新啟一個監聽來實現)

使用一個環形緩沖器----只保存為那么多個文件,數量用完后從頭形始覆蓋。

以如上配置為例,截獲結果如下:

 

 二、使用tshark捕獲數據包並保存為文件

tshark就是命令行版的wireshark(基於wireshark的多種表示,感覺wireshark部份功能也是調用tshark來實現的),所以也可以通過tshark來實現同樣的效果。

使用-i指定網卡,使用-w實現文件,使用-F實現指定格式,使用-b實現自動創建新文件。

-i使用的網卡名,控制面版中看到的是什么就是什么,wireshark列出來的是什么就是什么。

Linux版形如:

tshark -i eth0 -b filesize:1024 -F pcap -w test_pcap.pcap

Windows版形如:

tshark -i "本地連接 2" -b filesize:1024 -F pcap -w test_pcap.pcap

 

三、使用pyshark捕獲數據包並保存為文件

3.1 直接無法捕獲數據包

pyshark本質是調用tshark,理論上捕獲代碼應形如下:

import pyshark

tshark_path = 'D:\\tools\\Wireshark\\tshark.exe'
capture = pyshark.LiveCapture(output_file="test_pcap.pcap",interface="本地連接 2",tshark_path=tshark_path)
capture.sniff(timeout=10)

但是在python-3.6.6環境中無論是Linux還是Windows都捕獲不到數據包(<LiveCapture (0 packets)>)

追蹤代碼看到在沒指定網卡時pyshark是通過tshark -D來列出所有網卡,然后取網卡前序號形式來指定網卡

由上圖可以看到“本地連接 2”序號為6,但代碼改為形如下仍不能捕獲到數據包

(其實使用網卡名和網卡序號兩種方式tshark都是支持的,所以和這個無關;當然也不能算一定關系沒有,傳給pyshark的”本地連接 2“參數中間有空格,pyshark再傳給tshark時不會自動加上引號tshark會因格式不對啟不來,但這里也不是因為這個。)

import pyshark

tshark_path = 'D:\\tools\\Wireshark\\tshark.exe'
capture = pyshark.LiveCapture(output_file="test_pcap.pcap",interface="6",tshark_path=tshark_path)
capture.sniff(timeout=10)

 后來看網上也有類似的情況,說是版本問題(我當前是0.4.1也一樣的問題)而0.3.6.2版本是可以的,使用python2.7+0.3.6.2版本(pip install pyshark==0.3.6.2)確實可以成功保存數據包。

 

3.2 修改live_capture.py實現捕獲數據包並保存為文件

pyshark-0.3.6.2在python-3.6裝不上,要去用python2.7這是令人不爽的。

通過capture.set_debug()開啟打印debug信息可以看到是tshark報錯:tshark: You can't write both raw packet data and dissected packets to the standard output.排查之下發現是tshark的"-P"(打印匯總信息)和”-w -“(將原始數據包輸出到控制台)沖突所致。

簡單分析pyshark流程發現去除”-P“參數可解決捕獲不到數據包的問題。操作如下:

 打開pyshark的live_capture.py移動到72行,將原先的params = ["-q", "-P"]修改為params = ["-q"]

 

參考:

https://github.com/KimiNewt/pyshark

https://github.com/KimiNewt/pyshark/issues/222


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM