2011-09-14 31 views
0

NFQUEUEを使用して別のアプリケーションのトラフィックをフィルタリングするCプログラムを開発中です。私がする必要があることの1つは、パケットに含まれる文字列を別の文字列に置き換えることです。文字列の検索と置換、ヌルバイト文字の無視

問題は、パケットにヌルターミネーターバイトがランダムに(文字列の中央に)含まれているように見えることです。これは、strstr()を使って見ているほとんどの解決策が機能しないことを意味します。ヌルターミネーターバイトに達したときに停止しないで、長さを指定することができ、代わりにそれを使用する同様のものを見つける必要があります。 (nfq_get_payload()は長さを返します)

置き換えを実行する前にnullバイトを別のバイトに置き換えてから、パケットが送信される前にnullバイトを復元することを検討しました。そのアプローチの問題は、パケットに文字が含まれている可能性があることです。そのため、これは最善の方法ではありません。私はパケット内に含まれていないランダムなバイトも見つけることができると思いますが、そのすべてをやるのをやめてしまいます。

編集:元の文字列と置換文字列は同じ長さで、13文字です。

+0

*パケットにヌルターミネータバイトがランダムに含まれているように見える* - プロトコルとトラフィック仕様を取得して、これらのヌルがいつどこにあるかを正確に把握します。フォーマットを理解していないトラフィックを変更すると、アプリケーションが中断され、ユーザーデータの消失を含むさまざまな副作用が発生し、デバッグ用の地獄に陥る可能性があります。 – Secure

+0

これは開発者が利用できる仕様のないクローズドソースアプリケーションです。残念ながらこれはオプションではありません。 – Mike

+0

文字列の代わりに特別なビットパターンを探しているだけではありませんか? – Superlokkus

答えて

1

1文字が見つかるとmemchrに満足するかもしれません。それ以外の場合は、memmem実装を自分で作成するか、オンラインで見つける必要があります。性能特性の広い範囲を持つことができます(つまり、memmemが何であるかだから)あなたはパフォーマンスのアルゴリズムに基づいたものを見つけたいので

は、その文字列探索アルゴリズムに注意してください(例: this oneが許容見えますが、あなたの走行距離は変更になる場合があります) 。