网络连通性批量测试脚本

代码脚本 · 网络

批量测试服务器网络连通性,支持Ping、TCP端口、HTTP检测,输出网络质量报告

详细内容

#!/bin/bash # ========================================== # 网络连通性批量测试脚本 # 用途:批量测试网络连通性,支持Ping、TCP端口、HTTP检测 # 使用方法:bash network_check.sh # ========================================== # 配置 PING_HOSTS="${PING_HOSTS:-8.8.8.8 114.114.114.114 www.baidu.com}" TCP_TARGETS="${TCP_TARGETS:-www.baidu.com:80 www.baidu.com:443}" HTTP_URLS="${HTTP_URLS:-https://www.baidu.com}" PING_COUNT="${PING_COUNT:-4}" TIMEOUT="${TIMEOUT:-5}" echo "========== 网络连通性测试报告 ==========" echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" # 1. Ping测试 echo "【1. Ping连通性测试】" for host in $PING_HOSTS; do echo " 测试: $host" if command -v ping &> /dev/null; then PING_RESULT=$(ping -c "$PING_COUNT" -W "$TIMEOUT" "$host" 2>&1) if echo "$PING_RESULT" | grep -q "0 received\|100% packet loss"; then echo " ❌ 无法连通" else LOSS=$(echo "$PING_RESULT" | grep "packet loss" | awk '{print $6}' | tr -d '%') AVG_TIME=$(echo "$PING_RESULT" | grep "rtt min" | awk -F'/' '{print $5}') echo " ✅ 连通正常,丢包率: ${LOSS}%,平均延迟: ${AVG_TIME}ms" fi else echo " ⚠️ ping命令不可用" fi done echo "" # 2. TCP端口测试 echo "【2. TCP端口连通性测试】" for target in $TCP_TARGETS; do host=$(echo "$target" | cut -d: -f1) port=$(echo "$target" | cut -d: -f2) echo " 测试: $host:$port" if command -v nc &> /dev/null; then if nc -z -w "$TIMEOUT" "$host" "$port" 2>/dev/null; then echo " ✅ 端口开放" else echo " ❌ 端口关闭或无法连接" fi elif command -v telnet &> /dev/null; then if timeout "$TIMEOUT" bash -c "echo > /dev/tcp/$host/$port" 2>/dev/null; then echo " ✅ 端口开放" else echo " ❌ 端口关闭或无法连接" fi else echo " ⚠️ nc/telnet命令不可用" fi done echo "" # 3. HTTP/HTTPS测试 echo "【3. HTTP/HTTPS连通性测试】" for url in $HTTP_URLS; do echo " 测试: $url" if command -v curl &> /dev/null; then HTTP_RESULT=$(curl -s -o /dev/null -w "%{http_code} %{time_total} %{size_download}" --connect-timeout "$TIMEOUT" --max-time "$TIMEOUT" "$url" 2>/dev/null) if [ -n "$HTTP_RESULT" ]; then HTTP_CODE=$(echo "$HTTP_RESULT" | awk '{print $1}') RESP_TIME=$(echo "$HTTP_RESULT" | awk '{print $2}') DOWNLOAD_SIZE=$(echo "$HTTP_RESULT" | awk '{print $3}') if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 400 ]; then echo " ✅ 访问成功,状态码: $HTTP_CODE,响应时间: ${RESP_TIME}s,下载大小: ${DOWNLOAD_SIZE}字节" else echo " ⚠️ 访问异常,状态码: $HTTP_CODE" fi else echo " ❌ 无法访问" fi else echo " ⚠️ curl命令不可用" fi done echo "" # 4. DNS解析测试 echo "【4. DNS解析测试】" DNS_SERVERS="${DNS_SERVERS:-8.8.8.8 114.114.114.114}" TEST_DOMAIN="${TEST_DOMAIN:-www.baidu.com}" for dns in $DNS_SERVERS; do echo " DNS服务器: $dns" if command -v nslookup &> /dev/null; then DNS_RESULT=$(nslookup "$TEST_DOMAIN" "$dns" 2>&1) if echo "$DNS_RESULT" | grep -q "Address:"; then IP=$(echo "$DNS_RESULT" | grep "Address:" | tail -1 | awk '{print $2}') echo " ✅ 解析成功,IP: $IP" else echo " ❌ 解析失败" fi elif command -v dig &> /dev/null; then DNS_RESULT=$(dig @"$dns" "$TEST_DOMAIN" +short 2>/dev/null) if [ -n "$DNS_RESULT" ]; then echo " ✅ 解析成功,IP: $DNS_RESULT" else echo " ❌ 解析失败" fi else echo " ⚠️ nslookup/dig命令不可用" fi done echo "" # 5. 网络质量评估 echo "【5. 网络质量评估】" echo " 本地IP信息:" if command -v ip &> /dev/null; then ip addr show | grep "inet " | grep -v "127.0.0.1" | awk '{print " " $2 " (" $NF ")"}' elif command -v ifconfig &> /dev/null; then ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{print " " $2 " (" $NF ")"}' fi echo " 网关信息:" if command -v ip &> /dev/null; then ip route | grep default | awk '{print " 网关: " $3 ", 接口: " $5}' fi echo " 公网IP:" if command -v curl &> /dev/null; then PUBLIC_IP=$(curl -s --connect-timeout 3 ifconfig.me 2>/dev/null) [ -n "$PUBLIC_IP" ] && echo " $PUBLIC_IP" || echo " 无法获取" fi echo "" echo "========== 测试完成 ==========" echo "提示: 可将此脚本加入crontab定时执行,监控网络稳定性"

适配环境

适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+

依赖环境:bash 4.0+

参数说明

[{"name": "PING_HOSTS", "label": "Ping\u6d4b\u8bd5\u4e3b\u673a(\u7a7a\u683c\u5206\u9694)", "default": "8.8.8.8 114.114.114.114"}, {"name": "TCP_TARGETS", "label": "TCP\u7aef\u53e3\u6d4b\u8bd5(\u4e3b\u673a:\u7aef\u53e3)", "default": "www.baidu.com:80"}, {"name": "HTTP_URLS", "label": "HTTP\u6d4b\u8bd5URL", "default": "https://www.baidu.com"}, {"name": "PING_COUNT", "label": "Ping\u6b21\u6570", "default": "4"}]
网络连通性测试Ping端口检测故障排查

更多网络