Nmap匹配三个端口

我正在尝试为nmap编写一个脚本,只有在三个端口打开时才执行其操作。

最终结果应该是如果tcp流量的端口515、631和9100都打开,脚本应该打印一条消息(最初只是打印,稍后应该进行操作系统检测)。

到目前为止,我的脚本是这样的:

function portrule(host,port)
    return port.state == 'open' and
    port.protocol == 'tcp' and
    515 <= port.number and
    631 <= port.number and
    9100 <= port.number

end

action = function(host, port)
    return "hello"
end

但是,这将在命中9100端口后对所有端口执行。

任何帮助都将受到赞赏!

点赞
用户1183387
用户1183387

NSE脚本基于规则函数进行匹配,有四种不同类型。您正在使用portrule,它测试主机上的每个端口。由于您想测试主机上的多个端口,因此应该使用hostrule

在所有端口的状态已知之后,将测试hostrule。您可以使用nmap.get_ports函数(如nfs-ls)来检查所有这些端口的状态,或者可以使用nmap.get_port_state函数(如nbstat脚本)来检查单个端口的状态。实际上,nbstat看起来就是您想要做的事情的一个很好的例子。

2018-01-24 18:21:42