要检查 192.168.1 网段中哪些 IP 地址正在使用,可以使用 Shell 脚本结合 ping 命令来扫描整个网段。以下是实现这一功能的完整脚本:


脚本:检查 192.168.1 网段 IP 是否在用

#!/bin/bash

# 定义网段
NETWORK="192.168.1" # 定义超时时间(秒)
TIMEOUT=1 # 定义并行扫描的 IP 数量
PARALLEL=20 # 日志函数
function log_info() {
echo -e "[INFO] $1"
} function log_success() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
} function log_error() {
echo -e "\033[31m[ERROR] $1\033[0m"
} # 检查单个 IP 是否在线
function check_ip() {
local ip=$1
if ping -c 1 -W "$TIMEOUT" "$ip" &> /dev/null; then
log_success "IP $ip is online"
else
log_error "IP $ip is offline"
fi
} # 主函数
function main() {
log_info "Scanning network $NETWORK.0/24..." # 使用循环遍历 1-254 的 IP 地址
for i in {1..254}; do
ip="$NETWORK.$i"
check_ip "$ip" & # 控制并行数量
if [[ $(jobs -r -p | wc -l) -ge $PARALLEL ]]; then
wait -n
fi
done # 等待所有后台任务完成
wait
} # 执行主函数
main

脚本说明

  1. 网段定义

    • NETWORK="192.168.1":定义要扫描的网段。
  2. 超时时间

    • TIMEOUT=1:设置 ping 命令的超时时间为 1 秒。
  3. 并行扫描

    • PARALLEL=20:设置同时扫描的 IP 数量为 20 个,以提高扫描效率。
  4. 日志输出

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

      • 绿色:IP 在线。
      • 红色:IP 离线。
  5. check_ip 函数

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

    • 遍历 192.168.1.1192.168.1.254 的所有 IP 地址。
    • 使用 &check_ip 放入后台执行,实现并行扫描。
    • 使用 jobswait 控制并行任务数量。

使用方法

  1. 将脚本保存为 scan_network.sh
  2. 赋予执行权限:
    chmod +x scan_network.sh
  3. 运行脚本:
    ./scan_network.sh

示例输出

[INFO] Scanning network 192.168.1.0/24...
[SUCCESS] IP 192.168.1.1 is online
[ERROR] IP 192.168.1.2 is offline
[SUCCESS] IP 192.168.1.3 is online
[ERROR] IP 192.168.1.4 is offline
...

优化建议

  1. 增加 IP 范围参数

    可以通过命令行参数指定扫描的 IP 范围,例如:

    ./scan_network.sh 192.168.1.10 192.168.1.20

    修改脚本:

    START_IP=${1:-1}
    END_IP=${2:-254} for i in $(seq "$START_IP" "$END_IP"); do
    ip="$NETWORK.$i"
    check_ip "$ip" &
    done
  2. 保存结果到文件

    可以将扫描结果保存到文件中,便于后续分析:

    LOG_FILE="scan_results.txt"
    function log_success() {
    echo -e "\033[32m[SUCCESS] $1\033[0m"
    echo "[SUCCESS] $1" >> "$LOG_FILE"
    }
    function log_error() {
    echo -e "\033[31m[ERROR] $1\033[0m"
    echo "[ERROR] $1" >> "$LOG_FILE"
    }
  3. 使用 fping 替代 ping

    fping 是一个更高效的网络扫描工具,支持批量扫描。如果系统安装了 fping,可以替换 ping 命令:

    fping -c 1 -t "$TIMEOUT" "$ip" &> /dev/null

总结

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

shell脚本检查192.168.1网段ip是否在用的更多相关文章

  1. 【shell脚本】不停地telnet一个ip或域名,并输出结果到文件中===telnetscript.sh

    编写shell脚本不停地telnet一个域名,并输出结果到文件中 [root@localhost ~]# cat telnetscript.sh #!/bin/bash #检查是否在root用户下执行 ...

  2. shell脚本检查域名证书是否过期

    最近公司的域名准备过期了,防止用户访问的时候出现异常,所以最近我们准备替换相关网站证书为最新的. (一般HTTPS证书有效期为1年,证书过期后或者该证书不是该域名的有效证书时,在浏览器中访问会出现如下 ...

  3. Shell脚本检查memcache进程并自己主动重新启动

    修正版: #!/bin/sh #check memcache process and restart if down mm_bin="/usr/local/bin/memcached&quo ...

  4. shell脚本检查是否存在tun0虚拟网卡,若不不存在服务器更改port,并重启服务器,客户端修改port,并重新启动客户端

    openvp 客户端 /home 目录下各脚本文件名 [root@jira home]# ls openvpn_server_restart.sh openvpn_tunnel_monitor.sh ...

  5. shell脚本 检查mysql节点数据一致性

    一.简介 源码地址 日期:2018/4/12 介绍:参考pt checksum思想改写,可以定制化的检查随意两个mysql节点的数据一致性. 功能: 检查随意两个几点的数据一致性 支持并发检查,基于库 ...

  6. Linux Shell脚本之自动修改IP

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  7. shell脚本学习(1)列出一组IP内所有活动主机

    1.用ping命令编写脚本来查询一组IP地址同时检查他们是否处于活动状态 [zhi@centos7 ~]$ vi CheckHostStatus.sh [zhi@centos7 ~]$ ll 总用量 ...

  8. Shell脚本实现自动修改IP地址

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  9. 100个Linux Shell脚本经典案例(附PDF)

    转载自:https://mp.weixin.qq.com/s/tCKAM67_7K7q2vJthaIsDQ 原文链接:https://wenku.baidu.com/view/4f089430a116 ...

  10. shell脚本——作业二(循环作业)

    1.通过位置变量创建linux系统账户及密码 $1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 #!/bin/bash #创建用户与密码 declare -i c=0 if [ -z $1 ...

随机推荐

  1. List<Map<String,Object>> 属性获取

    public static void main(String[] args) { // 1.数据准备 List<Map<String,Object>> list = new A ...

  2. 多校A层冲刺NOIP2024模拟赛18

    多校A层冲刺NOIP2024模拟赛18 T1 选彩笔(rgb) 签到题,但是没签上... 没想到三维前缀和,直接上了个bitset. 就是直接二分答案,然后枚举这三维每维的区间的起点,前缀和查数量是否 ...

  3. Verilog代码规范

    历史修改信息 版本 更改描述 更改人 批准人 修订日期/生效日期 A01 发布首版 ldy 一.目的 作为我司verilog开发过程中的输入文件,用于统一FPGA开发人员的代码风格.从而在满足功能和性 ...

  4. VMware与Windows主机之间复制粘贴

    其实就是安装VMware Tools,但不知道为什么我的VMware Workstation不能安装VMware Tools,记得之前有次安装过,但是失败了. 基于apt-get命令下载安装其实是更好 ...

  5. elasticsearch-head插件基本使用

    1. 查看搜索setting信息 mp_index/_settings 2. 设置分片数量 3, 修改数据刷新间隔 { "refresh_interval": "30s& ...

  6. 了解URLSearchParams对象

    URLSearchParams对象用于处理URL中查询字符串,即?之后的部分. 1.语法 其实例对象的用法和Set数据结构类似.实例对象本身是可遍历对象.但是不是遍历器. var paramsStri ...

  7. 多段区间的时间滑块slider实现方式

    多段区间的时间滑块slider实现方式 写在前面:今天要实现一个尖峰平谷的数据配置,这可一下难倒我了,但是还好互联网上大神云集,感谢各位大神的倾情分享,现在就写下我的感悟,留给看到这篇文章的你 参考链 ...

  8. 深入聊聊async&Promise

    正文 最近在学习JavaScript里的async.await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下. 从Example说起 ...

  9. echarts 图表设置默认选中

    echarts:https://echarts.apache.org/zh/api.html#events.legendselected tfjy1997:https://blog.csdn.net/ ...

  10. Linux行号显示

    xshell显示行号: 输入命令: vim ~/.vimrc 输入: set nu 之后在打开文件 就可以 看到行号显示.