0
某些協議號爲:如何獲取PCAP文件中的協議號碼?
6 TCP傳輸控制[RFC793] ... 17 UDP用戶數據報[RFC768]
由IANA。
import pyshark
pkts = pyshark.FileCapture('testes.pcap')
我只是想打印PCAP文件中的所有協議號碼,然後保存在一個文件中。我如何使用pyshark獲取它?
某些協議號爲:如何獲取PCAP文件中的協議號碼?
6 TCP傳輸控制[RFC793] ... 17 UDP用戶數據報[RFC768]
由IANA。
import pyshark
pkts = pyshark.FileCapture('testes.pcap')
我只是想打印PCAP文件中的所有協議號碼,然後保存在一個文件中。我如何使用pyshark獲取它?
您是否看過pyshark
的文檔? README向您展示瞭如何從單個數據包中讀取數據。鑑於您的例子中,我們可以得到的第一個包這樣的:
>>> pkt = next(pkts)
>>> pkt
<UDP/DNS Packet>
我們可以反思pkt
,看看有什麼字段:
>>> dir(pkt)
['__class__', '__contains__', '__delattr__', '__dict__', '__dir__',
[...]
'get_multiple_layers', 'highest_layer', 'interface_captured', 'ip',
[...]
既然你要找的協議信息,ip
似乎如果它可能有用(假設你問的是ip協議號碼)。讓我們來看看包含的內容:
>>> dir(pkt.ip)
['DATA_LAYER', '__class__', '__delattr__', '__dict__', '__dir__',
[...]
'addr', 'checksum', 'checksum_status', 'dsfield', 'dsfield_dscp',
'dsfield_ecn', 'dst', 'dst_host', 'field_names', 'flags', 'flags_df',
'flags_mf', 'flags_rb', 'frag_offset', 'get_field',
'get_field_by_showname', 'get_field_value', 'hdr_len', 'host', 'id',
'layer_name', 'len', 'pretty_print', 'proto', 'raw_mode', 'src',
'src_host', 'ttl', 'version']
我要猜測proto
就是我們想要的。
>>> pkt.ip.proto
17
事實上,17是UDP的ip協議號碼。所以,如果你只是想協議號的列表,你可以要求(這是輸出從本地包跟蹤):
>>> [pkt.ip.proto for pkt in pkts if hasattr(pkt, 'ip')]
['17', '17', '17', '17', '6', '6', '6', '6', '6', '6', '6', '6', '6', '17', '17', '6', '6', '17', '17', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '1', '1', '1', '1', '1', '1', '1', '1']
(我們使用hasattr
檢查,因爲非IP數據包沒有ip
屬性)