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