shell脚本快速检查192.168.1网段ip是否在用

打印 上一主题 下一主题

主题 937|帖子 937|积分 2811

检查 192.168.1 网段中哪些 IP 地址正在使用,可以使用 Shell 脚本结合 ping 命令来并发扫描整个网段。以下是实现这一功能的完整脚本:
脚本:检查 192.168.1 网段 IP 是否在用
  1. #!/bin/bash
  2. # 定义网段
  3. NETWORK="192.168.1"
  4. # 定义超时时间(秒)
  5. TIMEOUT=1
  6. # 定义并行扫描的 IP 数量
  7. PARALLEL=20
  8. # 日志函数
  9. function log_info() {
  10.   echo -e "[INFO] $1"
  11. }
  12. function log_success() {
  13.   echo -e "\033[32m[SUCCESS] $1\033[0m"
  14. }
  15. function log_error() {
  16.   echo -e "\033[31m[ERROR] $1\033[0m"
  17. }
  18. # 检查单个 IP 是否在线
  19. function check_ip() {
  20.   local ip=$1
  21.   if ping -c 1 -W "$TIMEOUT" "$ip" &> /dev/null; then
  22.     log_success "IP $ip is online"
  23.   else
  24.     log_error "IP $ip is offline"
  25.   fi
  26. }
  27. # 主函数
  28. function main() {
  29.   log_info "Scanning network $NETWORK.0/24..."
  30.   # 使用循环遍历 1-254 的 IP 地址
  31.   for i in {1..254}; do
  32.     ip="$NETWORK.$i"
  33.     check_ip "$ip" &
  34.     # 控制并行数量
  35.     if [[ $(jobs -r -p | wc -l) -ge $PARALLEL ]]; then
  36.       wait -n
  37.     fi
  38.   done
  39.   # 等待所有后台任务完成
  40.   wait
  41. }
  42. # 执行主函数
  43. main
复制代码
脚本说明


  • 网段定义

    • NETWORK="192.168.1":定义要扫描的网段。

  • 超时时间

    • TIMEOUT=1:设置 ping 命令的超时时间为 1 秒。

  • 并行扫描

    • PARALLEL=20:设置同时扫描的 IP 数量为 20 个,以提高扫描服从。

  • 日志输出

    • 使用不同颜色的日志区分在线和离线的 IP 地址:

      • 绿色:IP 在线。
      • 红色:IP 离线。


  • check_ip 函数

    • 使用 ping 命令检查单个 IP 是否在线。
    • 如果 ping 成功,则 IP 在线;否则,IP 离线。

  • 主函数 main

    • 遍历 192.168.1.1 到 192.168.1.254 的所有 IP 地址。
    • 使用 & 将 check_ip 放入后台实行,实现并行扫描。
    • 使用 jobs 和 wait 控制并行使命数量。

使用方法


  • 将脚本保存为 scan_network.sh。
  • 赋予实行权限:
    1. chmod +x scan_network.sh
    复制代码
  • 运行脚本:
    1. ./scan_network.sh
    复制代码
示例输出
  1. [INFO] Scanning network 192.168.1.0/24...
  2. [SUCCESS] IP 192.168.1.1 is online
  3. [ERROR] IP 192.168.1.2 is offline
  4. [SUCCESS] IP 192.168.1.3 is online
  5. [ERROR] IP 192.168.1.4 is offline
  6. ...
复制代码
优化建议


  • 增加 IP 范围参数
    可以通过命令行参数指定扫描的 IP 范围,比方:
    1. ./scan_network.sh 192.168.1.10 192.168.1.20
    复制代码
    修改脚本:
    1. START_IP=${1:-1}
    2. END_IP=${2:-254}
    3. for i in $(seq "$START_IP" "$END_IP"); do
    4.   ip="$NETWORK.$i"
    5.   check_ip "$ip" &
    6. done
    复制代码
  • 保存效果到文件
    可以将扫描效果保存到文件中,便于后续分析:
    1. LOG_FILE="scan_results.txt"
    2. function log_success() {
    3.   echo -e "\033[32m[SUCCESS] $1\033[0m"
    4.   echo "[SUCCESS] $1" >> "$LOG_FILE"
    5. }
    6. function log_error() {
    7.   echo -e "\033[31m[ERROR] $1\033[0m"
    8.   echo "[ERROR] $1" >> "$LOG_FILE"
    9. }
    复制代码
  • 使用 fping 替换 ping
    fping 是一个更高效的网络扫描工具,支持批量扫描。如果系统安装了 fping,可以替换 ping 命令:
    1. fping -c 1 -t "$TIMEOUT" "$ip" &> /dev/null
    复制代码
总结

该脚本通过并行 ping 扫描 192.168.1 网段,快速检测哪些 IP 地址在线。通过调整并行数量和超时时间,可以平衡扫描速度和正确性。如果需要更高效的扫描,可以考虑使用 nmap 或 fping 等专业工具。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表