私はOracleデータベースと通信するアプリケーションを持っています。ロギングはかなりお粗末なので、データベースに送信しているSQLを調べる唯一の方法は、TNS.requestsのパケットスニッフィングです。これらのパケットを特定の名前を含むパケットでフィルタリングしたいのです。つまり、パケット内の特定の文字列の存在です。これどうやってするの?
ありがとう。
私はOracleデータベースと通信するアプリケーションを持っています。ロギングはかなりお粗末なので、データベースに送信しているSQLを調べる唯一の方法は、TNS.requestsのパケットスニッフィングです。これらのパケットを特定の名前を含むパケットでフィルタリングしたいのです。つまり、パケット内の特定の文字列の存在です。これどうやってするの?
ありがとう。
回答:
「含む」または「一致する」演算子を試しましたか?例えば、
tns.request and tns contains "Marshmallows"
または単に
frame matches "(?i)marshmallows"
最初の例では、大文字と小文字を区別する文字列「Marshmallows」を含むTNSリクエストを探します。2番目の例では、大文字と小文字を区別せずに、任意のフレームの任意の場所で「マシュマロ」を検索します。( "contains"は単純な文字列マッチングを実行します。 "matches"はPCRE修飾子を使用できます)。
更新:Wireshark 2.6以降では、「一致」はデフォルトで大文字と小文字を区別しません。"(?-i)" PCRE修飾子を使用して、大文字と小文字を区別することができます。
あなたの質問にはいくつかの解釈があります:
WireSharkを使用していて、より高度なフィルタリングを行ってデータをより適切に分析したいと考えています。その場合は、ドキュメントをお読みください。さらに表現力が必要な場合は、Luaでフィルターをプログラムすることもできます。
これらのパケットをフィルターで除外したい。つまり、アプリケーションレベルのファイアウォールまたはNIDSです。ファイアウォール/シェーピングのL7フィルター、またはNIDSのSnortを確認します(後者はいくつかのLuaスクリプトも使用できると思います)。
パケットをキャプチャしてログに記録したり、統計を作成したり、その他の自動タスクを作成したりします。Luaのtcpdump / libpcapまたは自分自身のlibpcapバインディングを確認してください。