Почему Linux повторно отправляет пакеты и меняет заголовки сокетов RAW UnixLinux

Ответить Пред. темаСлед. тема
Anonymous
 Почему Linux повторно отправляет пакеты и меняет заголовки сокетов RAW Unix

Сообщение Anonymous »

У меня есть этот код ниже, который я использую для отправки необработанного сокета в Unix с помощью функции sendto. он работает нормально. Если пакет представляет собой кадр 802.11, то когда я отправляю пакет, ОС повторно отправляет его с некоторыми изменениями.
Мой заголовок Radiotap 802.11 обычно имеет размер 26 байт, и есть 4-байтовый FCS ( Frame Check Sequence) в конце пакета.
Заголовок повторно отправленного пакета уменьшается до 13, и FCS удаляется. поэтому в каждом кадре отсутствует 17 байт. Не просто отсутствует, а полностью изменен заголовок.
Вот пример из Wireshark. Я отправляю кадры 802.11, пакет подтверждения (40 байт) и пакет аутентификации (60 байт), и они изменяются и повторно отправляются ОС. (Я пробовал на Ubuntu и Kali Linux. Такое же поведение). Вы увидите, что 40 60 — это те, которые я отправил, а остальные пакеты удалены по 17 байт, как описано.
Изображение

Здесь подробнее о пакетах, это флаги заголовка из оригинала пакет, который я отправляю.. (как сказано, 26 байт)
Изображение

Это измененный заголовок, отправленный ОС.
Изображение

Обратите внимание, что некоторые флаги, такие как Channel dbm Antenna signal и т. д., являются удалены, а повторные попытки передачи данных TX помечены.
Я использую собственный сетевой адаптер, поддерживающий режим мониторинга, для отправки необработанного пакета. Я знаю, что, поскольку я копирую пакеты аутентификации из другой программы для отправки с помощью моего адаптера, MACTIMESTAMP может быть неправильным или dbm и канал могут быть изменены. (хотя информация о канале/dbm не существует в кадре 802.11)
Почему Linux и Ubuntu делают это? поскольку кадр подтверждения был скопирован со встроенного адаптера, я знаю, что сигнал dbm/channel может быть изменен, но почему ОС отправляет повторно?
Я также пробовал это на Ubuntu 20.04 и Kali Linux. Они оба ведут себя одинаково. Итак, это базовое поведение Linux для повторной отправки необработанных кадров 802.11, отправленных с помощью sendto().
Это пакет подтверждения, который я создаю в C,

Код: Выделить всё

unsigned char acknowledgePacketToIphone7PlusFromTPLINK[] = {
0x00, 0x00, 0x1a, 0x00, 0x2f, 0x48, 0x00, 0x00, 0x49, 0x42, 0xb7, 0x63, 0x00, 0x00, 0x00, 0x00,
0x10, 0x02, 0x99, 0x09, 0xa0, 0x00, 0xd2, 0x01, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x82, 0xd6,
0xb0, 0x18, 0x38, 0x7f, 0x6b, 0x14, 0xdf, 0x38
};
и вот такой у меня код, который не имеет к этому никакого отношения. Кроме того, такого поведения повторной отправки не происходит, когда я, например, переключаю каждый байт на 0x01(поэтому отключите формирование 802.11)

Код: Выделить всё

#include 

//initialize data
struct sockaddr_ll ll; // => link layer
struct ifreq ifreq_i;

int sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); // => socket is layer 2

//Network Interface Name
memset(&ifreq_i,0,sizeof(ifreq_i)); memset(&ll,0,sizeof(ll));
strncpy(ifreq_i.ifr_name,"wlan1",IFNAMSIZ-1);

if((ioctl(sock_raw,SIOCGIFINDEX,&ifreq_i))

Подробнее здесь: [url]https://stackoverflow.com/questions/78360638/why-does-linux-resend-packet-and-change-headers-raw-sockets-unix[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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