【发布时间】:2022-06-17 20:47:30
【问题描述】:
我想访问 LS 更新包中的值(LSA 的数量、类型等),但似乎我被卡住了。我尝试了两个选项,for循环和捕获时应用,我仍然无法获得
【问题讨论】:
我想访问 LS 更新包中的值(LSA 的数量、类型等),但似乎我被卡住了。我尝试了两个选项,for循环和捕获时应用,我仍然无法获得
【问题讨论】:
我不确定你想如何处理你正在寻找的值。
下面的代码将允许您使用pyshark.FileCapture 从pcap 文件中查询和提取OSPF 信息。您可以使用pyshark.LiveCapture 做同样的事情
我使用的 `pcap' 文件来自Wireshark sample captures
import pyshark
capture = pyshark.FileCapture('hsrp-and-ospf-in-LAN')
for packet in capture:
if hasattr(packet, 'ospf'):
field_names = packet.ospf._all_fields
for field_name in field_names:
print(field_name)
# output snippet
ospf.lsa.age
ospf.lsa.donotage
ospf.v2.options
ospf.v2.options.dn
ospf.v2.options.o
ospf.v2.options.dc
ospf.v2.options.l
ospf.v2.options.n
ospf.v2.options.mc
ospf.v2.options.e
ospf.v2.options.mt
ospf.lsa
ospf.lsa.summary
ospf.lsa.id
ospf.advrouter
ospf.lsa.seqnum
ospf.lsa.chksum
ospf.lsa.length
print('\n')
您可以通过以下方式获取field values:
import pyshark
capture = pyshark.FileCapture('hsrp-and-ospf-in-LAN')
for packet in capture:
if hasattr(packet, 'ospf'):
field_names = packet.ospf._all_fields
field_values = packet.ospf._all_fields.values()
for field_name in field_names:
for field_value in field_values:
print(f'Field Name:{field_name} -- Field Value: {field_value}')
print('\n')
同样,我不知道您要如何过滤。以下是过滤LSA packet 信息的一种方法。
import pyshark
capture = pyshark.FileCapture('hsrp-and-ospf-in-LAN')
for packet in capture:
if hasattr(packet, 'ospf'):
field_names = packet.ospf._all_fields
field_values = packet.ospf._all_fields.values()
for field_name in field_names:
if 'lsa' in field_name:
for field_value in field_values:
print(f'Field Name:{field_name} -- Field Value: {field_value}')
print('\n')
这是我使用PyShark for packet analysis写的文档
【讨论】: