语境 : 我想用 nc 命令测试 UDP 端口
会发生什么 :
nc 命令在输出中不返回任何内容,当我输入时返回 0echo $?
哪个命令:
nc -vzu <ip> <port>
echo $?
问题是什么 :
我想知道我是否可以相信结果echo $?
版本 :
- netcat :0.7.1-5.ph3.x86_64(在 vCenter 上)。
- tcpdump-uw:版本 4.9.1-PRE-GIT_2017_09_22
我的想法 :
我知道UDP不验证数据包。
我已经在目标服务器上尝试过,但我什么也没收到echo "something" | nc -vu <ip> <port>
。tcpdump -i vmk0 -en udp
我认为 UDP 数据包发送成功,但从未到达目的地。
你怎么认为 ?
答案1
不同的nc
版本或实现可能会显示不同的行为。您将需要测试特定命令的特定行为,nc
以便理解它并确定是否可以信任结果。
例如,在我的nc
版本中,当我尝试连接到某个开放的 UDP 端口时,它会写入:
$ nc -vzu <ip> <port>; echo exit status is: $?
Connection to <ip> <port> port [udp/*] succeeded!
exit status is: 0
并返回退出状态0。
但是当我尝试连接到没有任何东西监听的端口时,它只返回退出状态1。
$ nc -vzu <ip> <port>; echo exit status is: $?
exit status is: 1
为了确定您是否可以信任特定的退出状态nc
命令的退出状态,请尝试连接到关闭的 UDP 端口。请注意,有效的 UDP 端口范围为4096-65535。
在你的情况,正如您所报告的,当您尝试连接关闭UDP端口在有效范围内,您的nc
命令返回退出状态0(成功),这意味着您不能信任您的特定版本/实现的退出状态nc
。