我正在尝试获取已启动的 IP 列表,因此nmap
首先将它们全部保存在文本文件中:
nmap -v -sn 10.10.10.1-254 -oG hosts.txt
现在我想nmap
在这些 IP 上运行另一个命令,以便从文本文件中解析并获取 IP。我正在尝试以下操作,但它不起作用;该变量v
没有保存 IP 值:
#!/bin/bash
while read line; do
v=$line|grep 'Up' -B1|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
echo $v
done < hosts.txt
答案1
您的脚本似乎没有正确编写:
v=$line | grep [...]
分配变量没有输出,因此您没有将任何内容传递到grep
.
awk
指向您的文件可能会更简单hosts.txt
:
$ nmap -v -sn 10.10.10.1/24 -oG hosts.txt > /dev/null 2>&1
$ awk '$NF=="Up" { print $2 }' hosts.txt
给定创建的文件的格式nmap
(请原谅不同的 IP 范围;我显然位于不同的网络上,但该示例仍然有效):
$ head hosts.txt
# Nmap 7.60 scan initiated Fri May 11 10:14:28 2018 as: nmap -v -sn -oG hosts.txt 172.28.9.67/24
# Ports scanned: TCP(0;) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 172.28.9.0 (hostname1.internal) Status: Up
Host: 172.28.9.1 (hostname2.internal) Status: Up
如果我们只对显示的主机感兴趣Status: Up
,那么神奇的词就是线路上的最后一个。因此,我们通常awk
只查看最后一个字段等于 的那些行Up
,并打印第二个字段(即:IP 地址)。