Есть ли способ извлечь тип протокола WiFi из файла трассировки PcapNG?

Я создаю парсер PcapNG (в Python) для анализа пакетов WiFi.
Я хотел бы иметь возможность отображать тип ссылки (например, вариант протокола: 802.11b, 802.11a, 802.11g или 802.11n).

Однако, читая определение формата PcapNG, я вижу только следующее упомянутое:

  • LINKTYPE_IEEE802_11 105 IEEE 802.11 (беспроводной)
  • LINKTYPE_IEEE802_11_RADIO 127 802.11 plus BSD радио заголовок

Есть ли способ извлечь тип протокола WiFi из файла трассировки PcapNG?

1 ответ

Решение

Если тип заголовка канального уровня для интерфейса, на котором был захвачен пакет, является LINKTYPE_IEEE802_11, нет, вы не можете получить вариант протокола.

Если тип заголовка канального уровня для интерфейса, на котором был захвачен пакет, является LINKTYPE_IEEE802_11_RADIOTAP (да, это правильное имя; список типов заголовков канального уровня в спецификации pcap-NG wiretap.org устарел, -to-date список - страница типов заголовков канального уровня tcpdump.org), затем пакет начинается с заголовка радиоленты, дающего различные метаданные о пакете.

Если заголовок радиоленты включает в себя поле " Канал", то по имеющейся информации вы можете определить некоторую информацию о варианте протокола:

  • "Канал спектра 5 ГГц" + "Канал OFDM" = 802.11a;
  • "Канал спектра 2 ГГц" + "Канал CCK" = 802.11b;
  • "Канал спектра 2 ГГц" + "Канал OFDM" = 802.11g;
  • "Канал спектра 2 ГГц" + "Динамический канал CCK-OFDM" = 802.11g;

(разница между двумя вариантами 802.11g указывает, может ли трафик 802.11b также передаваться по одному и тому же каналу - это то, что указывает "Динамический канал CCK-OFDM").

Однако, если присутствует поле MCS, это 802.11n, а не любой из этих других типов, а если присутствует поле VHT, это 802.11ac.

Также может существовать поле XChannel, которое можно интерпретировать аналогично полю Channel, хотя оно также содержит некоторую информацию для 802.11n.

Другие вопросы по тегам