如何在PCAP文件中获取协议号?

2024-06-13 00:13:43 发布

您现在位置:Python中文网/ 问答频道 /正文

一些协议编号为:

6 TCP传输控制 ... 17 UDP用户数据报[RFC768]

伊娜。在

import pyshark

pkts = pyshark.FileCapture('testes.pcap')

我只想在PCAP文件中打印所有协议号,然后保存在一个文件中。我怎么能用pyshark得到它?在


Tags: 文件数据用户import协议pcap编号tcp
1条回答
网友
1楼 · 发布于 2024-06-13 00:13:43

你看过pyshark的文档了吗?README向您展示了如何从单个数据包中读取数据。以你的例子,我们可以得到第一个包,如下所示:

>>> pkt = next(pkts)
>>> pkt
<UDP/DNS Packet>

我们可以反省一下pkt,看看有哪些字段可用:

^{pr2}$

由于您正在寻找协议信息,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属性)

相关问题 更多 >