【问题标题】:How to access other values from an OSPF packet in PyShark如何从 PyShark 中的 OSPF 数据包访问其他值
【发布时间】:2022-06-17 20:47:30
【问题描述】:

我想访问 LS 更新包中的值(LSA 的数量、类型等),但似乎我被卡住了。我尝试了两个选项,for循环和捕获时应用,我仍然无法获得

【问题讨论】:

    标签: python pyshark


    【解决方案1】:

    我不确定你想如何处理你正在寻找的值。

    下面的代码将允许您使用pyshark.FileCapturepcap 文件中查询和提取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写的文档

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2020-05-25
      • 1970-01-01
      • 2017-11-09
      • 2012-01-06
      • 2020-10-17
      • 2015-07-09
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多