第19章 网络测试工具¶
掌握网络测试工具是诊断问题的关键。本章介绍常用的网络测试工具及其使用方法。
19.1 Ping与Traceroute¶
19.1.1 Ping基础¶
Ping的作用:
功能:
1. 测试网络连通性
2. 检测延迟(RTT)
3. 检测丢包率
4. 初步诊断网络问题
原理:
发送ICMP Echo Request包
等待ICMP Echo Reply响应
计算往返时间
限制:
⚠️ 某些服务器禁ping
⚠️ ICMP可能被限速
⚠️ 不能测试端口
⚠️ 防火墙可能拦截
Ping命令使用:
# Linux/macOS基础用法
ping google.com
# 发送指定数量的包
ping -c 10 google.com
# 设置包大小(字节)
ping -s 1000 google.com
# 设置间隔时间(秒)
ping -i 0.5 google.com
# 持续ping并记录
ping google.com > ping.log &
# Windows用法
ping google.com
# 发送10个包
ping -n 10 google.com
# 持续ping
ping -t google.com
# 设置TTL
ping -i 64 google.com
结果分析:
输出示例:
64 bytes from 142.250.185.46: icmp_seq=1 ttl=116 time=35.2 ms
64 bytes from 142.250.185.46: icmp_seq=2 ttl=116 time=34.8 ms
64 bytes from 142.250.185.46: icmp_seq=3 ttl=116 time=35.5 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 34.8/35.2/35.5/0.3 ms
参数解读:
- icmp_seq:序列号
- ttl:生存时间(跳数限制)
- time:往返时间(延迟)
- packet loss:丢包率
- rtt min/avg/max:最小/平均/最大延迟
健康指标:
✓ 丢包率 < 1%
✓ 延迟稳定(mdev小)
✓ TTL正常(>50)
异常情况:
❌ Request timeout:无响应
❌ Destination host unreachable:目标不可达
❌ 高丢包率:网络不稳定
❌ 延迟波动大:网络拥堵
19.1.2 Traceroute路由追踪¶
Traceroute作用:
基础使用:
# Linux
traceroute google.com
# 指定最大跳数
traceroute -m 20 google.com
# 使用ICMP(默认UDP)
traceroute -I google.com
# TCP方式(端口80)
traceroute -T -p 80 google.com
# 不解析域名
traceroute -n google.com
# Windows(tracert)
tracert google.com
# 不解析域名
tracert -d google.com
# 指定最大跳数
tracert -h 20 google.com
# macOS
traceroute google.com
# 或
traceroute -I google.com
结果分析:
输出示例:
traceroute to google.com (142.250.185.46), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.156 ms 1.089 ms
2 10.0.0.1 (10.0.0.1) 5.432 ms 5.389 ms 5.301 ms
3 202.97.33.1 (202.97.33.1) 8.765 ms 8.721 ms 8.678 ms
4 202.97.50.253 (202.97.50.253) 15.234 ms 15.198 ms 15.167 ms
5 * * *
6 108.170.242.65 (108.170.242.65) 180.456 ms 180.423 ms 180.391 ms
7 142.250.185.46 (142.250.185.46) 181.234 ms 181.201 ms 181.178 ms
分析要点:
1. 第一跳:本地网关
192.168.1.1 → 家用路由器
延迟应 < 5ms
2. 第二跳:ISP接入
10.0.0.1 → 运营商接入点
延迟应 < 10ms
3. 中间跳:骨干网
202.97.x.x → 中国电信骨干网
延迟逐步增加
4. * * * :不响应
- 防火墙阻止ICMP
- 路由器配置不响应
- 正常现象
5. 突然延迟增大:
如从15ms跳到180ms
→ 国际出口/海底光缆
6. 最后一跳:目标服务器
延迟应与ping相近
典型路由分析:
国内访问国外:
1 本地网关 1ms
2 ISP接入 5ms
3 城域网 10ms
4 省骨干网 15ms
5 国家骨干网 25ms
6 国际出口 150ms ← 延迟剧增
7 海外ISP 180ms
8 目标服务器 185ms
绕路示例(北京访问香港):
应该:北京 → 广州 → 香港(~40ms)
实际:北京 → 上海 → 日本 → 香港(~120ms)
→ 路由次优,需要优化线路
丢包节点识别:
5 202.97.50.1 50% loss ← 此节点有问题
6 202.97.60.1 50% loss
7 8.8.8.8 0% loss ← 实际是上游问题
→ 从第一个高丢包节点开始排查
19.2 MTR路由测试¶
19.2.1 MTR简介¶
MTR优势:
MTR = My Traceroute
= Ping + Traceroute 结合
优势:
✓ 实时持续监控
✓ 显示每跳丢包率
✓ 显示每跳延迟统计
✓ 更准确的诊断
vs Traceroute:
- Traceroute:单次快照
- MTR:持续监控,统计分析
安装MTR:
# Ubuntu/Debian
sudo apt install mtr -y
# CentOS/RHEL
sudo yum install mtr -y
# macOS
brew install mtr
# Windows
# 下载WinMTR
# https://sourceforge.net/projects/winmtr/
19.2.2 MTR使用¶
基础命令:
# 图形界面(推荐新手)
mtr google.com
# 报告模式(生成统计报告)
mtr --report google.com
# 指定测试次数
mtr --report-cycles 100 google.com
# 不解析域名(更快)
mtr -n google.com
# TCP模式(测试端口)
mtr --tcp --port 443 google.com
# 输出到文件
mtr --report --report-cycles 100 google.com > mtr_report.txt
# JSON格式输出
mtr --json google.com
# CSV格式输出
mtr --csv google.com
图形界面操作:
运行: mtr google.com
界面显示:
My traceroute [v0.95]
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 100 1.2 1.3 1.0 2.1 0.2
2. 10.0.0.1 0.0% 100 5.4 5.6 5.2 7.8 0.5
3. 202.97.33.1 0.0% 100 12.3 12.5 11.8 15.6 0.8
4. ??? 100.0% 100 0.0 0.0 0.0 0.0 0.0
5. 108.170.242.65 5.0% 100 185.3 186.2 180.1 195.4 3.2
6. 142.250.185.46 0.0% 100 186.5 187.1 182.3 196.8 3.5
字段说明:
- Loss%:丢包率
- Snt:已发送包数
- Last:最后一次延迟
- Avg:平均延迟
- Best:最佳延迟
- Wrst:最差延迟
- StDev:标准差(波动)
操作键:
d:切换显示模式
n:切换域名/IP显示
p:暂停/继续
q:退出
r:重置统计
19.2.3 结果分析¶
健康网络示例:
HOST Loss% Snt Avg
1. 192.168.1.1 0.0% 100 1.2
2. 10.0.0.1 0.0% 100 5.4
3. 202.97.33.1 0.0% 100 12.3
4. 142.250.185.46 0.0% 100 35.6
特征:
✓ 无丢包(0%)
✓ 延迟稳定(StDev小)
✓ 延迟递增合理
问题网络识别:
场景1:中间节点丢包
HOST Loss% Snt Avg
1. 192.168.1.1 0.0% 100 1.2
2. 10.0.0.1 15.0% 100 5.4 ← 问题节点
3. 202.97.33.1 15.0% 100 12.3
4. 目标 15.0% 100 35.6
诊断:ISP接入点有问题,联系运营商
场景2:仅中间节点丢包
HOST Loss% Snt Avg
1. 192.168.1.1 0.0% 100 1.2
2. 10.0.0.1 20.0% 100 5.4
3. 202.97.33.1 0.0% 100 12.3 ← 后续正常
4. 目标 0.0% 100 35.6
诊断:第2跳限速/限制ICMP,不影响实际使用
场景3:延迟突增
HOST Loss% Snt Avg
1. 192.168.1.1 0.0% 100 1.2
2. 10.0.0.1 0.0% 100 5.4
3. 国际出口 0.0% 100 180.5 ← 延迟剧增
4. 目标 0.0% 100 185.3
诊断:国际出口,正常现象;如延迟过高考虑换线路
场景4:高抖动
HOST Loss% Snt Avg StDev
1. 192.168.1.1 0.0% 100 1.2 0.1
2. WiFi路由 0.0% 100 15.4 25.3 ← 高抖动
3. 目标 0.0% 100 35.6 5.2
诊断:WiFi不稳定,建议使用有线连接
19.3 SpeedTest速度测试¶
19.3.1 命令行SpeedTest¶
安装:
# 官方CLI
# Ubuntu/Debian
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt install speedtest
# CentOS/RHEL
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | sudo bash
sudo yum install speedtest
# macOS
brew install speedtest-cli
# 或使用Python版本
pip install speedtest-cli
基础使用:
# 自动选择最佳服务器
speedtest
# 列出附近服务器
speedtest --servers
# 指定服务器测试
speedtest --server-id=服务器ID
# 仅测试下载
speedtest --download
# 仅测试上传
speedtest --upload
# JSON格式输出
speedtest --json
# 简洁模式
speedtest --simple
# 分享结果(生成链接)
speedtest --share
输出示例:
Speedtest by Ookla
Server: China Telecom - Beijing (id = 5083)
ISP: China Telecom
Latency: 8.34 ms (2.15 ms jitter)
Download: 95.67 Mbps (data used: 112.4 MB)
Upload: 28.45 Mbps (data used: 42.1 MB)
Packet Loss: 0.0%
Result URL: https://www.speedtest.net/result/c/xxxxx
分析:
- Latency < 50ms:良好
- Jitter < 10ms:稳定
- Packet Loss < 1%:健康
- 下载速度:接近带宽上限为佳
19.3.2 代理速度测试¶
通过代理测速:
# 方法1:设置环境变量
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
speedtest
# 方法2:使用proxychains
# 安装
sudo apt install proxychains4
# 配置 /etc/proxychains4.conf
[ProxyList]
socks5 127.0.0.1 7890
# 使用
proxychains4 speedtest
# 对比直连和代理速度
echo "直连速度:"
speedtest --simple
echo "代理速度:"
export http_proxy=http://127.0.0.1:7890
speedtest --simple
unset http_proxy
Fast.com测速:
# 安装fast-cli
npm install --global fast-cli
# 测速
fast
# 上传下载都测
fast --upload
# JSON输出
fast --json
# 单位设置
fast --units bits # 或 bytes
优势:
✓ Netflix CDN
✓ 测试流媒体速度
✓ 简单易用
19.3.3 批量测速脚本¶
多节点对比脚本:
#!/bin/bash
# speed_compare.sh
echo "=== 网络速度对比测试 ==="
echo ""
# 直连测速
echo "【直连测速】"
speedtest --simple
echo ""
# 代理1测速
echo "【代理1测速】"
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
speedtest --simple
unset http_proxy https_proxy
echo ""
# 代理2测速
echo "【代理2测速】"
export http_proxy=http://127.0.0.1:7891
export https_proxy=http://127.0.0.1:7891
speedtest --simple
unset http_proxy https_proxy
echo ""
echo "测试完成!"
19.4 端口连通性检测¶
19.4.1 Telnet测试¶
基础用法:
# 安装telnet
# Ubuntu
sudo apt install telnet
# CentOS
sudo yum install telnet
# 测试端口
telnet 服务器IP 443
# 成功输出:
Trying 1.2.3.4...
Connected to 1.2.3.4.
Escape character is '^]'.
# 失败输出:
telnet: Unable to connect to remote host: Connection refused
# 或
telnet: Unable to connect to remote host: Connection timed out
# 退出telnet
Ctrl + ]
quit
批量端口测试:
#!/bin/bash
# check_ports.sh
HOST="your-server.com"
PORTS=(22 80 443 8443 10000)
for port in "${PORTS[@]}"; do
echo -n "Testing port $port... "
timeout 3 bash -c "echo >/dev/tcp/$HOST/$port" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ Open"
else
echo "✗ Closed"
fi
done
19.4.2 Netcat(nc)测试¶
功能更强大的测试:
# 安装
sudo apt install netcat
# 测试TCP端口
nc -zv 服务器IP 443
# 输出:
Connection to 服务器IP 443 port [tcp/https] succeeded!
# 测试UDP端口
nc -zvu 服务器IP 53
# 扫描端口范围
nc -zv 服务器IP 1-1000
# 设置超时(秒)
nc -zv -w 3 服务器IP 443
# 保持连接(交互模式)
nc 服务器IP 80
GET / HTTP/1.1
Host: example.com
# 端口监听(服务器端)
nc -l 12345
# 连接测试(客户端)
nc 服务器IP 12345
高级用法:
# 测试HTTP响应
echo -e "GET / HTTP/1.1\nHost: google.com\n\n" | nc google.com 80
# 测试HTTPS握手
echo | openssl s_client -connect google.com:443 2>/dev/null | grep "Verify return code"
# 文件传输测试
# 接收端
nc -l 12345 > received_file
# 发送端
nc 目标IP 12345 < file_to_send
19.4.3 Nmap扫描¶
安装和使用:
# 安装
sudo apt install nmap
# 扫描单个端口
nmap -p 443 服务器IP
# 扫描多个端口
nmap -p 22,80,443 服务器IP
# 扫描端口范围
nmap -p 1-1000 服务器IP
# 快速扫描常用端口
nmap --top-ports 100 服务器IP
# TCP SYN扫描(需root)
sudo nmap -sS 服务器IP
# UDP扫描
sudo nmap -sU -p 53 服务器IP
# 服务版本检测
nmap -sV 服务器IP
# 操作系统检测
sudo nmap -O 服务器IP
# 详细输出
nmap -v 服务器IP
输出解读:
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for example.com (1.2.3.4)
Host is up (0.035s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1
80/tcp open http nginx 1.18.0
443/tcp open ssl/http nginx 1.18.0
状态说明:
- open:端口开放
- closed:端口关闭
- filtered:被防火墙过滤
- unfiltered:可达但状态未知
⚠️ 注意:
仅扫描自己的服务器
未授权扫描可能违法
19.5 TLS握手测试¶
19.5.1 OpenSSL测试¶
基础TLS测试:
# 连接测试
openssl s_client -connect google.com:443
# 指定SNI
openssl s_client -connect IP:443 -servername domain.com
# 显示证书
openssl s_client -connect google.com:443 -showcerts
# 测试特定TLS版本
openssl s_client -connect google.com:443 -tls1_2
openssl s_client -connect google.com:443 -tls1_3
# 测试特定加密套件
openssl s_client -connect google.com:443 -cipher 'ECDHE-RSA-AES128-GCM-SHA256'
# 简洁输出
echo | openssl s_client -connect google.com:443 2>/dev/null | grep -E "subject|issuer|Verify"
证书信息查看:
# 查看证书详情
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -text
# 证书有效期
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates
# 证书颁发者
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -issuer
# 证书主体
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -subject
# 证书SAN(Subject Alternative Name)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
19.5.2 SSL Labs测试¶
在线测试工具:
1. SSL Labs Server Test
https://www.ssllabs.com/ssltest/
功能:
✓ 全面的SSL/TLS分析
✓ 证书验证
✓ 协议支持检测
✓ 加密套件检测
✓ 漏洞扫描
✓ 评分(A+到F)
使用:
1. 输入域名
2. 等待扫描(1-2分钟)
3. 查看详细报告
重点关注:
- Overall Rating:总评分
- Certificate:证书状态
- Protocol Support:协议支持
- Cipher Suites:加密套件
- Vulnerabilities:已知漏洞
命令行测试:
# 使用testssl.sh
# 下载
git clone https://github.com/drwetter/testssl.sh.git
cd testssl.sh
# 测试
./testssl.sh google.com
# 测试特定端口
./testssl.sh google.com:443
# 快速测试
./testssl.sh --fast google.com
# 仅测试协议
./testssl.sh --protocols google.com
# 仅测试证书
./testssl.sh --certinfo google.com
# JSON输出
./testssl.sh --jsonfile result.json google.com
19.5.3 证书链验证¶
完整验证:
# 获取证书链
echo | openssl s_client -connect google.com:443 -showcerts 2>/dev/null > cert_chain.pem
# 提取服务器证书
openssl x509 -in cert_chain.pem -out server_cert.pem
# 验证证书链
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt server_cert.pem
# 输出:
server_cert.pem: OK # 验证成功
# 检查证书是否过期
openssl x509 -in server_cert.pem -noout -checkend 86400
# 输出:
Certificate will not expire # 未过期
# 证书指纹
openssl x509 -in server_cert.pem -noout -fingerprint -sha256
Let's Encrypt证书检查:
# 检查证书颁发者
echo | openssl s_client -connect your-domain.com:443 2>/dev/null | \
openssl x509 -noout -issuer
# 应显示:
issuer=C = US, O = Let's Encrypt, CN = R3
# 检查有效期
echo | openssl s_client -connect your-domain.com:443 2>/dev/null | \
openssl x509 -noout -dates
# 输出:
notBefore=Jan 1 00:00:00 2024 GMT
notAfter=Apr 1 00:00:00 2024 GMT
# 计算剩余天数
echo | openssl s_client -connect your-domain.com:443 2>/dev/null | \
openssl x509 -noout -enddate | cut -d= -f2 | xargs -I {} date -d {} +%s | \
awk -v now=$(date +%s) '{print int(($1-now)/86400)" days"}'
本章小结¶
本章介绍了常用的网络测试工具:
核心工具:
- Ping:
- 基础连通性测试
- 延迟和丢包检测
-
快速初步诊断
-
Traceroute:
- 路由路径追踪
- 识别网络瓶颈
-
定位故障节点
-
MTR:
- Ping + Traceroute结合
- 持续监控统计
-
更准确的诊断
-
SpeedTest:
- 带宽速度测试
- 延迟抖动测试
-
代理性能对比
-
端口检测:
- Telnet:简单测试
- Netcat:功能强大
-
Nmap:全面扫描
-
TLS测试:
- OpenSSL:命令行测试
- SSL Labs:在线分析
- testssl.sh:自动化测试
工具选择指南:
快速检查连通性:
→ ping
查看网络路径:
→ traceroute
深入路由分析:
→ mtr
测试速度:
→ speedtest / fast
检查端口:
→ nc / telnet
扫描服务:
→ nmap
验证TLS:
→ openssl / testssl.sh
全面SSL分析:
→ SSL Labs
诊断流程:
1. Ping测试
↓
2. 能ping通?
是 → 端口测试(nc/telnet)
否 → 路由追踪(traceroute/mtr)
↓
3. 端口通?
是 → TLS测试(openssl)
否 → 防火墙/端口问题
↓
4. TLS正常?
是 → 速度测试(speedtest)
否 → 证书/配置问题
实用技巧:
# 一键诊断脚本
#!/bin/bash
HOST="your-server.com"
PORT=443
echo "=== 网络诊断报告 ==="
echo "目标:$HOST:$PORT"
echo ""
echo "【Ping测试】"
ping -c 5 $HOST
echo ""
echo "【端口测试】"
nc -zv -w 3 $HOST $PORT
echo ""
echo "【TLS测试】"
echo | openssl s_client -connect $HOST:$PORT 2>/dev/null | grep "Verify return code"
echo ""
echo "【MTR测试】"
mtr --report --report-cycles 10 $HOST
至此,第六部分"故障排查篇"全部完成!
实践任务:
- 熟练使用ping和traceroute
- 掌握MTR分析方法
- 进行速度对比测试
- 检测服务器端口状态
- 验证TLS证书配置