原文連接:http://zodiacg.net/2016/07/in...python
本系列文章譯自thePacketGeek的系列文章。原創翻譯,轉載請註明出處。app
咱們已經瞭解瞭如何使用 FileCapture 和 LiveCapture 模塊來捕獲數據包,下面咱們來看一下如何使用返回的 capture 對象。函數
dir(cap) Out[3]: ['apply_on_packets', 'close', 'current_packet', 'display_filter', 'encryption', 'input_filename', 'next', 'next_packet']
(簡潔起見以上列表通過了精簡).net
這些是我認爲比較有用的方法和屬性,其它大多數是用於調試或者捕獲過程內部使用。 display_filter , encryption 和 input_filename 屬性是以前傳遞給 FileCapture 或者 LiveCapture 的值。翻譯
此處真正強大的是apply_on_packets()
和next()
方法。next()
方法使得 capture 對象能夠經過for循環進行遍歷。apply_on_packets()
方法是另外一種遍歷數據包的方式,它接受一個函數做爲參數並將之做用於全部的數據包。調試
>>> cap = pyshark.FileCapture('test.pcap', keep_packets=False) >>> def print_highest_layer(pkt) ...: print pkt.highest_layer >>> cap.apply_on_packets(print_highest_layer) HTTP HTTP HTTP HTTP HTTP ... (truncated)
這個方法也能夠用於打印以外的功能,例如將數據包添加入一個列表進行其它處理。下面的腳本會將全部的數據包加入到一個列表中並打印總數:code
import pyshark def get_capture_count(): p = pyshark.FileCapture('test.cap.pcap', keep_packets=False) count = [] def counter(*args): count.append(args[0]) p.apply_on_packets(counter, timeout=100000) return len(count) print get_capture_count()
上一篇:PyShark入門(2):FileCapture和LiveCapture模塊
下一篇:PyShark入門(4):capture對象對象