Awk 如何筛选多个字符串的nmap结果并输出到文件?

Awk 如何筛选多个字符串的nmap结果并输出到文件?,awk,nmap,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打开”,它将把这两行输出到一个输出文件 从nmap使用的典型输入如下所示: Interesting p

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打开”,它将把这两行输出到一个输出文件

从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,类似的方法可能会起作用:

awk '/^Interesting/ {
       domain = $(NF-1)
       ip = substr($NF, 0, length($NF) - 1)
     }
     $2 == "open" {print domain, ip}' file
其工作原理如下:

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

编辑您的问题,以显示几行可测试的示例输入和预期输出。我通过使用上面的nmap命令将输出生成一个文件raw.txt,实现了这一点。然后创建了一个名为filter.awk的新文件:BEGIN{FS=“\n”RS=“”}{print$1“,“$2“,“$3}”,然后运行:awk-f filter.awk raw.txt>newfile.txt,然后再次为“/domain.com/&&/open/”>文件对其进行过滤,这是有效的,但必须有一种方法来清理一下:毫无疑问有,如果你照我说的做,这里的人会告诉你怎么做。@Ed Morton:这个问题已经有了输入命令,nmap的输出,我想如何使用awk改变它,使输出低于输入命令。我不知道如何才能为您进一步澄清这一点,请使用nmap的-oX参数将结果导出为XML,然后解析XML.com。谢谢你的帮助