iam*_*00t 3 shell-script text-processing nmap
从终端中的命令中提取结果
nmap我local network使用以下命令对我的进行了扫描:
nmap -sP 192.168.1.*
Run Code Online (Sandbox Code Playgroud)
当我运行该命令时,我得到的内容与此类似:
Nmap scan report for macbook.att.net (192.168.1.21)
Host is up (0.019s latency).
MAC Address: 71:DF:4B:44:80:F1 (Apple)
Nmap scan report for lenovo.att.net (192.168.1.15)
Host is up (0.045s latency).
MAC Address: 21:EA:7D:84:08:A1 (Liteon Technology)
Run Code Online (Sandbox Code Playgroud)
如何运行该命令,但只输出如下结果:
1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的
到目前为止,我已尝试使用grep,但效果不如我预期。我只需要知道如何从 nmap 扫描中获取结果并将其组织在一个列表中,其中包含“( )”和 IP 地址之间的内容。
您可以尝试使用“awk”命令,如下所示,
nmap -sP 192.168.1.* | awk -F"[)(]" '/^Nmap/{Nmap=$(NF-1); C+=1} /^MAC Address/{print C"."$(NF-1) "("Nmap")" }'
Run Code Online (Sandbox Code Playgroud)
输出,
1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
Run Code Online (Sandbox Code Playgroud)
解释:
随着 awk 的-F打开,你告诉 'awk' 你的输入是用(和/或分隔的),正如我们在分隔符组中指定的那样-F"[)(]"
的'/.../{...} /.../{...}',它的awk的脚本主体,这在你的情况下,它只会先运行/^Nmap/{Nmap=$(NF-1); C+=1},或第二/^MAC Address/{print C"."$(NF-1) "("Nmap")" }或没有,我们只指定了如果运行这两个条件部分的输入字符串或行启动(^这是起跑线锚和指向的开始一条线/记录)Nmap(或在第二部分MAC Address)模式。找到的任何匹配项都将运行其大括号内的代码{...}
第一部分在做什么?
如上所述,如果找到匹配,则将倒数第二个字段(NF指向最后一个字段(或其根据定义的 delim$NF及其值在记录中返回的字段数)值放入变量Nmapwith 中$(NF-1);这C+=1是一个计数器标志变量,我们用于在输出中使用 ID 列表在最后计算匹配数
第二部分在做什么?
与上面相同,但是当找到匹配时^MAC Address,然后首先打印计数器C值,打印一个点.,然后打印匹配行的倒数第二个字段,最后打印 paranteces 内的“Nmap”值,这是前一个匹配行的 IP