私はlibpcapに依存し、2つのスレッドを実行するCプログラムを持っています。 1つの関数はパケットをキャプチャし、送信元IPをchar配列に向かうカスタムパケットに追加します。 2番目の関数は2次元配列を反復処理し、各ソースIPに対してカスタムパケットを送信します。どちらも同時に発生し、どちらも停止しません(永遠にループします)。Cの文字配列に重複が追加されないようにするにはどうすればよいですか?
問題:2番目の関数(送信側)が、唯一の配列の各ループ中に1つの一意のパケットを送信するだけで、速度が重要になります。私は、最初の機能(パケットキャプチャと作成者)が、同じソースのコピーが他のものよりも多くのパケットを取得するという意味で、配列をいっぱいにすることは望ましくありません。配列のサイズが30の場合は、ダイナミックなサイズ変更のハッカーや、しばらくの間実行されたときのbazillionのサイズは必要ありません。それが役立つ場合
は、ここではいくつかの非常に最小限の擬似コードです:Pythonのif not in list
機能は、私はハード甘やかさいるように思える
int i = 0;
char arrayForCustomPackets[30][7];
const char stuffIWantInPackets[3] {0x00, 0x00, 0x00};
function1(packet) {
memory copy packet.IP to arrayForCustomPackets[i]
memory copy stuffIWantInPackets to arrayForCustomPackets[i] + 4
++i
printf("Hopefully unique IPs captured in array: %d", i);
}
function2() {
int a = 0;
for (a = 0; a < i; a++;)
send packet arrayForCustomPackets[a];
}
main() {
create threadA(when specific filtered packet has been captured, do function1);
create threadB(do function2 forever);
}
。これがCや少なくとも私のプログラムではできない場合は、threadCを開く必要があると思います。希望を失ったので、配列を通過するパフォーマンスにあまり厳しくないアルゴリズムであることを期待してください。
これはCです。もちろん、自分でやる必要があります。あなたが望むのはハッシュテーブルです。そのためのライブラリがたくさんあります。 –
私はLinuxカーネルの侵入型リンクリストとハッシュテーブルが好きです。 Googleのために、彼らは速く、堅牢で非常に便利です!もちろん、もしあなたがC++ STLを使うことができれば、それはもっと良くなるでしょう... –
うん、ちょっと読んでハッシュテーブルが必要なようです。おそらく私のコードに入れて苦痛になるだろう。正しい方向に私を指してくれてありがとう! – RSS