web-dev-qa-db-ja.com

Linuxネットワークスタック内のパケットのトレース

すべてのネットワーク層を介してパケットをトレースする可能性はありますかLinuxカーネル内? SystemTapについては知っていますが、別の(より高レベルの)ソリューションがあるかどうかを確認しています。

私が直面している問題は次のとおりです。複数のインターフェイス、ブリッジ、複数のルールを備えたファイアウォール、カスタムテーブルを使用した高度なルーティングを備えたルーターとして機能するマシンがあります。一部の着信パケット応答はローカルプロセスに配信されず(tcpdumpで表示されていても)、ルーティング、ファイアウォール、またはその他の原因で失われたかどうかを判断するのは困難です。

だから私はこれを助ける何かを探しています、「abcdからインターフェースXに来るパケットを追跡する」ことができ、パケットがネットワーク層をどのように通過したか、そしてパケットがドロップ、配信、または離れた場所の出力を生成するツールですシステム。パケットのstraceのように。

このようなものは存在しますか?

編集:明確にするために詳細を追加しました。

2
Unknown

カーネルによってユーザースペースにエクスポートされた統計/ SNMPカウンターをプローブすることにより、Linuxカーネルスタックでのパケットトラバーサルに関する情報を取得できる場合があります。たとえば、「netstat -s」(または「cat/proc/net/snmp」(読みにくい))などです。したがって、たとえば、IPv4ヘッダーが間違っているためにエラーが発生した場合、InHdrErrorsがインクリメントされ、「cat/proc/net/snmp」はこのエラーが発生したことを示します。 「cat/proc/net/snmp」(「InHdrErrors」と呼ばれます)を実行したときに表示される4番目の列を確認してください。

カーネルコードを見ると、IPv4トラフィックのハンドラーであるip_recv()メソッドで、最小ヘッダー長のチェックがあるか、バージョンメンバーであることがわかります。
IPv4ヘッダーのは「4」であり、そうでない場合は、IPSTATS_MIB_INHDRERRORSカウンターがインクリメントされます。

参照: http://lxr.free-electrons.com/source/net/ipv4/ip_input.c#L444http://lxr.free-electrons.com/source/ net/ipv4/ip_input.c#L494http://lxr.free-electrons.com/source/include/uapi/linux/snmp.h

もちろん、他の種類のエラーもあります。また、Linuxカーネルスタック内のパケットの通常のトラバース用のSNMPカウンター/統計もあります。これは、「netstat-s」や「cat/proc/net」を実行するときに調べることができます。/snmp」。

ラミ・ローゼン

1
Rami Rosen