一个优秀的命令只显示那些正在响应的 IP 地址
nmap -n -sn 192.168.1.0/24 -oG - | awk '/Up$/{print $2}'
浏览所有这些可能会很痛苦,找到一些没有响应的(如果想要分配免费 IP)。是否有一行行只显示那些没有响应的地址?
答案1
nmap
有一个详细选项-v
:
详细程度和调试选项
-v
(增加详细级别),-vlevel
(设置详细级别)增加详细级别,使 Nmap 打印有关正在进行的扫描的更多信息。
它将显示所有已扫描的主机,而不仅仅是那些应答的主机,并显示那些未应答的主机的状态Down
。因此,只需使用结果过滤Down
即可,而不是Up
:
nmap -n -sn -v 192.168.1.0/24 -oG - | awk '/Down$/{print $2}'
应删除结果的第一个和最后一个元素,因为这些是网络(此处为 192.168.1.0)和广播地址(192.168.1.255)通常不可用于系统。由于不能保证顺序,因此还需要版本排序:
nmap -n -sn -v 192.168.1.0/24 -oG - | grep '^Host:' | sort -k 2 -V | tail -n +2 | head -n -1 | awk '/Down$/{print $2}'
注意:nmap
有一个 XML 输出(使用),在脚本中与或-oX -
等工具一起使用可能更可靠。唉,它不像 JSON 那样易于使用该工具,所以我没有尝试使用这种格式。xmlstarlet
xmllint
jq
答案2
为什么要使用 nmap 呢?我会这样做:
for ((i=0;i<255;i++)); do ping -W 1 -c 1 192.168.1.${i} >/dev/null 2>&1 || echo "192.168.1.${i} is available" ; done
注意:
-W 1
就是设置超时时间为1秒-c 1
就是退出前只发送一个 ICMP Echo Request。