0

我有很多文件命名192.168.203.txt为输出

sudo nmap -O --top-ports 192.168.203.* >>192.168.203.txt 

输出如下所示:


Nmap scan report for 192.168.203.29
Host is up (0.00067s latency).
PORT     STATE    SERVICE
21/tcp   closed   ftp
22/tcp   closed   ssh
23/tcp   closed   telnet
25/tcp   closed   smtp
80/tcp   open     http
110/tcp  closed   pop3
139/tcp  filtered netbios-ssn
443/tcp  closed   https
445/tcp  filtered microsoft-ds
3389/tcp filtered ms-wbt-server
Device type: general purpose
Running: Microsoft Windows 2008|7
OS CPE: cpe:/o:microsoft:windows_server_2008::sp2 cpe:/o:microsoft:windows_7
OS details: Microsoft Windows Server 2008 SP2, Microsoft Windows 7 or Windows Server 2008 SP1
Network Distance: 6 hops

我只想192.168.203.29httporssh或其他端口 单独 grep IP open。也许我会将所有结果通过管道IP传输到一个名为http_open_ip.txt.

我已经ftp用命令尝试了 grep:

cat *.txt|grep -B 3 "ftp"|grep -B3 "open"|grep "192.168."|awk '{print $5}'|sort -t . -k 3,3n -k  4,4n> ftp_open_ip.txt

因此,我得到了一个文件ftp_open_ip.txt。但我发现此命令不适用于其他关键字,例如ssh stmp. 我应该怎么办 ?

4

2 回答 2

2

我不太清楚你想要什么。也许,您想查看所有文件以及所有将在一个文件中打开 http 端口、在另一个文件中打开 ssh 端口的 IP。因此,相同的 IP 可能存在于多个文件中。假设,下面是一个awk解决方案

awk 'BEGIN{http_open="http_open";ssh_open="ssh_open";ftp_open="ftp_open"}
  /Nmap scan report for/{ip=$5}
  /ftp/ && /open/{print "ftp open for " ip >> ftp_open}
  /ssh/ && /open/{print "ssh open for " ip >> ssh_open }
  /http/ && /open/{print "http open for " ip >> http_open}
  ' <filename>

它假定该文件包含与您的示例中显示的顺序相同的数据。所以Nmap scan report for线路在第 5 个字段中有 IP。在那之后,剩下的就很简单了。如果 ftp、ssh、http 等与open状态一起被发现,我们将输出重定向到相应的文件中。

于 2013-05-19T16:46:24.113 回答
0

除了所有这些具有挑战性的文本处理,您应该使用 Nmap 自己的功能,使这种输出处理更容易。首先,Nmap 提供了多种输出格式,以及输出到文件的选项。从这个命令开始:

sudo nmap -oA my-scan-%y%m%d -O --top-ports 192.168.203.0/24

-oA my-scan-%y%m%d选项会将扫描的输出保存在 3 个不同的文件中:

$ ls
my-scan-20130520.gnmap   my-scan-20130520.nmap   my-scan-20130520.xml

对于快速查询,.gnmap文件将最容易与awkor一起使用grep,但它没有包含在普通 (.nmap) 或XML 格式中的所有有用信息。如果您打算使这个脚本自动化,或以任何方式扩展它,最好的办法是使用 XML 输出。

这里有几个命令可以用这些输出格式做你想做的事:

awk '/\/open\/tcp\/\/http\//{print $2}' my-scan-*.gnmap > http_open_ip.txt

xmlstarlet sel -t -m "//port[@protocol='tcp' and service/@name='ssh' and state/@state='open']/ancestor::host/address[@addrtype='ipv4']" -v '@addr' -n my-scan-*.xml > ssh_open_ip.txt
于 2013-05-20T14:59:51.520 回答