如何过滤多个字符串的nmap结果并输出到文件?

时间:2015-09-16 14:06:12

标签: awk nmap

2我想使用nmap获取我网络上的linux服务器主机列表,但我不确定如何根据多个字符串过滤结果。所以我使用的是:

nmap -sT -R --dns-servers 192.168.1.1,192.168.1.2 -p 22 192.168.1.0/24

给了我结果,但当然它也显示了每个具有封闭端口的IP。我如何使用awk的逻辑,这样如果它找到一个带有主机名的IP并且发现下面的行有'tcp open',它会将这两行吐出到输出文件中?

nmap中使用的典型输入如下所示:

Interesting ports on server.domain.com (192.168.1.1):
PORT   STATE SERVICE
22/tcp open  ssh

Interesting ports on server2.domain.com (192.168.1.2):
PORT   STATE SERVICE
22/tcp closed  ssh

但是这对于扫描的每一个IP都是如此,所以我试图找到一种方法来获得一个只有主机名和IP“if”的文件,它从上面的nmap命令显示为'tcp open'。基本上给你一个文件:

server.domain.com (192.168.1.1)

因此,如果SSH实际上正在侦听端口22

,我只获取服务器名称和IP

1 个答案:

答案 0 :(得分:0)

基于样本输入和发布的样本输出,这样的事情可以起作用:

awk '/^Interesting/ {
       domain = $(NF-1)
       ip = substr($NF, 0, length($NF) - 1)
     }
     $2 == "open" {print domain, ip}' file

这样的工作原理如下:

  • 如果一行以“Interesting”开头,那么倒数第二个字段将存储为域,最后一个字段(减去尾随冒号)将存储为ip。
  • 如果找到第二个标记为“打开”的行,则会打印先前找到的域和ip。