Pyshark 获取特定的协议名称而不仅仅是 TCP/UDP
Pyshark get specific protocol name not just TCP/UDP
我正在构建一个使用 PyShark 检查 PCAP 文件的工具,但是我很难从数据包中提取特定协议(例如 SSH、MQTT、ARP),而不仅仅是 TCP 或 UDP。
我想知道是否有人对此有经验?我试过 packet.ip.proto
但只有 returns TCP 和 UDP ID 号,而不是 SSH 或 ARP 等名称。
我正在尝试获取与 Wireshark 在以下示例中显示的信息相同的信息:
谢谢!
我想我已经弄明白了。看起来每种特定类型的协议都将自己的层添加到数据包中,因此通过打印出数据包中的所有层,您可以识别任何 non-standard 层。
with pyshark.FileCapture(TEST_FILE) as cap:
for i, pkt in enumerate(cap):
print(pkt.layers)
输出:
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
您可以获得可用的图层名称列表,如下所示:
with pyshark.FileCapture(TEST_FILE) as cap:
for i, pkt in enumerate(cap):
try:
print([pkt.layers[i].layer_name for i, lay in enumerate(pkt.layers)])
except AttributeError as ex:
print(ex)
输出:
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp']
['eth', 'ip', 'tcp', 'ssh']
['eth', 'ip', 'tcp', 'ssh']
['eth', 'ip', 'tcp', 'ssh']
我正在构建一个使用 PyShark 检查 PCAP 文件的工具,但是我很难从数据包中提取特定协议(例如 SSH、MQTT、ARP),而不仅仅是 TCP 或 UDP。
我想知道是否有人对此有经验?我试过 packet.ip.proto
但只有 returns TCP 和 UDP ID 号,而不是 SSH 或 ARP 等名称。
我正在尝试获取与 Wireshark 在以下示例中显示的信息相同的信息:
谢谢!
我想我已经弄明白了。看起来每种特定类型的协议都将自己的层添加到数据包中,因此通过打印出数据包中的所有层,您可以识别任何 non-standard 层。
with pyshark.FileCapture(TEST_FILE) as cap:
for i, pkt in enumerate(cap):
print(pkt.layers)
输出:
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SYNERGY Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
[<ETH Layer>, <IP Layer>, <TCP Layer>, <SSH Layer>]
您可以获得可用的图层名称列表,如下所示:
with pyshark.FileCapture(TEST_FILE) as cap:
for i, pkt in enumerate(cap):
try:
print([pkt.layers[i].layer_name for i, lay in enumerate(pkt.layers)])
except AttributeError as ex:
print(ex)
输出:
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp', 'synergy']
['eth', 'ip', 'tcp']
['eth', 'ip', 'tcp', 'ssh']
['eth', 'ip', 'tcp', 'ssh']
['eth', 'ip', 'tcp', 'ssh']