を送信するには、私は現在、802.11フレームのための最適な送信パフォーマンスを取得しようとしてる、私はlibpcapのを使用していますが、私は生のソケット(または任意の他の可能な方法)を使用して、それをスピードアップすることができれば、私は疑問に思いました。rawソケット対libpcapのパフォーマンス
は既に以前に作成したデバイスハンドル付きのlibpcapのためのこの単純な例のコードを検討:
char ourPacket[60][50] = { {0x01, 0x02, ... , 0x50}, ... , {0x01, 0x02, ... , 0x50} };
for(; ;)
{
for(int i; i = 0; i < 60; ++i)
{
pcap_sendpacket(deviceHandle, ourPacket[i], 50);
}
}
このコードセグメントはそれぞれ別々のCPUコアのスレッドで行われます。アレイに格納されているRadiotapヘッダーを含むraw 802.11フレーム/パケットに対して、これを行うもっと速い方法はありますか?
pcapのソースコードをpcap_inject
(同じ機能ですが異なる戻り値)と見て、パケットを送信するためにrawソケットを使用していないようですか?全く分からない。
他の多くの質問に答えたので、私はパフォーマンスのキャプチャには気をつけません。 rawソケットはレイヤ2パケット/フレームを送信する場合でもですか?
あなたは使用しているOSを指定していません。 libpcapはクロスプラットフォームなので、大きな違いがあります。私が最もよく知っているlinuxを仮定すると、すでにrawソケットを使用しています。しかし、私はあなたが単一のシステムコール(そしてAFAIKは現在libpcapでサポートされていない*)だけであなたのパケットの配列全体を送ることができると信じている 'PACKET_TX_RING'を調べることができます。この設定を行うにはかなりの学習曲線があります。 –
私はLinuxを使用しています。上記の例では、完全な野生の推測と同様に、未処理のソケット実装に対応するためにいくつの変更を行う必要がありますか?私はたくさんいると思いますか?私は構造体のような別のフレームレイアウトを使用する必要がありますか?それとも、私の配列に格納されている既に作成済みのフレームを正常に送信できますか? libpcapがそれを処理するので、私はそれらから抜けているのはチェックサムだけだと信じています。 – RSS
フレーム構造は変わりません。単なるバイト配列です。しかし、それらを組み立てるか、tx_ringメモリにコピーする必要があります。 –