web-dev-qa-db-ja.com

Tcpdumpでackまたはsynパケットをキャプチャする方法は?

フィルタールールを使用して、ackまたはsynパケットのみをキャプチャします。どうすればよいですか?

53
larry

Tcpdumpに使用される pcapフィルター構文 は、wiresharkキャプチャフィルターでまったく同じように機能するはずです。

Tcpdumpでは、次のようなフィルターを使用します。

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

tcpdumpのマニュアルページ を確認し、tcpflagsに細心の注意を払ってください。

キャプチャと表示フィルターに関するWireshark Wikiのセクションも確認してください。残念ながら、この2種類のフィルターは、まったく異なる構文を使用しており、同じものに対して異なる名前を使用しています。

キャプチャフィルターの代わりに表示フィルターが必要な場合は、おそらくtcp.flags.ackとtcp.flags.synを組み合わせた式を作成する必要があります。私はキャプチャフィルターにかなり慣れているので、自分で解決する必要があります。

86
Zoredache

@Zoredacheの答えは素晴らしく完全ですが、その構文は、TCP SYNまたはTCP ACKフラグが設定されているパケットを含む、すべてのパケットを生成します。 alsoには他のフラグが設定されているため、厳密には単なる「TCP SYN」または「TCP ACK」パケットだけではありません。これは、ユーザー(または将来の読者)が意図したものとは異なる場合があります。たとえば、構文は、TCP SYN-ACKパケット、TCP FIN-ACKなどもキャプチャします。必要に応じてonly TCP SYNまたはTCP ACKパケット(つまり、これらのフラグセットの1つだけを設定)の場合、適切なキャプチャフィルター構文は次のとおりです。

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

同等に:

'tcp[13] == 2 or tcp[13] == 16'

乾杯!

16
JJC
tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

詳細

パケットの特定の部分に基づいてフィルタリングしたり、複数の条件をグループにまとめたりすることもできます。たとえば、前者はSYNsまたはRSTsのみを検索する場合に役立ち、後者はさらに高度なトラフィック分離に役立ちます。

UAP RSF

[ヒント:TCPフラグのアナグラム:熟練していない攻撃者が本物のセキュリティの人々を苦しめる]

あなたのメモ:...

すべての緊急(URG)パケットを表示...

tcpdump 'tcp[13] & 32 != 0'

すべてのACKNOWLEDGE(ACK)パケットを表示...

tcpdump 'tcp[13] & 16 != 0'

すべてのプッシュ(PSH)パケットを表示...

tcpdump 'tcp[13] & 8 != 0'

すべてのRESET(RST)パケットを表示...

tcpdump 'tcp[13] & 4 != 0'

すべてのSYNCHRONIZE(SYN)パケットを表示...

tcpdump 'tcp[13] & 2 != 0'

すべてのFINISH(FIN)パケットを表示...

tcpdump 'tcp[13] & 1 != 0'

すべてのSYNCHRONIZE/ACKNOWLEDGE(SYNACK)パケットを表示...

tcpdump 'tcp[13] = 18'

[注:PSHRSTSYN、およびFINフラグのみがtcpdumpのフラグフィールド出力に表示されます。 URGsとACKsは表示されますが、フラグフィールドではなく出力の他の場所に表示されます]

12
castet

上位の「シンナー」を見る台本を作りました。そのため、最初のsynパケット(3つのパケットのハンドシェイクの最初のパケット)のみを考慮します。つまり、syn = 1、ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done
9
edward

自分でSYNパケットのみを取得したかったので、次のコマンドを使用しました。

tcpdump -i eth7 'tcp[13] & 2 != 0'

これはすぐに機能します。

4
Sidharth

フィルターや引数なしで表示されるはずです。

1
Ablue