用nmap扫描找出某个网段下空闲的ip脚本
Linux系统下
把下面内容保存为scan_unused.sh(注意改开头的 BASE 和 NETMASK):
#!/bin/bash set -e NET="192.168.1.0/24" BASE="192.168.1" echo "[1] 生成网段所有 IP ..." seq 1 254 | while read i; do echo "${BASE}.${i}"; done > all_ips.txt echo "[2] 使用 nmap 扫描在线主机 ..." nmap -sn -oG scan.gnmap "${NET}" echo "[3] 提取在线 IP ..." grep "Status: Up" scan.gnmap | awk '{print $2}' > live_ips.txt echo "[4] 计算空闲 IP ..." grep -vFf live_ips.txt all_ips.txt > unused_ips.txt echo "扫描完成:" echo " 在线主机: $(wc -l < live_ips.txt)" echo " 空闲 IP: $(wc -l < unused_ips.txt)" echo "结果文件: live_ips.txt unused_ips.txt"
windows下
把下面内容保存为 scan_subnet.bat(注意改开头的 BASE 和 NETMASK):
@echo off setlocal enabledelayedexpansion :: ===== 配置网段 ===== set BASE=192.168.1 set NETMASK=255.255.255.0 :: 只扫 1-254,0 和 255 通常不作为主机地址 :: 1. nmap 主机发现(grepable 输出) echo [1] 正在使用 nmap 扫描网段 ... nmap -sn -oG scan.gnmap %BASE%.0/24 :: 2. 从 scan.gnmap 中提取 Status: Up 的 IP echo [2] 提取在线 IP ... findstr "Status: Up" scan.gnmap > live_raw.txt :: 3. 从 live_raw.txt 中整理出纯 IP 列表 live_ips.txt ( for /f "tokens=2 delims= " %%a in (live_raw.txt) do ( echo %%a ) ) > live_ips.txt :: 4. 生成整个网段的 IP 列表 all_ips.txt echo [3] 生成整个网段 IP 列表 ... ( for /l %%i in (1,1,254) do ( echo %BASE%.%%i ) ) > all_ips.txt :: 5. 做差集:从 all_ips 中去掉 live_ips,得到 unused_ips.txt echo [4] 计算空闲 IP ... findstr /v /x /g:live_ips.txt all_ips.txt > unused_ips.txt echo. echo 扫描完成: echo 在线主机列表: live_ips.txt echo 全部网段 IP: all_ips.txt echo 空闲 IP 列表: unused_ips.txt

浙公网安备 33010602011771号