最终我希望将一些信息插入数据库。所以我试图从格式如下的东西(可能是 nmap)输出一个文件:
10.1.150.1,Up,1/3/2012,host.domain.lan
10.1.150.2,Down,1,3/2012,host2.domain.lan
我不必从 nmap 扫描中获取日期,但这会很有帮助。当我将数据插入数据库时我可以添加它。
我非常确定 nmap 可以与一些 grep、awk 和 sed foo 一起完成此操作,但这些并不是我的强项。
编辑:我愿意接受有关输出格式的建议..XML?我需要每天运行这个(给予或接受)并将结果导入 MySQL
EDIT2:我已经走到这一步了;
nmap -sn -oG - 192.168.0.50-100 | grep Host | awk '{print $2","$5","$3}'
这给了我这个:
192.168.0.75,Up,()
192.168.0.76,Up,(server01.domain.com)
192.168.0.77,Up,(server02.domain.com)
192.168.0.78,Up,(server03.domain.com)
下一个;我可以去掉括号吗?添加日期? Nmap 总是说它开始和结束的时间,但它不包括每一行......所以我无法用 awk 语句来获取它。
答案1
看一看在 Nmap 书的第 13 章“输出格式”中,它有一个部分关于“Grepable 输出”甚至一上“输出到数据库”。
答案2
如果您希望其他程序(数据库等)使用 Nmap 输出,请始终使用 XML 输出 ( -oX
)。根据您喜欢的编程语言,通常会有一个已经编写的解析器库:Nmap::Parser
对于 Perl 来说,Nmap::Parser
对于红宝石来说,恩迪夫(与 Nmap 一起提供)用于 Python。如果您确实需要使用命令管道,可以使用一些 XML 实用程序(XmlStarlet看来相当受欢迎)。
根据您的需要,您可以利用支持 Nmap XML 导入的现有项目。元分析软件,德拉迪斯, 和开放增值服务是一些非常不同的工具,支持从 Nmap 导入并存储在数据库中。
即使您坚持使用“Grepable”输出(已弃用),我也强烈建议使用真正的脚本/编程语言(Perl、Python、Ruby 等)来进行解析,特别是对于诸如放置日期之类的事情在每一行或剥离括号。涉及 Nmap 的命令管道通常最终会变成这样的怪物:
nmap -sn -oG - 192.168.0.50-100 | perl -lanE 'if(/initiated (.*?) as:/){$d=$1;$,=","}else{print@F[1,4],$d,$F[2]=~/\((.*)\)/ if/Status:/}'