我有一个包含大量日志的大型 nmap 扫描。我正在尝试将其变成仅 ip 的列表。
当我运行命令时,我收到如下反馈:
Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2017-03-17 21:27 EDT
Nmap scan report for 10.10.1.22
Host is up (0.13s latency).
PORT STATE SERVICE
25/tcp open smtp
MAC Address: 00:50:56:89:7C:D5 (VMware)
Nmap scan report for 10.0.1.72
Host is up (0.22s latency).
PORT STATE SERVICE
25/tcp open smtp
MAC Address: 00:50:56:89:55:06 (VMware)
我试图使用以下命令仅检索 IP 列表:
nmap -n -p 25 10.11.1.1-254 --open | grep '\d{1,3}\.\d{1,3}\.\d\.\d{1,3}'
我还尝试过 awk 匹配:
nmap -n -p 25 10.11.1.1-254 --open | awk '/\d{1,3}\.\d{1,3}\.\d\.\d{1,3}/ { print $0 } '
尽管当我删除管道右侧的所有内容时能够看到输出,并且还能够使用暂存器中的正则表达式正确过滤 IP,但都没有返回任何结果。
我缺少什么知识?
答案1
对于此类事情,您首先要使用 Nmap 的正确输出格式。 Nmap的Grepable 输出选项( -oG
) 以易于解析的格式生成输出,该格式在版本之间保持一致,这与“人类可读”的正常输出不同。以下是获取打开端口 25 的所有系统列表的方法:
nmap -p 25 --open 10.11.1.1-254 -oG - | awk '/^Host/{print $2}'
Nmap 将产生如下一行:
Host: 64.13.134.52 (scanme.nmap.org) Ports: 25/open/tcp//smtp///
awk 命令将根据“Host”行开头进行匹配,并打印第二个字段(IP 地址)。
答案2
\d
是一个与 perl 兼容的正则表达式 (PRCE) 扩展:您的版本grep
可能-P
通过选项支持这个
grep -P '\d{1,3}\.\d{1,3}\.\d\.\d{1,3}'
否则你可以使用[0-9]
十进制数字;但请注意,大括号在基本正则表达式中是文字,因此您要么需要扩展模式-E
,要么必须转义它们
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]\.[0-9]{1,3}'
或者
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\.[0-9]\{1,3\}'