Answers:
用于tcpdump 的pcap过滤器语法应在Wireshark捕获过滤器上以完全相同的方式工作。
使用tcpdump时,我将使用这样的过滤器。
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
查看tcpdump手册页,并密切注意tcpflags。
确保还检查Wireshark Wiki中有关捕获和显示过滤器的部分。不幸的是,两种类型的过滤器使用完全不同的语法,并且同一事物使用不同的名称。
如果要使用显示过滤器而不是捕获过滤器,则可能需要构建一个将tcp.flags.ack和tcp.flags.syn组合在一起的表达式。不过,我对捕获过滤器更为熟悉,因此您必须自己解决这个问题。
尽管@Zoredache的回答很好,而且很完整,但是请注意,该语法将产生任何设置了TCP SYN或TCP ACK标志的数据包,包括严格意义上不是纯“ TCP SYN”或“ TCP ACK”数据包的数据包,因为它们也设置了其他标志。这可能不是您(或将来的读者)想要的。例如,该语法还将捕获TCP SYN-ACK数据包,TCP FIN-ACK等。如果仅需要 TCP SYN或TCP ACK数据包(即仅设置这些标志之一),则正确的捕获过滤器语法为:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
等效地:
'tcp[13] == 2 or tcp[13] == 16'
干杯!
我编写了一个脚本,以查看最重要的“同步器”。为此,我只考虑初始的syn数据包(三个数据包握手中的第一个数据包)。也就是说,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
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
高级
您还可以根据数据包的特定部分进行过滤,以及将多个条件组合成组。例如,前者在仅查找SYN
s或RST
s 时很有用,而后者则用于更高级的流量隔离。
UAP RSF
[提示:TCP标志的字谜:不熟练的攻击者Pester Real Security Folk]
您的备忘录:...
告诉我所有紧急(URG
)数据包...
tcpdump 'tcp[13] & 32 != 0'
显示所有ACKNOWLEDGE(ACK
)数据包...
tcpdump 'tcp[13] & 16 != 0'
向我显示所有PUSH(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,但它们会显示在输出中的其他位置,而不是在flags字段中显示]
tcpdump -s SIZE
。TCP标头可以是可变长度,因此捕获-s 128
可能会获取所有可能的标头以及一点点数据。