Pyshark:同名的第二个同密层字段值不是accessib

2024-04-20 02:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

(此问题与Alex Wang's question相似,但答案是特定于协议的)

我喜欢Wireshark支持同密,但也有局限性:显示过滤器是在包级别上应用的,因此通常会从每个包有多个同密消息的包中给出不明确的结果。在

我选择使用Pyshark将每个ECMG<;>SCS消息的详细信息从pcap提取到Excel表中,在那里我可以应用列筛选、条件格式等来跟踪特定的“对话”

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

具体情况如下:

我创建了一个pcap,其中有一个CW_逖provision消息(可能不相关,但是显示过滤器命中了第二个CP_CW_组合,这是Pyshark无法实现的)。以下是Wireshark的外观:

screenshot(仅链接,因为我是个笨蛋)

这是皮沙克在行动中得到的第一条军需条款。如何得到第二个?在

>>> 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.?????  

Tags: layerid消息bytesparametervaluetypepcap
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-flexray和{} 返回时间:

^{pr2}$

今天才开始和pyshark玩,也许有一个更快的方法来做我在这里做的事情,但这对我很有效。在

您可以从同一字段中访问它们。 这意味着,从“cp_cw_combination”字段中,您需要获得其替代字段;下面是一个列出所有值的示例:

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

相关问题 更多 >