我尝试使用此命令来查找未使用的端口.我想要做的是在一系列端口上运行netcat,找到未运行服务的端口,grep输出这些行的第一行,然后使用sed仅输出端口号.

nc -z 5000-5010 | grep -m 1 succeeded | sed 's/[^0-9]//g'

但是,当我尝试使用返回的端口启动服务时,会收到一条消息,指出该端口当前正在使用中.

我发现netcat成功意味着该端口上正在运行服务,但是当我尝试这样做时

nc -zv 5000-5010 | grep -m 1 failed | sed 's/[^0-9]//g'

即使输出的大多数行都包含失败字样,我也一无所获.

浏览手册页后发现,netcat -z仅返回成功结果的输出,尽管为什么在终端窗口上逐行显示失败的连接仍然不可行.

如何使用netcat查看连接失败的第一个端口?

解决方法:

nc -v命令根据标准错误而不是标准输出写入失败/成功的消息.您可以使用2& 1将stderr重定向到stdout.

nc -zv 5000-5010 2>&1 | grep -m 1 failed

获得失败的电话.

顺便说一句,我建议您使用awk从输出行获取端口号:

nc -zv 5000-5010 2>&1 | grep -m 1 failed | awk '{print $6}'

在输出行的第6列中打印值.

标签:netcat,sed,linux

来源: https://codeday.me/bug/20191120/2043417.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐