0

私がしたいこと:ユーザースペースにレイヤー2プロトコルを実装します。

したがって、Linux 2.6.32でpcapを使用して、パケットをスニッフィングしています。

    ...
    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);
    ...

ローカルホストでのみパケットをスニッフィングでき、同じプログラムを実行している他のラップトップではスニッフィングできません。それで、質問は「どうすればwlanでether_headなしでメッセージをブロードキャストできますか?」です。任意のポインタをいただければ幸いです。

4

2 に答える 2

1

アクセス ポイント (インフラストラクチャ モード) を使用している場合、アクセス ポイントは他のワイヤレス ステーション間でフレームをリレーするため、レイヤー 2 プロトコルの通信方法を知っている必要があるため、これを行うことはできません。

レイヤー 3 でプロトコルを実装することをお勧めします (ソケットを調べることもできますPF_PACKET)。

于 2011-02-02T00:16:31.860 に答える
0

ランダムなデータだけでなく、ヘッダーを含む完全なフレームを送信する必要があります。このマニュアルhttp://linux.die.net/man/3/pcapの関数 pcap_inject() を見てください。新しいフレームを作成する際に、これはhttp://www.tcpdump.org/pcap.htmlに役立つか、単に libnet ライブラリhttp://libnet.sourceforge.net/libnet.htmlを使用することができます。

于 2012-04-27T19:46:48.400 に答える