我尝试使用此命令来查找未使用的端口.我想要做的是在一系列端口上运行netcat,找到未运行服务的端口,grep输出这些行的第一行,然后使用sed仅输出端口号.
nc -z <my url> 5000-5010 | grep -m 1 succeeded | sed 's/[^0-9]//g'
但是,当我尝试使用返回的端口启动服务时,会收到一条消息,指出该端口当前正在使用中.
我发现netcat成功意味着该端口上正在运行服务,但是当我尝试这样做时
nc -zv <my url> 5000-5010 | grep -m 1 failed | sed 's/[^0-9]//g'
即使输出的大多数行都包含失败字样,我也一无所获.
浏览手册页后发现,netcat -z仅返回成功结果的输出,尽管为什么在终端窗口上逐行显示失败的连接仍然不可行.
如何使用netcat查看连接失败的第一个端口?
解决方法:
nc -v命令根据标准错误而不是标准输出写入失败/成功的消息.您可以使用2& 1将stderr重定向到stdout.
nc -zv <my url> 5000-5010 2>&1 | grep -m 1 failed
获得失败的电话.
查看http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/
顺便说一句,我建议您使用awk从输出行获取端口号:
nc -zv <my url> 5000-5010 2>&1 | grep -m 1 failed | awk '{print $6}'
在输出行的第6列中打印值.