解析(可伪造的)nmap输出以使用awk之类的文本工具打印IP \ t [所有打开的端口]的列表


4

我想找到一种方法,为发现至少有一个开放端口的每个IP地址打印,打印该IP地址,然后列出由逗号分隔的开放端口列表。端口和IP地址应使用制表符分隔符分隔。

我可以通过丑陋的方式来做到这一点,方法是仅对IP地址进行grep,将其写入文件,然后使用IP地址结果文件作为输入文件再次对nmap文件进行grep,然后使用cut和sed修剪打开的端口,将其写入文件,然后加入两个文件。这是一个丑陋的过程,在边缘情况下无法可靠地工作。

有没有一种简单的方法可以用awk做到这一点?我想我需要在awk中有一个函数来查找所有打开的端口并返回它们,以便可以将它们与IP地址一起打印,但是我还没有找到如何做的方法。

源数据示例:

Host: 10.0.0.101 ()Ports: 21/closed/tcp//ftp///, 22/closed/tcp//ssh///, 23/closed/tcp//telnet///, 25/closed/tcp//smtp///, 53/closed/tcp//domain///, 110/closed/tcp//pop3///, 139/open/tcp//netbios-ssn///, 143/closed/tcp//imap///, 445/open/tcp//microsoft-ds///, 3389/closed/tcp//ms-wbt-server///

预期输出数据:

10.0.0.101    139,445

我不知道标题编辑会增加清晰度,因为可抓握的nmap输出是唯一适合此类文本处理的输出文件。也许可以在问题中提到这一点。
杰森·基德

“这种类型的文本处理”称为“解析”,这就是为什么我在标题中添加单词“ Parse”以使其更易于搜索。
Alex Stragies

Answers:


2

这个awk程序应该做到这一点:

$ echo "Host: 10.0.0.101 ()Ports: 21/closed/tcp//ftp///, 22/closed/tcp//ssh///, 23/closed/tcp//telnet///, 25/closed/tcp//smtp///, 53/closed/tcp//domain///, 110/closed/tcp//pop3///, 139/open/tcp//netbios-ssn///, 143/closed/tcp//imap///, 445/open/tcp//microsoft-ds///, 3389/closed/tcp//ms-wbt-server///" |
awk '{printf "%s\t", $2;
      for (i=4;i<=NF;i++) {
        split($i,a,"/");
        if (a[2]=="open") printf ",%s",a[1];}
      print ""}' |
sed -e 's/,//'

10.0.0.101  139,445

在假设您编辑问题之前,我假设您的输出将来自shell nmap,所以我准备了以下答案:

$ nmap -sT 127.0.0.1-3 |
  awk '/^Nmap scan report/{cHost=$5;}
       /open/ { split($1,a,"/"); result[cHost][a[1]]=""}
       END {
       for (i in result) {
         printf i;
         for (j in result[i])
           printf ",%s", j ;
         print ""} }' |
  sed -e 's/,/\t/'   

localhost   445,25,139,631,22,80
127.0.0.2   445,139,22,80
127.0.0.3   445,139,22,80

如果您需要解释,请发表评论。如果可以帮助消除尾随的sed呼叫,或者可以增强任何调用,请进行编辑。


第二个片段给出awk: line 3: syntax error at or near [ awk: line 11: syntax error at or near [
Suncatcher's

@Suncatcher:我只是在古老的Debian awk上再次尝试过,并且有效。问题一定就在你身上。
Alex Stragies

不,它在方括号中给出错误。我的nmap版本是7.01,看来它们更改了输出格式。无论如何,我做了更简洁的解析器
Suncatcher '07
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.