有没有办法使用带有常见 Linux 工具的 bash 命令(轻松)创建 TCP 半开连接?
我想使用这种机制来监控远程服务器的可用性。我知道它也用于 TCP 负载平衡器中的此类监控。
我希望看到的 TCP 消息是SYN->SYN-ACK<-RST
。FinalRST
通过保持半开套接字处于活动状态来确保 TCP 套接字不会损害服务器。
答案1
nping
中的工具nmap
可用于此类用例。它发送 SYN,等待 SYN-ACK,然后发送 RST。它需要访问原始套接字,只有具备CAP_NET_RAW
权限才能访问。通常只有 root 用户才具有此类权限。
$ sudo nping --tcp 1.1.1.1 -p 443 -c 1
TCP 转储验证仅存在 3 个 TCP 数据包。
$ sudo ngrep -eqxtd en0 '.' 'host 1.1.1.1'
interface: en0 (192.168.2.0/255.255.255.0)
filter: ( host 1.1.1.1 ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .
T 2020/10/02 10:27:06.261689 192.168.2.26:34769 -> 1.1.1.1:443 [S] #1
T 2020/10/02 10:27:06.269662 1.1.1.1:443 -> 192.168.2.26:34769 [AS] #2
00 00 ..
T 2020/10/02 10:27:06.269739 192.168.2.26:34769 -> 1.1.1.1:443 [R] #3