2

libpcapのCAPIを使用してパケットをキャプチャするとします。文字列検索strstr()を使用して回線速度(Mbps / Gbpsなど)で一部のペイロード文字列を解析するのは効率的ですか?たとえば、strstr(payload、 "User-Agent");

libpcreなどの正規表現パターンマッチングライブラリを使用すると、より効率的になりますか?

HTTPヘッダー引数に対してのみこれを実行したい場合、C APIはありますか?libcurlがそれを実行できるかどうかは私にはわかりません...よろしくお願いします。

4

3 に答える 3

1

http://www.arstdesign.com/articles/fastsearch.htmlには、strstrが適切に実行されていることを示すいくつかのメトリックがあります。短い文字列の一致の場合、正規表現ライブラリが最適化された優れたアセンブリに勝るものはないと思います。

于 2010-08-26T07:15:21.517 に答える
1

単一の短い文字列のみを検索する場合、で使用される線形比較よりもはるかに高速なものはありませんstrstr()。とは言うものの、バイトstrstr()の特別な扱いはNUL、ネットワークトラフィックを調べるために必要なものではないことはほぼ間違いありません。すべてのバイトを同じように扱い、長さのパラメーターを受け入れる独自の実装を作成することをお勧めします。

複数の文字列を検索する場合は、Aho–Corasickのような高速の文字列照合アルゴリズムを使用するか、必要なコンテキストで必要な文字列に一致するステートマシン(パーサー)を構築することをお勧めします。CのHTTPのようなほとんど正規文法を解析するために、ragelステートマシンコンパイラが私の選択ツールです。

于 2010-09-02T13:41:31.543 に答える
0

strstrが正規表現の代替手段よりも遅いとは想像できませんが、さまざまなHTTPヘッダー値を引き出す必要がある場合は、パケットの解析が非常に簡単で優れたオプションになります。libpcapには組み込みのパーサーは含まれていませんか?

于 2010-07-27T23:43:47.257 に答える