首页 > 解决方案 > 从 pyshark 中提取数据

问题描述

我正在尝试从我从另一台设备接收的数据包中提取数据。我已经隔离了要从中提取数据的数据包,但无法弄清楚如何提取我想要的数据。我正在使用 pyshark 来获取数据包,但这不允许我实际看到该数据。我在wireshark时可以看到数据。我要提取的数据用红色圈起来。线鲨

这是我在python中的代码。

import pyshark

capture=pyshark.LiveCapture(interface='wlan0', display_filter='frame.len>190 and upd.port==1700')

for i in capture:
  print(i)

它显示所有与wireshark 相同的信息减去纬度、经度坐标。

标签: pythonwiresharkpacketpyshark

解决方案


我会要求一个示例 PCAP 文件,但大多数人不想共享真实世界的数据。如果没有 PCAP 文件,我无法给你一个完整的答案,但我可以给你一个 95% 的答案。

这就是我攻击您的问题的方式:

import pyshark

capture = pyshark.LiveCapture(interface='your_interface')
for raw_packet in capture.sniff_continuously():

   # filter only UDP packet that have a frame length greater 
   # than 190 and that have a port number of 1700.
   if hasattr(raw_packet, 'udp') and int(packet.frame_info.cap_len) > 190 and packet[packet.transport_layer].srcport == '1700':

     # Get the details for the packets by accessing
     # _all_fields and _all_fields.values()
     field_names = raw_packet.udp._all_fields
     field_values = raw_packet.udp._all_fields.values()
     for field_name in field_names:
        for field_value in field_values:
           # you can add another filter here to get your 
           # lat & long coordinates 
           print(f'{field_name} -- {field_value}')

     # if you need to access the packet data you need to do this,
     # but it might come back in hex, which will need to be decoded. 
     # if "DATA" in str(packet.layers):
     #   print(packet.data.data)

如果您在过滤出您要查找的数据包时遇到任何问题,请联系我们。如果您可以共享示例 PCAP,我将调整我的答案。

我在 GitHub 上有一个名为pyshark packet analysis的文档和代码示例,您可能会发现它们很有用。


推荐阅读