【问题标题】:Pyshark: Second Simulcrypt layer field value with same name is not accessiblePyshark:无法访问具有相同名称的第二个 Simulcrypt 层字段值
【发布时间】:2018-04-09 17:33:44
【问题描述】:

(这个问题与Alex Wang's question类似,但答案是协议特定的)

我喜欢 Wireshark 支持 Simulcrypt,但存在一些限制:显示过滤器应用于数据包级别,因此每个数据包包含多个 Simulcrypt 消息的数据包通常会给出模棱两可的结果。

我选择使用 Pyshark 将每个 ECMGSCS 消息的详细信息从 pcap 提取到 Excel 工作表中,我可以在其中应用列过滤、条件格式等,以遵循特定的“对话”。

CW_provision 消息包含一对CP_CW_combination 参数。我只能提取其中一个,需要提取第二个。

以下是详细信息:

我使用单个 CW_provision 消息创建了一个 pcap(可能不相关,但显示过滤器命中了我无法使用 Pyshark 处理的第二个 CP_CW_combination)。这是它在 Wireshark 中的外观:

screenshot(仅链接,因为我是菜鸟)

Pyshark 正在获取第一个 CP_CW_provision。如何获得第二个?

>>> import pyshark  
>>> cap=pyshark.FileCapture('CW_provision.pcap')  
>>> pkt=cap[0]  
>>> pkt.layers  
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SIMULCRYPT Layer>]  
>>> sc=pkt[3]  
>>> sc.pretty_print()  
Layer SIMULCRYPT:  
        Header, Length: 5 bytes  
        Version: 0x02  
        Message Type: CW_PROVISION (0x0201)  
        Interface: ECMG <-> SCS  
        Message Length: 76 bytes  
        Message containing TLV parameters, Length: 76 (bytes)  
        Parameter: Type=ECM_CHANNEL_ID, Value Length=2 (bytes), Value=0x1f91  
        Parameter Type: ECM_CHANNEL_ID (0x000e)  
        Parameter Length: 2 bytes  
        ECM channel ID: 8081  
        ECM stream ID: 27  
        CP number: 36374  
        CP CW combination: 8e1675[snip]  
        CP duration: 100 (10000 ms)  
        Access criteria: 1136f100  
        Parameter: Type=ECM_STREAM_ID, Value Length=2 (bytes), Value=0x001b  
        Parameter: Type=CP_NUMBER, Value Length=2 (bytes), Value=0x8e16  
        Parameter: Type=CP_CW_COMBINATION, Value Length=18 (bytes), Value=0x8e1675[snip]  
        Parameter: Type=CP_CW_COMBINATION, Value Length=18 (bytes), Value=0x8e1709[snip]  
        Parameter: Type=CP_DURATION, Value Length=2 (bytes), Value=0x0064  
        Parameter: Type=ACCESS_CRITERIA, Value Length=4 (bytes), Value=0x1136f100  
        Parameter Type: ECM_STREAM_ID (0x000f)  
        Parameter Type: CP_NUMBER (0x0012)  
        Parameter Type: CP_CW_COMBINATION (0x0014)  
        Parameter Type: CP_CW_COMBINATION (0x0014)  
        Parameter Type: CP_DURATION (0x0013)  
        Parameter Type: ACCESS_CRITERIA (0x000d)  
        Parameter Length: 2 bytes  
        Parameter Length: 2 bytes  
        Parameter Length: 18 bytes  
        Parameter Length: 18 bytes  
        Parameter Length: 2 bytes  
        Parameter Length: 4 bytes  
        CP CW combination: 8e1709[snip]  
>>> cpcw0=sc.cp_cw_combination  
>>> cpcw0  
'8e:16:75:[snip]'  
>>> cpcw1=sc.?????  

【问题讨论】:

    标签: python wireshark pyshark


    【解决方案1】:

    您可以从同一字段中访问它们。 这意味着您需要从“cp_cw_combination”字段中获取其备用字段;您可以在下面找到一个列出所有值的示例:

    for x in cap[0][3]._all_fields.values():
        if 'cp_cw_combination' in x.name:
            print(x.all_fields)
            break
    

    【讨论】:

      【解决方案2】:

      试试看:pkts[pkt_number].get_multiple_layers('name')

      有一个类似的问题:

      print(dir(pkts[1]))
      
      ..., 'plp', 'plp-flexray', 'plp-flexray', 'pretty_print', 'show', 'sniff_time', 'sniff_timestamp', 'transport_layer']
      

      这里我想要plp-flexrayprint(pkts[1].get_multiple_layers('plp-flexray')) 返回:

      [<PLP-FLEXRAY Layer>, <PLP-FLEXRAY Layer>]
      

      今天才开始玩 pyshark,可能有更快的方法来完成我在这里所做的事情,但这对我有用。

      【讨论】:

        猜你喜欢
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 2014-07-12
        • 1970-01-01
        相关资源
        最近更新 更多