フィルタールールを使用して、ackまたはsynパケットのみをキャプチャします。どうすればよいですか?
Tcpdumpに使用される pcapフィルター構文 は、wiresharkキャプチャフィルターでまったく同じように機能するはずです。
Tcpdumpでは、次のようなフィルターを使用します。
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
tcpdumpのマニュアルページ を確認し、tcpflagsに細心の注意を払ってください。
キャプチャと表示フィルターに関するWireshark Wikiのセクションも確認してください。残念ながら、この2種類のフィルターは、まったく異なる構文を使用しており、同じものに対して異なる名前を使用しています。
キャプチャフィルターの代わりに表示フィルターが必要な場合は、おそらくtcp.flags.ackとtcp.flags.synを組み合わせた式を作成する必要があります。私はキャプチャフィルターにかなり慣れているので、自分で解決する必要があります。
@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'
乾杯!
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
詳細
パケットの特定の部分に基づいてフィルタリングしたり、複数の条件をグループにまとめたりすることもできます。たとえば、前者はSYN
sまたはRST
sのみを検索する場合に役立ち、後者はさらに高度なトラフィック分離に役立ちます。
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'
[注:PSH
、RST
、SYN
、およびFIN
フラグのみがtcpdumpのフラグフィールド出力に表示されます。 URG
sとACK
sは表示されますが、フラグフィールドではなく出力の他の場所に表示されます]
上位の「シンナー」を見る台本を作りました。そのため、最初の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
自分でSYNパケットのみを取得したかったので、次のコマンドを使用しました。
tcpdump -i eth7 'tcp[13] & 2 != 0'
これはすぐに機能します。
フィルターや引数なしで表示されるはずです。