我需要使用tcpdump过滤掉所有的SSL数据包。我知道只有第一个数据包可以被识别为SSL数据包。是否可能匹配第一个数据包,然后过滤掉其余的SSL数据流?
我需要使用tcpdump过滤掉所有的SSL数据包。我知道只有第一个数据包可以被识别为SSL数据包。是否可能匹配第一个数据包,然后过滤掉其余的SSL数据流?
可以的。您可以按照以下命令过滤SSL
流量的第一个数据包:
方法1
[root@arif]# tcpdump -i eth0 src host 192.168.0.2 and dst host 40.113.200.201 and dst port 443 -c 1
在这里,
-i
:用于指定接口src host
:是您本地主机的IP地址dst host
:是您目标主机的IP地址dst port
:是SSL
服务提供的目标端口。您可以根据自己的配置更改默认(443)端口。-c
:用于在接收到指定数量的数据包后退出tcpdump
。-c
标志是过滤的主要组成部分,因为该标志告诉tcpdump
在特定数据包计数后退出。在这里,我使用了1
来捕获第一个数据包后退出tcpdump
。
方法2
上述解决方案仅在每次启动tcpdump
时才起作用。如果您想过滤每个SSL
流的第一个数据包,则请按照以下命令操作:
[root@arif]# tcpdump -li eth0 src host 192.168.0.2 and dst host 40.113.200.201 and port 443 and tcp[13] == 2
其中,
l
: "使标准输出行缓冲。如果您想在捕获数据时查看数据,则此选项非常有用。" 这将帮助您使用 grep/tee/awk
命令来处理输出。
src
host
dst
host
: 如果您不想指定源和目的地 IP,则可以忽略这些过滤器。
tcp[13] == 2
在 TCP
报头的第 13
个八位字节中用于设置标志。要设置 SYN
位,使用二进制组合 0 0 0 0 0 0 1 0
(请参阅下面的图表),其十进制值为 2
。因此,这将帮助您仅过滤出 SSL
流的第一个数据包,即 SYN
数据包。
|C|E|U|A|P|R|S|F|
|---------------|
|0 0 0 0 0 0 1 0|
|---------------|
所以上述配置应该适用于大多数情况。