Как отключить автоматическую вставку заголовка радиоотвода в необработанные сокеты?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как отключить автоматическую вставку заголовка радиоотвода в необработанные сокеты?

Сообщение Anonymous »

Я работаю над инструментом, использующим необработанные системные сокеты.
Этому инструменту необходимо отправлять пакеты с помощью протоколов низкого уровня, таких как IEEE 802.1X.
Когда я проверяю пакеты в Wireshark, я замечаю, что заголовок радиотапа отличается от того, который я создал. После некоторого расследования выяснилось, что ядро ​​Linux автоматически добавляет свой собственный заголовок Radiotap поверх моего пакета, хотя я уже включил его.
Мой вопрос:
Есть ли способ запретить ядру Linux автоматически добавлять заголовок Radiotap? Например, можно ли этим управлять с помощью setsockopt()?
Я отправляю пакеты IEEE 802.1X через Wi-Fi, поэтому включаю в пакет заголовок radiotap.
Я обнаружил кое-что новое: все байты, которые я вставил в свой собственный заголовок Radiotap, интерпретируются в Wireshark, как если бы они были значениями для дополнительных полей в заголовке Radiotap, добавленных ядром Linux.
Итак, есть два варианта.
  • Ядро Linux всегда будет добавлять заголовок Radiotap, даже если я его уже включил.
  • Мой заголовок Radiotap неверен.
Вот как я создаю заголовок Radiotap и как я вставляю его в пакет:
// File headers.h
struct radiotap_header {
uint8_t version; // must be 0
uint8_t pad; // must be 0
uint16_t length; // length of the radiotap header
uint32_t bitmap; // a bitmap of present fields
} __attribute__((packed));

// File main.cpp
// code in function main()...
std::vector packet;

// the radiotap header
radiotap_header radiotap;
radiotap.version = 0;
radiotap.pad = 0;
radiotap.length = 8; // the minimum length is 8
radiotap.bitmap = 0;

// copy the header to the beginning of the packet
memcpy(packet.data(), &radiotap, sizeof(radiotap));

// the rest of the headers...

// send the packet
int bytesSent = sendto(sock, packet.data(), packet.size(), 0, (sockaddr*)&interface, socketLength);

if (bytesSent

Подробнее здесь: https://stackoverflow.com/questions/798 ... aw-sockets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»