(此问题类似于Alex Wang's question,但答案是协议特定的)
我喜欢Wireshark支持Simulcrypt但有一些限制:显示过滤器应用于数据包级别,因此通常会为每个数据包包含多个Simulcrypt消息的数据包提供不明确的结果。
我选择使用Pyshark将每个ECMG<> SCS消息的详细信息从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.?????
答案 0 :(得分:0)
您可以在同一字段中访问它们。 这意味着您需要从“ cp_cw_combination”字段中获取其备用字段;在下面,您可以找到列出所有值的示例:
for x in cap[0][3]._all_fields.values():
if 'cp_cw_combination' in x.name:
print(x.all_fields)
break
答案 1 :(得分:0)
尝试看看: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
和print(pkts[1].get_multiple_layers('plp-flexray'))
返回:
[<PLP-FLEXRAY Layer>, <PLP-FLEXRAY Layer>]
今天才开始使用pyshark,可能会有更快的方法来做我在这里所做的事情,但这对我有用。