nmap匹配三个端口

Nmap match three ports

我正在尝试为 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 后对所有端口执行。

欢迎任何帮助!

NSE脚本根据a rule function匹配,有四种不同类型。您正在使用 portrule,它测试主机上的 each 端口。既然你想测试主机上的 多个 端口,你应该使用 hostrule 来代替。

hostrule是在知道所有端口的状态后进行测试。您可以使用 nmap.get_ports function like nfs-ls does, or you can check individual ports using the nmap.get_port_state function like the nbstat 脚本检查所有这些端口的状态。实际上,nbstat 看起来正是您想要做的事情的一个很好的例子。