0

我想构建一个定期使用 nmap 进行 ping 扫描的东西,以检测主机出现和断开网络。有没有一种简单的方法可以读取 Ruby 的 nmap 输出?我的偏好是避免使用 3rd 方库。

非常感谢!

4

3 回答 3

1

尝试解析 Nmap 的文本输出是错误的方法。格式在过去已经改变了很多次,而且将来肯定会改变。正确的方法是解析 Nmap 的 XML 输出,由-oX参数生成。已经有一些为此设计的 Ruby 库(Chris Gates在他的博客中介绍了这种方法),或者您可以从 XML 解析器库开始并自行开发。Nokogiri是一个非常好的 Ruby 中的 XML 解析库。

于 2012-05-20T23:58:25.330 回答
0

你可以尝试这样的事情:

require 'open3'
stdin, stdout, stderr = Open3.popen3('nmap -sP 192.168.1.0/24')

然后你可以解析 stdout 和 stderr 并使用标准 Ruby 获得任何你想要的东西。

于 2012-05-20T20:48:53.330 回答
0

已经了解到,只需在命令周围使用反引号,我就可以将输出捕获为变量:

test = nmap -sP 192.168.1.0/24 p 'test:' puts test.split("\n")

似乎工作完美。然而,正如 bonsaiviking 所指出的,研究 nmap 的 XML 功能是明智的。

于 2012-05-21T15:02:23.027 回答