![改进 bash 脚本](https://linux22.com/image/1134990/%E6%94%B9%E8%BF%9B%20bash%20%E8%84%9A%E6%9C%AC.png)
我需要改进这个脚本:
nmap -PN -p 9292 -sN 192.68.12.14 | grep "open"
我需要检查192.168.15.24
端口上的IP 连接性9292
。
如果端口开放,则打印“端口 9292 已开放”
如果端口关闭,则打印“端口 9292 已关闭”
结果将取自冰加做检查。
任何想法?
答案1
除了@DopeGhoti 使用 netcat 的正确答案之外,您还可以通过更改一些 Nmap 选项并添加一些选项来改进您的脚本。
-sN
表示“TCP NULL 扫描”,这是一种非常不寻常的原始套接字扫描模式,需要 root 权限。它还具有一个奇怪的特性,即只将端口标记为“关闭”或“未过滤”,但从不将其标记为“打开”。您可能希望使用此-sT
选项进行正常的 TCP Connect 扫描。PTR
Nmap默认会尝试执行反向名称查找 ( )。使用该-n
选项可避免这种不必要的延迟。- 不建议在脚本中使用 Nmap 的正常屏幕输出,即使对于像这样简单的脚本,因为它可能会在不同版本之间发生变化。为了获得稳定的、机器可解析的输出格式,请使用可 grep 的 (
-oG
)或者XML (-oX
)。 -PN
是一个古老的(2010 年弃用)拼写-Pn
。它跳过了主机发现阶段,因此对于您的脚本来说可能是一个好主意。
包含所有这些更改的示例:
nmap -n -Pn -sT -p 9292 -oG - | grep '/open/'
答案2
这需要以下netcat
包:
if nc -z 192.68.12.14 9292; then
echo "Port is open"
else
echo "Port is closed"
fi
nc -z
将尝试连接到指定的主机和端口;0
成功时返回退出代码,否则返回非零代码。它实际上不会向终端输出任何内容。为了获得所需的输出,我使用语句if
来测试连接测试的结果,并将echo
适当的结果输出到终端。