我正在尝试为nmap创建一个脚本,如果三个端口都打开,它只会执行它的操作。
最终结果是如果端口515,631和9100对tcp流量开放,脚本应该打印一条消息(首先,它应该进行os检测)。
到目前为止我的脚本:
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被击中后对所有端口执行。
任何帮助都是适当的!
答案 0 :(得分:0)
NSE脚本基于a rule function匹配,有四种不同的类型。您正在使用portrule
,用于测试主机上的每个端口。由于您要在主机上测试多个端口,因此您应该使用hostrule
。
在知道所有端口的状态后测试hostrule
。您可以使用像nmap.get_ports
这样的nfs-ls
函数来检查所有这些端口的状态,或者您可以使用nmap.get_port_state
函数检查各个端口,例如nbstat
脚本。实际上,nbstat
看起来就是你想要做的一个很好的例子。