我想捕获我的计算机和 VPN 服务器之间 UDP 连接的初始握手。为此,我正在使用tcpdump
但我不明白为什么:
tcpdump dst port 1194 and "tcp[tcpflags] & (tcp-syn) != 0"
不会捕获任何东西,同时
tcpdump dst port 1194 and "(tcp-syn) != 0"
当它应该只捕获启动握手的第一个 SYN 数据包时,在连接期间捕获多个数据包。
tcp[tcpflags]
是用来做什么的?
答案1
tcp[tcpflags]
是一个变量,存储当前捕获的 TCP 数据包上的 TCP 标志(位)。tcp-syn
是一个常量,除了 TCP SYN 数据包对应的位之外,其他位置均为零。因此:tcpdump dst port 1194 and "(tcp-syn) != 0"
相当于
tcpdump dst port 1194 and 1 = 1
UDP 协议更简单并且没有这些标志 - UDP 流量中没有 SYN、ACK 等。因此,如果不检查 UDP 数据包的内容,就无法捕获真正的握手。
如果 VPN 通信确实通过 UDP 运行。那么第一条规则将不会捕获“握手”,因为它仅适用于 TCP 数据包。第二个将捕获它,但连同指向端口 1194 的所有内容 - TCP 和 UDP。