改进 bash 脚本

改进 bash 脚本

我需要改进这个脚本:

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 扫描。
  • PTRNmap默认会尝试执行反向名称查找 ( )。使用该-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适当的结果输出到终端。

相关内容