我有许多名为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.29
或http
或其他端口ssh
一样使用open
知识产权。也许我会将所有结果IP
传递到名为http_open_ip.txt
的文件中。
我已尝试使用命令grep ftp
:
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
等其他关键字。我该怎么办 ?
答案 0 :(得分:2)
我不清楚你想要什么。也许,你想要查看所有文件以及所有那些将在一个文件中打开http端口的IP,在另一个文件中打开ssh端口。因此,多个文件中可能存在相同的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
状态,我们会将输出重定向到相应的文件中。
答案 1 :(得分:0)
而不是所有这些具有挑战性的文本处理,您应该使用Nmap自己的功能,使这种输出处理更容易。首先,Nmap提供了许多output formats和输出到文件的选项。从这个命令开始:
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文件最容易与awk
或grep
一起使用,但它没有正常中包含的所有有用信息( .nmap)或XML formats。如果您打算使此脚本自动化,或以任何方式扩展它,最好的办法是使用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