0

我正在使用 nmap 对网络进行扫描。

结果将如下:

Nmap scan report for 30.142.41.52
Host is up.

PORT     STATE    SERVICE
8080/tcp open http-proxy

Nmap scan report for 51.136.230.94
Host is up.

PORT     STATE    SERVICE
8080/tcp filtered http-proxy

Nmap scan report for 58.188.208.42
Host is up.

PORT     STATE    SERVICE
8080/tcp filtered http-proxy

我只是想知道如何使用 grep 或 awk,仅保存状态“打开”结果并将其保存在文本文件中?

我尝试过类似...

awk '{print $5}' | sort -n > IPs

但它只保存IP,那么如何在awk中使用正则表达式来保存具有OPEN状态的IP?

提前谢谢你,问候。//特丽莎

4

2 回答 2

1
awk '/^Nmap/{ip=$5}; / open /{print ip}' file

或者

awk '$1=="Nmap"{ip=$5}; $2=="open"{print ip}' file

输出:

30.142.41.52
于 2018-05-03T19:35:59.487 回答
0

使用 awk,您可以使用您选择的字符串设置记录分隔符 (RS),字段分隔符 (FS) 也是如此:

awk -F"\n" -v RS='Nmap scan report for ' '$5~/ open /{print $1}'

这样,awk 不是逐行工作,而是逐块工作(从每个 'Nmap scan report for ' 直到下一个);并且字段分隔符是换行符(这意味着第一个字段是 IP,第五个字段是 line 8080/tcp open http-proxy)。

请注意,如果您使用 gawk,您可以将每个 IP 存储在一个数组中并使用asort函数而不是将结果通过管道传输到sort.

于 2018-05-03T18:54:07.007 回答