Linuxネットワークスタックでのパケット追跡

Linuxネットワークスタックでのパケット追跡

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

私が直面している問題は次のとおりです。複数のインターフェイス、ブリッジ、複数のルールを持つファイアウォール、カスタムテーブルを使用するいくつかの高度なルーティングを備えたルーターとして機能するコンピュータがあります。一部の受信パケット応答はローカルプロセスに転送されず(tcpdumpを使用して確認しても)、ルーティング、ファイアウォール、またはその他の理由で失われたかどうかを確認することは困難です。

私は「abcdからインターフェイスに入ってくるパケットを追跡することができます」この問題を解決するのに役立ついくつかのツールを探しています。 straceに似ていますが、パケット用です。

そんなことがありますか?

答え1

場合によっては、カーネルがユーザースペースにエクスポートした統計/SNMPカウンタを調べて、Linuxカーネルスタックのパケット通過に関する情報を取得することがあります。たとえば、「netstat -s」を介して(または読みやすくない「cat /proc/net/snmp」を介して)。たとえば、無効なIPv4ヘッダーによっていくつかのエラーが発生すると、InHdrErrorsが増加し、「cat /proc/net/snmp」はこのエラーが発生したことを示します。 「cat /proc/net/snmp」の実行(4回目の呼び出し)を参照してください。 「InHdrErrors」で取得した列 IP): DefaultTTL InReceives InHdrErrors InAddrErrors 渡し

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

望むより: http://lxr.free-electrons.com/source/net/ipv4/ip_input.c#L444 http://lxr.free-electrons.com/source/net/ipv4/ip_input.c#L494 http://lxr.free-electrons.com/source/include/uapi/linux/snmp.h

もちろん、他の種類のエラーもあり、Linuxカーネルスタックには一般的なパケットパススルーのSNMPカウンタ/統計があります。これは、 "netstat -s"および/または "cat /proc/net/snmpを実行するとナビゲートできます。"

ラミーローゼン

関連情報