纯 Bash 脚本可批量检测内网存活主机并生成 CSV 资产报表:通过 ping -c 1 -W 1 探测 IP,for ip in 192.168.1.{1..254} 遍历+sleep 控制节奏;ping 通后采集主机名、MAC、SSH/HTTP/HTTPS 端口状态;printf 格式化输出为带表头的 CSV,sort 排序,错误记录到 failed.log,结果按日期命名保存。

用 Shell 脚本批量检测内网存活主机并生成资产报表,核心在于:快速探测 + 准确识别 + 结构化输出。不依赖第三方工具(如 nmap),纯 Bash + 系统命令就能完成,兼顾效率和可读性。
用 ping 批量探测存活 IP(轻量可靠)
对常见内网网段(如 192.168.1.0/24),逐个 ping -c 1 -W 1 发包,用 $? 判断是否响应。避免使用 -b 或 flood 模式,防止触发安全策略。
- 用 for 循环遍历 IP(如 for ip in 192.168.1.{1..254})比 seq 更简洁
- 加 > /dev/null 2>&1 静默输出,只保留判断逻辑
- 建议加 sleep 0.01 控制发包节奏,减少丢包误判
补充关键资产信息(不止于通不通)
单纯 ping 通只是“存活”,真实资产需知道:主机名、MAC 地址、操作系统指纹(粗略)、开放常用端口(如 22/80/443)。可在 ping 通后串行采集:
- host $ip 或 nslookup $ip 获取反向 DNS 主机名(如有)
- arp -n | grep "$ip" 提取 MAC(需先触发 ARP 缓存,可先 ping 一次再查)
- timeout 2 bash -c "echo > /dev/tcp/$ip/22" && echo "SSH open" 试探端口(需启用 /dev/tcp)
格式化输出为可读报表(CSV 或 Markdown)
用 printf 对齐字段,头部写明列名,按 IP 排序输出。推荐 CSV 格式,方便 Excel 或 Python 后续处理:
- 第一行固定输出:IP,Hostname,MAC,SSH,HTTP,HTTPS,LastCheck
- 每行用逗号分隔,字段含双引号(如 "$ip","$host","$mac")防逗号干扰
- 最后用 sort -t, -k1,1V 排序,让报表更规整
加日志与异常处理(生产可用)
脚本运行中可能遇到网络抖动、权限不足或 DNS 不可达。加入基础容错:
- 开头 set -e 可选,但建议用 if [ $? -eq 0 ] 显式判断关键步骤
- 将错误 IP 记入 failed.log,成功结果写入 assets_$(date +%F).csv
- 用 trap 'echo "Interrupted"; exit 1' INT 优雅捕获 Ctrl+C

















