2011-02-01 6 views
0

私がしたいこと:ユーザー空間でレイヤー2プロトコルを実装します。 wlanでレイヤー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); 
      ... 
    } 
    ... 

を。しかし、私はノーether_headなしIPヘッダでパケットを送信するためのpcapを使用する場合:

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

私はローカルホスト上ではなく、同じプログラムを実行している他のラップトップ上でのパケットのみを盗聴することができます。ですから、問題は「どのようにしてether_headなしでメッセージをブロードキャストできますか」です。任意のポインタが評価されるだろう。

答えて

1

アクセスポイント(インフラストラクチャモード)を使用している場合は、アクセスポイントが他の無線ステーション間でフレームを中継するため、レイヤ2プロトコルとの対話方法を理解する必要があります。

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

+0

私は実際にはrawソケットとPF_PACKETを使って試しましたが、問題はまだあります。 APに関しては、プロトコルの全ポイントはアクセスポイントを使用しないことです。言い換えれば、私は単純に無線デバイスにデータを注入し、もう片方でデータを受信する方法を探しています。 – Peyman

+0

@Peyman:あなたは実際にアドホックモードでカードを関連付けていますか?さらに、一部のワイヤレスカードはプロミスキャスモードをサポートしていません。 – caf

+0

私はアドホックモードも試しました。プロミスキャスモードの場合、 'pcap_open_live'は警告で復帰するはずですか? – Peyman

関連する問題