Вытягивание данных из pyshark

Я пытаюсь извлечь данные из пакетов данных, которые я получаю с другого устройства. Я изолировал пакет, из которого хочу извлечь данные, но не могу понять, как извлечь нужные данные. Я использую pyshark для доступа к пакету, но это не позволяет мне фактически видеть эти данные. Я могу видеть данные, когда нахожусь в wirehark. Данные, которые я хочу получить, обведены красным. Wireshark

Вот мой код на питоне.

import pyshark

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

for i in capture:
  print(i)

Который отображает всю ту же информацию, что и wirehark, за исключением координат широты и долготы.


person hunterkeating    schedule 12.11.2020    source источник
comment
Мой ответ решил вашу проблему? Если да, примите мой ответ. Если нет, пожалуйста, свяжитесь с нами, чтобы можно было решить любые нерешенные проблемы. Спасибо   -  person Life is complex    schedule 27.01.2021


Ответы (1)


Я бы попросил образец файла 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, которые вы может оказаться полезным.

person Life is complex    schedule 21.11.2020