web-dev-qa-db-ja.com

tcpdumpでキープアライブパケットのみをフィルタリングする方法

ネットワーク上のトラフィックダンプを分析して、すべてのPCでTCPキープライブ機能が有効になっているかどうかを確認する必要があります。そのためにtcpdumpを使用しています。

私が知っておく必要があるのは、キープアライブパケットのみをフィルタリングする可能性があるかどうかです。

Windowsでは、wiresharkがそれを実行できることがわかりますが、コンソールモードのみのLinuxシステムでは、この種のパケットをフィルターする方法がわかりませんでした。

5
enzo1959

キープアライブプローブは、データが含まれておらず、ACKフラグがオンになっているパケットです。

tcpdump -pni $intf -v "tcp port $port and ( tcp[tcpflags] & tcp-ack != 0 and ( (ip[2:2] - ((ip[0]&0xf)<<2) ) - ((tcp[12]&0xf0)>>2) ) == 0 ) "

これは何をしますか:

  • ビット単位で、tcpフラグフィールドとtcp-ackの間で、ACKであることを確認します。
  • IPパケット長(バイト単位)-IPヘッダー長-TCPヘッダー長にデータがないことを確認する

免責事項:実際にはテストされていませんが、良い方向を示す必要があります

7
krugger

Wiresharkは、tcpdumpと同じキャプチャ構文を使用します。どちらもlibpcapで動作します。ただし、Wiresharkで見ている機能は、近隣のパケットをヒューリスティックに分析する表示フィルターだと思います。キャプチャで実行できる最善の方法は、キープアライブリクエストへの応答で1バイトまたは0バイトのACKを探すことです。これを試して;

tcpdump -vv "tcp[tcpflags] == tcp-ack and less 1"

予想されるホスト間のトラフィックを取得するかどうかを確認します。

RFC 1122 はTCPをカバーし、実装の多くをベンダーに任せます。


また、Linuxホストでtcpdumpを使用してファイルにキャプチャし、キャプチャをワークステーションに転送して分析することもできます。

3
Aaron Copley