付良健 发表于 2024-11-29 15:58:44

运维脚本:网络连通性测试

1. 背景介绍

在日常运维工作中,网络连通性是确保系统稳定性和高可用性的关键因素之一。通过测试网络连通性,运维人员可以快速诊断网络问题,判断系统与其他设备或服务的连接状态。这对于预防和处理网络故障至关重要。
本文将介绍如何编写和使用一个简单的运维脚本,来自动化测试服务器的网络连通性。
2. 目标描述

本文的目标是创建一个运维脚本,用于测试服务器之间的网络连接是否正常。该脚本能够:

[*]检查与目标IP或域名的连通性。
[*]提供网络连通性测试的结果(如是否连接成功,响应时间等)。
[*]对不同的网络故障类型进行简单的错误提示,帮助快速定位问题。
3. 脚本设计思路

在测试网络连通性时,我们通常会使用以下工具:

[*]Nc 命令:用来测试网络连接性,检查目标主机是否可达。
[*]Traceroute 命令(可选):用于分析网络路由,帮助定位中断的节点。
脚本设计应简洁明了,能够通过参数传递目标IP或域名,并且输出直观的测试结果。
4. 脚本示例

#!/bin/bash# checkConnectStatus.sh# 批量测试网络连通性脚本log_err() {    printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033: \033: \033;then      mkdir $connectConfigDirPath    fi    connectFileName="${connectConfigDirPath}/connect.csv"    if [ ! -f "$connectFileName" ];then      echo "测试地址|测试结果|状态" > $connectFileName    fi    # 检查是否存在nc命令    if [ -n "$(rpm -qa | grep 'ncat')" ];then      yum -y install nc > /dev/null 2>&1      if [ $? -ne 0 ];then            log_err " yum install nc failed! 请手动安装nc命令"      fi    fi    # 参数为空,打印使用方式    if [ $# -eq 0 ]; then      usage    fi    while [[ $# -gt 0 ]]; do      case $1 in      --fileName)            connectIpPortFileName=$2            shift            shift            ;;          * | --help)            usage            ;;      esac    done    }usage() {    echo "Usage: $0         --fileName填写测试连通性文件      "    exit 1}checkConnectToFile() {    local url=$1    local ip=$(echo $url | awk -F":" '{print $1}')    local port=$(echo $url | awk -F":" '{print $2}')    local data=$(nc -zv -w 5 $ip $port 2>&1 | tr "\n" " ")    local message="网络连通性正常"    if [ -n "$(echo $data | grep 'Ncat: 0 bytes sent, 0 bytes received')" ];then      log_info " url: $url data:[$data] msg: $message"    else      local message="网络连通性异常"      log_err " url: $url data:[$data] msg: $message"    fi      # 将测试结果记录到文件中,因使用多线程文件操作加锁   {      # 文件执行过程加锁,等待直到可以锁定文件      flock 002         # 结果记录到文件中      echo "$url|$data|$message" >> $connectFileName    } 002>"${connectFileName}.lock" # 002是文件描述符,此处用于解锁}readFileToConnect() {    while read -r line;do      local IPList=$(echo $line | awk -F"|" '{print $1}')      local PortList=$(echo $line | awk -F"|" '{print $2}')      local conncetHostPortArray=()      # 配置数据处理      {            # 多IP情况下            if [ -n "$(echo $IPList | grep ',')" ];then                # 进行遍历                IFS=',' read -r -a ipArray
页: [1]
查看完整版本: 运维脚本:网络连通性测试