我尝试使用此命令来查找未使用的端口.我想要做的是在一系列端口上运行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列中打印值.
标签:netcat,sed,linux 来源: https://codeday.me/bug/20191120/2043417.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。