摘要:中進行數據包分析的兩個典型方法是使用和模塊。僅用于在嗅探時使用的過濾條件。僅用于保存的捕獲文件的路徑格式。用于在讀取較大的捕獲時節省內存。類似于使用或者進行嗅探,過濾器可以用于確定進入到返回的對象中的流量。
原文地址:http://zodiacg.net/2016/07/in...
本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。
PyShark中進行數據包分析的兩個典型方法是使用 FileCapture 和 LiveCapture 模塊。
前者從一個存儲的捕獲文件中導入u數據包,后者將使用本機的網絡接口進行嗅探。
使用這兩個模塊都會返回一個 capture 對象。之后的文章中會詳細介紹。
我們首先來了解一下這兩個模塊如何使用。
兩個模塊提供相似的參數來控制 capture 對象中返回的數據包。下面的定義直接從模塊的docstring中獲取:
__interface__: [僅用于LiveCapture] 進行嗅探的網絡接口。如果沒有給出,使用可用的第一個接口。
__bpf_filter__: [僅用于LiveCapture] 在嗅探時使用的BPF(tcpdump)過濾條件。
__input_file__: [僅用于FileCapture] 保存的捕獲文件的路徑(PCAP, PCAPNG格式)。
__keep_packets__: 設定在調用next()函數之后是否保留之前讀取的數據包。用于在讀取較大的捕獲時節省內存。
__display_filter__: 設定在讀取捕獲時使用的display過濾條件(即Wireshark過濾器)。
__only_summaries__: 僅產生數據包摘要,比正常讀取速度快的多,但包含信息很少。
__decryption_key__: 可選的用于加密解密捕獲的流量的密鑰。
__encryption_type__: 捕獲的數據流量所使用的加密標準(必須是WEP,WPA-PWD或WPA-PWK中之一,默認是WPA-PWK)。
only_summaries選項使用 only_summaries 后,返回的 capture 對象中的數據包將只包含摘要信息,類似于tshark的默認輸出:
>>> cap = pyshark.FileCapture("test.pcap", only_summaries=True) >>> print cap[0] 2 0.512323 0.512323 fe80::f141:48a9:9a2c:73e5 ff02::c SSDP 208 M-SEARCH * HTTP/
使用這個選項,讀取捕獲文件將變得很快,但每個數據包將只包含下面的這些屬性。如果你想獲取嗅探中的IP地址來構建會話列表,或者使用時間和包長度來計算帶寬的統計數據,那么這些信息也足夠了。
>>> pkt. #(tab auto-complete) pkt.delta pkt.info pkt.no pkt.stream pkt.window pkt.destination pkt.ip id pkt.protocol pkt.summary_line pkt.host pkt.length pkt.source pkt.timekeep_packets選項
PyShark只會在要對數據包進行處理的時候才會將其讀入內存。在你處理數據包的過程中,PyShark會將每個數據包添加到 capture 對象中叫 _packet 的列表屬性的末尾。當處理大量的數據包時,這個列表將占用大量的內存,因此PyShark提供了這個選項使得內存中一次僅保留一個數據包。如果 keep_packets 設置為False(默認為True),PyShark在讀取新數據包時會將上一個從內存中清除。我發現這樣能提升一點數據包遍歷處理的速度,提升一點也是好的!
display_filter和bpf_filter這些過濾器有助于使你的應用集中精力于你想要分析的內容上。類似于使用Wireshark或者tshark進行嗅探,BPF過濾器可以用于確定進入到返回的 capture 對象中的流量。
BPF過濾器的靈活性不如Wireshark的display過濾器,但是你仍可以創造性的使用這些有限的關鍵字和偏移過濾器。
如果需要對使用BPF過濾器更詳細的說明,參考Wireshark的官方文檔。
下面是一個使用BPF過濾器嗅探目標HTTP流量的例子:
>>> cap = pyshark.LiveCapture(interface="en0", bpf_filter="ip and tcp port 80") >>> cap.sniff(timeout=5) >>> cap>>> print cap[5].highest_layer HTTP
在讀取保存的捕獲文件時,你可以通過設置 display_filter 選項,利用Wireshark強大的解析器來限制返回的數據包。
下面是沒有使用過濾器的情況下,我的test.pcap文件中的前幾個數據包:
>>> cap = pyshark.FileCapture("test.pcap") >>> for pkt in cap: ...: print pkt.highest_layer ...: HTTP HTTP HTTP TCP HTTP ... (truncated)
使用了display過濾器來限制只顯示DNS數據流量:
>>> cap = pyshark.FileCapture("test.pcap", display_filter="dns") >>> for pkt in cap: ...: print pkt.highest_layer ...: DNS DNS DNS DNS DNS ... (truncated)針對LiveCapture的附加說明
在遍歷 LiveCapture 返回的 capture 對象時我發現了一個奇怪的現象。似乎當你試圖遍歷數據包列表時,它會從頭開始進行嗅探,然后實時的進行遍歷(來一個數據包就進行一次遍歷)。我目前沒有發現能夠存儲下數據包的方法, LiveCapture 僅能用于實時處理數據包。
上一篇:PyShark入門(1):簡介
下一篇:PyShark入門(3):capture對象
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38069.html
摘要:,和屬性是之前傳遞給或者的值。方法使得對象可以通過循環進行遍歷。方法是另一種遍歷數據包的方式,它接受一個函數作為參數并將之作用于所有的數據包。下面的腳本會將所有的數據包加入到一個列表中并打印總數上一篇入門和模塊下一篇入門對象 原文鏈接:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 我們已...
摘要:如主頁文檔中展示的打開存儲的捕獲文件從網絡接口上進行捕獲使用或者方法建立對象后,在捕獲和數據包層面就會有多個方法和屬性可用。的強大在于可以調用內建的所有數據包解碼器。后續文章中會說明需要那些措施來保留內存。下一篇入門和模塊 原文地址:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 文章作者...
摘要:以字節表示的數據包長度。當前數據包到達時間與第一個數據包的差值。的窗口大小僅用于數據包。如果你對的應用實例感興趣,你可以看看我的項目上一篇入門對象 原文鏈接:http://zodiacg.net/2016/07/in... 本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請注明出處。 目前在這一系列文章中我們已經了解了如何捕獲數據包和使用 capture 對象,我們終...
摘要:協同過濾提出了一種支持不完整評分矩陣的矩陣分解方法不用對評分矩陣進行估值填充。使用的是交叉最小二乘法來最優化損失函數。 構建基于Spark的推薦引擎(Python) 推薦引擎背后的想法是預測人們可能喜好的物品并通過探尋物品之間的聯系來輔助這個過程 在學習Spark機器學習這本書時,書上用scala完成,自己不熟悉遂用pyshark完成,更深入的理解了spark對協同過濾的實現 在這里我...
閱讀 1762·2021-11-24 09:39
閱讀 1551·2021-11-16 11:54
閱讀 3497·2021-11-11 16:55
閱讀 1655·2021-10-14 09:43
閱讀 1445·2019-08-30 15:55
閱讀 1233·2019-08-30 15:54
閱讀 3421·2019-08-30 15:53
閱讀 1338·2019-08-30 14:18