本文目录导读:

- 方法一:使用 iPerf3(最专业、最准确)
- 方法二:使用 speedtest-cli(适合测试互联网带宽)
- 方法三:使用 curl 和 wget(简单测速)
- 方法四:使用 nc(netcat,适合极简场景)
- 完整脚本模板(推荐组合方案)
- 总结建议
在脚本中进行网络带宽测试,通常有几种成熟的方法,具体取决于你的环境(Linux/Windows)、是否需要安装工具,以及测试的是内部网络还是互联网带宽。
以下是几种主流的脚本化带宽测试方案,按推荐程度排序:
使用 iPerf3(最专业、最准确)
iPerf3 是行业标准的带宽测试工具,适合测试局域网或两台特定服务器之间的带宽。
原理: 需要一端运行服务器模式,另一端运行客户端模式。
脚本步骤:
-
服务端(Server): 监听 5201 端口。
#!/bin/bash # 启动 iperf3 服务器,后台运行 iperf3 -s -D echo "iPerf3 Server started."
-
客户端(Client): 连接服务端进行测试。
#!/bin/bash SERVER_IP="192.168.1.100" DURATION=30 # 测试时长(秒) # 执行测试并提取带宽结果 RESULT=$(iperf3 -c $SERVER_IP -t $DURATION -J 2>/dev/null | grep -o '"bits_per_second": [0-9]*\.[0-9]*') echo "Bandwidth: $RESULT bits/sec" # 或者用友好格式输出 iperf3 -c $SERVER_IP -t $DURATION -f M # 以 Mbps 输出
注意事项:
- 需要两端都安装
iperf3:apt install iperf3(Debian/Ubuntu) 或yum install iperf3(CentOS/RHEL)。 - 如果防火墙开启,请放行 TCP 5201 端口。
-J参数输出 JSON,方便脚本解析。
使用 speedtest-cli(适合测试互联网带宽)
如果你的目标是测试VPS 到公网的带宽(如去程、回程速度),speedtest-cli 是最常用的方案。
安装:
# 使用 Python pip 安装 pip install speedtest-cli # 或者 Linux 直接下载 curl -s https://install.speedtest.net/app/cli/install.deb.sh | sudo bash sudo apt-get install speedtest-cli
脚本示例:
#!/bin/bash
echo "Testing internet speed..."
# 简单测试,输出下载和上传速度(Mbps)
speedtest-cli --simple
# 进阶:输出 JSON 格式,只提取下载速度
RESULT=$(speedtest-cli --json 2>/dev/null | python3 -c "import sys, json; data = json.load(sys.stdin); print('Download: {:.2f} Mbps'.format(data['download'] / 1e6))")
echo "$RESULT"
# 如果不想显示详情,只取结果(适用于监控)
speedtest-cli --no-upload # 仅测下载
注意事项:
- 测试结果受当前网络拥塞影响较大,建议测试 3 次取平均值。
- 免费版 Speedtest 的服务器节点可能不是最优的,可以用
--list选择指定服务器。
使用 curl 和 wget(简单测速)
如果你的环境受限,无法安装额外工具,可以用 curl 或 wget 下载一个已知大小的文件来估算带宽。
脚本示例:
#!/bin/bash
# 选择一个速度快的测试文件,如 Speedtest 提供的文件
URL="http://speedtest.tele2.net/100MB.zip"
echo "Starting download test..."
START_TIME=$(date +%s)
# 下载文件,输出重定向到 /dev/null
wget -O /dev/null $URL 2>&1 | tail -3
END_TIME=$(date +%s)
# 计算耗时
DURATION=$((END_TIME - START_TIME))
SIZE_MB=100 # 100MB 文件
SPEED=$(echo "scale=2; ($SIZE_MB * 8) / $DURATION" | bc) # 转换为 Mbps
echo "Estimated bandwidth: ${SPEED} Mbps"
局限性:
- 不够精确:受服务器负载、磁盘 I/O 影响大。
- 耗时较长:需要下载完整个文件。
- 建议使用大文件(100MB 以上)以减少误差。
使用 nc(netcat,适合极简场景)
如果连 iperf3 都没有,可以用 nc 配合 dd 做原始数据流测试。
服务端:
nc -l -p 9999 > /dev/null
客户端:
dd if=/dev/zero bs=1M count=1024 | nc <SERVER_IP> 9999
然后通过统计时间手动计算。
完整脚本模板(推荐组合方案)
以下是一个综合脚本,自动探测工具并执行:
#!/bin/bash
# 网络带宽测试脚本
# 依赖检查:iPerf3 > Speedtest CLI > Curl
TARGET_IP="${1:-192.168.1.1}" # 默认目标 IP
DURATION=20
echo "=== Network Bandwidth Test ==="
# 1. 检查 iPerf3
if command -v iperf3 &> /dev/null; then
echo "[iPerf3] Testing bandwidth to $TARGET_IP..."
iperf3 -c $TARGET_IP -t $DURATION -f M --omit 3 2>/dev/null | tail -3
echo "Done."
exit 0
fi
# 2. 检查 Speedtest
if command -v speedtest-cli &> /dev/null; then
echo "[Speedtest] Testing internet bandwidth..."
speedtest-cli --simple
exit 0
fi
# 3. 使用 Curl 备用
if command -v curl &> /dev/null; then
echo "[Curl] Estimating bandwidth (approximate)..."
URL="http://speedtest.tele2.net/100MB.zip"
START_TIME=$(date +%s%N)
curl -o /dev/null -s -w '%{speed_download}\n' $URL > /tmp/speed_file
END_TIME=$(date +%s%N)
DURATION=$(( (END_TIME - START_TIME) / 1000000 )) # ms
SPEED=$(echo "scale=2; (100*8*1000) / ($DURATION)" | bc)
echo "Estimated Bandwidth: ${SPEED} Mbps"
exit 0
fi
echo "Error: No suitable tool found (iperf3, speedtest-cli, curl)."
exit 1
总结建议
| 场景 | 推荐工具 | 脚本化难度 | 数据用途 |
|---|---|---|---|
| 内网/点对点带宽 | iPerf3 | 低 | 精准容量规划 |
| 出口带宽/公网测速 | Speedtest CLI | 低 | 日常监控 |
| 受限环境/一次性测试 | curl + 文件下载 |
高 | 粗略估算 |
| 无任何依赖 | nc + dd |
高 | 极简可用 |
重要提醒:
- 权限:很多脚本需要 root 或 sudo 权限来安装工具或打开低端口。
- 防火墙:使用 iPerf3 时,务必检查防火墙是否阻挡了测试端口(默认 5201)。
- 并发限制:脚本中测试带宽可能会消耗大量 CPU 和网络资源,建议在脚本中加入
sleep或限制同时运行的测试数量。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播