如何在输出文件中包含来自 Nmap 脚本的注释

How to include comments from Nmap script in the output file

可能有更好的方法来做到这一点,但我有一个名为“list.txt”的输入文件,其中包含我的 Nmap 扫描的 IP 地址,如下所示:

192.168.1.1   #Router
192.168.1.120 #PC
192.168.1.52  #Phone

然后我使用 Nmap 扫描并输出到文件:

nmap -iL list.txt >> output.txt

此外,我还使用 sed 使“output.txt”看起来像这样:

Host: 192.168.1.1       Status: Up
Host: 192.168.1.120     Status: Down
Host: 192.168.1.52      Status: Up

我想包含输入“list.txt”文件中的注释,但找不到实现此操作的方法。理想的“output.txt”应该是这样的:

Host: 192.168.1.1       Status: Up    #Router
Host: 192.168.1.120     Status: Down  #PC
Host: 192.168.1.52      Status: Up    #Phone

有没有办法将“list.txt”中的评论包含在“output.txt”中?

在 shell 循环中读取文件,以便您可以获取注释并将其写入输出文件。

while read -r ip comment; do
    result=$(nmap "$ip")
    printf '%36s  %s\n', "$result" "$comment"
done < list.txt > output.txt

一个想法使用 join:

$ join -1 1 -2 2 -o2.1,2.2,2.3,2.4,1.2 list.txt output.txt
Host: 192.168.1.1 Status: Up #Router
Host: 192.168.1.120 Status: Down #PC
Host: 192.168.1.52 Status: Up #Phone

重新格式化为 'pretty' -t可用:

$ join -1 1 -2 2 -o2.1,2.2,2.3,2.4,1.2 list.txt output.txt | column -t
Host:  192.168.1.1    Status:  Up    #Router
Host:  192.168.1.120  Status:  Down  #PC
Host:  192.168.1.52   Status:  Up    #Phone

注意:此解决方案假定两个文件都已按 IP 排序;否则文件需要预先排序,例如:

join -1 1 -2 2 -o2.1,2.2,2.3,2.4,1.2 <(sort list.txt) <(sort -k2,2 output.txt) [ | column -t ]

另一种选择是 运行 awk 原始文件和新的 output.txt 文件:

awk 'NR==FNR { ip[]=;next } { printf "%s\t%s\n",[=10=],ip[] }' list.txt output.txt > finaloutput.txt

处理第一个 (NR==FNR) 并创建一个名为 IP 的数组,其中 IP 地址(第一个 space 分隔字段)作为键,注释为值。然后在处理第二个文件(output.txt)时,打印该行,加上从 ip 数组中获取的 IP 的注释。