Как отправить / получить слой 2 кадра на WLAN - PullRequest
0 голосов
/ 02 февраля 2011

Что я хочу сделать: Реализация протокола уровня 2 в пространстве пользователя.

Так что я использую pcap под Linux 2.6.32 для перехвата пакетов:

    ...
    struct pcap_t *pcap_h = pcap_open_live("wlan0", BUFSIZ, 1, 0, errbuf);
    ...
    while (1) { 
          int ret = pcap_loop(pcap_h, -1, newpkt_callback, NULL);
          ...
    }
    ...

, который прекрасно работает для всех пакетов. Но когда я использую pcap для отправки пакетов без ether_head и без IP-заголовка:

    const char pkt[] = "WHATEVER";
    nsent = pcap_sendpacket(pcap_h, (const u_char *)pkt, len);
    ...

Я могу только прослушать пакет на локальном хосте, а не на других ноутбуках, на которых установлена ​​та же программа. Итак, вопрос «как я могу транслировать сообщения без ether_head на wlan»? Любые указатели будут оценены.

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Вы не можете сделать это, если используете точку доступа (режим инфраструктуры), поскольку точка доступа передает кадры между другими беспроводными станциями и, следовательно, должна знать, как разговаривать по протоколу уровня 2.

Я предлагаю реализовать ваш протокол на уровне 3 (и вы, возможно, захотите изучить PF_PACKET сокеты).

0 голосов
/ 27 апреля 2012

Вы должны отправить полный кадр с его заголовками, а не просто случайные данные.Взгляните на это руководство http://linux.die.net/man/3/pcap на функцию pcap_inject ().В создании нового фрейма это может помочь http://www.tcpdump.org/pcap.html, или просто использовать библиотеку libnet http://libnet.sourceforge.net/libnet.html.

...