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

Python 如何在PCAP文件中获取协议编号?,python,python-2.7,python-3.x,pyshark,Python,Python 2.7,Python 3.x,Pyshark,一些协议编号为: 6 TCP传输控制[RFC793] ... 17 UDP用户数据报[RFC768] 伊安娜 import pyshark pkts = pyshark.FileCapture('testes.pcap') 我只想打印PCAP文件中的所有协议编号,然后保存到一个文件中。如何使用pyshark获取它?您看过pyshark的文档了吗?显示了如何从各个数据包中读取数据。根据您的示例,我们可以得到如下第一个数据包: >>> pkt = next(pkts) >

一些协议编号为:

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

伊安娜

import pyshark

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

我只想打印PCAP文件中的所有协议编号,然后保存到一个文件中。如何使用pyshark获取它?

您看过pyshark的文档了吗?显示了如何从各个数据包中读取数据。根据您的示例,我们可以得到如下第一个数据包:

>>> pkt = next(pkts)
>>> pkt
<UDP/DNS Packet>
由于您正在查找协议信息,
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协议号。因此,如果您只是想要一个协议编号列表,您可以请求(此输出来自本地数据包跟踪):


(我们使用的是
hasattr
检查,因为非ip数据包没有
ip
属性)

您看过
pyshark
的文档了吗?显示了如何从各个数据包中读取数据。根据您的示例,我们可以得到如下第一个数据包:

>>> pkt = next(pkts)
>>> pkt
<UDP/DNS Packet>
由于您正在查找协议信息,
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协议号。因此,如果您只是想要一个协议编号列表,您可以请求(此输出来自本地数据包跟踪):

(我们使用的是
hasattr
检查,因为非ip数据包没有
ip
属性)