我正在使用正则表达式来解析NMAP输出。我想要打开相应端口的IP地址。现在我有一种非常天真的方法:
awk '/^Scanning .....................ports]/ {print substr ($2,1,15);}' results.txt
awk '/^[0-9][0-9]/ {print substr($1,1,4);}' results.txt | awk -f awkcode.awk
其中awkcode.awk包含从子字符串中提取数字的代码。 第一行打印所有向上的ips,第二行给我端口。我的问题是我希望它们相互映射。有没有办法做到这一点?即使是sed脚本也可以。
答案 0 :(得分:1)
您可能会发现使用“Grepable”输出格式更容易解析:
nmap -oG - -v -A 192.168.0.1-254
示例输出:
主持人:192.168.1.1(foo)状态:Up 主机:192.168.1.1(foo)端口:22 / open / tcp // ssh // OpenSSH 5.1p1 Debian 6ubuntu2(协议2.0)/,80 / open / tcp // http // Apache httpd 2.2.12((Ubuntu) )/,139 / open / tcp // netbios-ssn // Samba smbd 3.X(工作组:BAR)/,445 / open / tcp // netbios-ssn // Samba smbd 3.X(工作组:BAR)/ ,7100 / open / tcp // font-service // X.Org X字体服务器/忽略状态:已关闭(995)
或者,如果您有XML解析器,请使用XML输出格式:
nmap -oX - -v -A 192.168.0.1-254
示例输出:
<?xml version="1.0" ?>
<?xml-stylesheet href="file:///usr/share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 5.00 scan initiated Sun Jun 13 08:11:32 2010 as: nmap -oX - -v -A 192.168.1.1-254 -->
<nmaprun scanner="nmap" args="nmap -oX - -v -A 192.168.1.1-254" start="1276434692" startstr="Sun Jun 13 08:11:32 2010" version="5.00" xmloutputversion="1.03">
...
...
<host starttime="1276434692" endtime="1276434775"><status state="up" reason="syn-ack"/>
<address addr="192.168.1.1" addrtype="ipv4" />
<hostnames><hostname name="foo" type="PTR" /></hostnames>
<ports><extraports state="closed" count="995">
<extrareasons reason="conn-refused" count="995"/>
</extraports>
<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="ssh" product="OpenSSH" version="5.1p1 Debian 6ubuntu2" extrainfo="protocol 2.0" ostype="Linux" method="probed" conf="10" /><script id="ssh-hostkey" output="1024 1a:2b:4d:5e:6f:00:f1:e2:d3:c4:b5:a6:e2:f3:fe (DSA)
2048 fa:eb:dc:cd:be:af:a0:75:65:8a:52:7d:11:22:33:44 (RSA)" /></port>