2024-06-13 00:13:43 发布
网友
一些协议编号为:
6 TCP传输控制 ... 17 UDP用户数据报[RFC768]
伊娜。在
import pyshark pkts = pyshark.FileCapture('testes.pcap')
我只想在PCAP文件中打印所有协议号,然后保存在一个文件中。我怎么能用pyshark得到它?在
你看过pyshark的文档了吗?README向您展示了如何从单个数据包中读取数据。以你的例子,我们可以得到第一个包,如下所示:
pyshark
>>> pkt = next(pkts) >>> pkt <UDP/DNS Packet>
我们可以反省一下pkt,看看有哪些字段可用:
pkt
由于您正在寻找协议信息,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是我们想要的。在
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属性)
hasattr
你看过
pyshark
的文档了吗?README向您展示了如何从单个数据包中读取数据。以你的例子,我们可以得到第一个包,如下所示:我们可以反省一下
^{pr2}$pkt
,看看有哪些字段可用:由于您正在寻找协议信息,
ip
似乎很有用(假设您询问的是ip协议号)。让我们看看其中包含的内容:我猜
proto
是我们想要的。在实际上,17是UDP的ip协议号。因此,如果您只需要一个协议编号的列表,您可以要求(此输出来自本地数据包跟踪):
(我们使用
hasattr
检查,因为非ip数据包没有ip
属性)相关问题 更多 >
编程相关推荐