nc ip port 卡住没有反馈,恰恰说明 TCP 连接已经建立成功了,只是因为没有数据交换,所以 hang 在了那里。
1. 两者的行为差异
telnet:连接成功后,会立即发送一些协议协商信息,并给你一个远程登录提示符,所以你能看到反馈。
nc(不带参数):连接成功后,什么都不做,只是静静地等待你输入数据。它既不发送任何协议头,也不给你任何提示符,所以看起来就像卡住了。
2. 如何验证确实通了
你现在可以用几种方法确认:
方法一:输入字符测试
在卡住的 nc 窗口里,随便输入几个字符(比如 hello)然后按回车:
如果服务端有响应,你会看到返回的信息
即使没有响应,只要字符能输入进去,说明连接是活着的
按 Ctrl + C 断开后,可以用 ss 或 netstat 验证刚才确实建立了连接
方法二:同时抓包验证(如果有权限)
在另一个终端执行:
# 在客户端抓包 tcpdump -i any host <目标IP> and port <端口>
然后重新执行 nc 命令,你会看到 TCP 三次握手完成(SYN, SYN-ACK, ACK),证明连接成功建立。
方法三:换个方式让 nc 退出
使用 -z 参数让 nc 连接测试完就退出:
nc -zv <IP> <端口>
这时你会看到明确的成功或失败信息。
-z 模式 nc -zv ip port(有提示)
1. 连接建立成功 2. nc 程序知道:用户只让我测试,不让我等着输入 3. 立即断开连接 4. 退出前打印 "succeeded!" 告诉你结果