Внедрение беспроводного пакета с использованием libpcap

Я уже давно пытаюсь внедрить пакеты в мой беспроводной интерфейс через libpcap. Я могу видеть те же пакеты, когда я проверяю пакеты с того же интерфейса, но никакой другой интерфейс или машина не может получить пакеты.

Чтобы продемонстрировать, что я имею в виду, вот небольшой фрагмент кода, который я использую:

u_char RADIOTAP_WRAPPER[] = {
0x00,                   // it_version
0x00,                   // padding
0x0a, 0x00,             // length
0x00, 0x00, 0x80, 0x00, // IEEE80211_RADIOTAP_TX_FLAGS
0x00, 0x08,             // no-ack required
};

u_char my_packet[] = {
// Some custom data of mine that I want to send (and no, I don't want to use IEEE 802.11
};

u_char *complete_packet; // Concatenate the header and the my_packet data and place it here (skipping that code for brevity)

pcap_sendpacket(handle,complete_packet,complete_packet_size);

Пакет создан правильно, и если я запускаю приемник, используя pcap_next на том же устройстве (wlan0 в моем случае) работает отлично. Однако, если я использую wlan0 на соседнем устройстве или wlan1 на моем собственном устройстве, пакет отсутствует. Проблема не в других пакетах в беспроводном пространстве, а в том, что пакеты, похоже, вообще не попадают в пространство. Кажется, они застряли внутри одного и того же интерфейса.

Есть ли какие-то конкретные флаги, которые я мог бы пропустить в заголовке радиоленты? Что-то другое?

PS: я делаю пользовательский формат данных только для образовательных целей. Я бы предпочел не иметь заголовок IEEE 802.11, так как он, кажется, идет вразрез с тем, что я собираюсь создать (способ отправки и получения пакетов из любого места и в любое место без необходимости знать человека, которому вы отправляете). Следовательно, я бы предпочел, чтобы такие ответы, как «Вы не должны создавать свои собственные типы заголовков пакетов и т. Д.», Отсутствовали. Спасибо 🙂

0

Решение

Вы не можете пропустить заголовок 802.11, если хотите, чтобы сетевой интерфейс 802.11 считывал ваш пакет. Когда принимающий сетевой интерфейс пытается прочитать ваш пакет, он проверит, является ли он получателем (либо напрямую, либо для широковещательной рассылки, либо, если он установлен в случайный режим). Кроме того, 802.11 имеет проверку циклическим избыточным кодом (CRC), чтобы убедиться, что не было ошибок передачи. Если место, где он ожидает чтения CRS, не является правильным хеш-значением, получатель отбросит ваш пакет.

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

1

Другие решения


По вопросам рекламы [email protected]