本文目录导读:

要用脚本自动测试网络带宽,最常用的工具是 Speedtest CLI(由 Ookla 提供)或 iperf3,以下是几种脚本化实现的方法,涵盖 Linux、Windows 和 macOS。
使用 Speedtest CLI(最推荐,适合单点测速)
安装
# Linux (Ubuntu/Debian) sudo apt-get install speedtest-cli # macOS brew install speedtest-cli # Windows (下载官方exe后放入PATH) # 或使用 pip pip install speedtest-cli
基本测速脚本(Bash)
#!/bin/bash
echo "=== 带宽测试开始 $(date) ==="
speedtest-cli --json 2>/dev/null | python3 -c "
import sys, json
data = json.load(sys.stdin)
print(f'下载: {data[\"download\"]/1e6:.2f} Mbps')
print(f'上传: {data[\"upload\"]/1e6:.2f} Mbps')
print(f'延迟: {data[\"ping\"]} ms')
"
支持定时测试(使用cron)
# 每2小时运行一次,结果写入日志 0 */2 * * * /path/to/speedtest.sh >> /var/log/bandwidth.log 2>&1
Python 脚本(更灵活)
import speedtest
import json
from datetime import datetime
def test_bandwidth():
st = speedtest.Speedtest()
st.get_best_server()
# 获取下载/上传速度(bit/s)
download_speed = st.download() / 1_000_000 # Mbps
upload_speed = st.upload() / 1_000_000
result = {
"timestamp": datetime.now().isoformat(),
"download_mbps": round(download_speed, 2),
"upload_mbps": round(upload_speed, 2),
"ping_ms": st.results.ping
}
return result
if __name__ == "__main__":
res = test_bandwidth()
print(json.dumps(res, indent=2))
使用 iperf3(适合局域网/点对点测试)
服务端启动(需在远程机器运行)
# 监听端口5201 iperf3 -s
客户端脚本(测试到服务端的带宽)
#!/bin/bash
SERVER_IP="192.168.1.100"
DURATION=10
echo "测试到 $SERVER_IP 的带宽..."
# 下载测试(客户端角度)
iperf3 -c $SERVER_IP -t $DURATION -f m | grep -E "sender|receiver" | while read line; do
echo "$line"
done
批量测试多个节点的 Python 脚本
import subprocess
import re
import json
def test_iperf(server_ip, duration=10):
cmd = f"iperf3 -c {server_ip} -t {duration} -f m"
result = subprocess.run(cmd.split(), capture_output=True, text=True)
# 提取发送/接收速率
match = re.findall(r'([\d.]+) Mbits/sec', result.stdout)
return {
"server": server_ip,
"sender_mbps": float(match[0]) if len(match) > 0 else 0,
"receiver_mbps": float(match[1]) if len(match) > 1 else 0
}
servers = ["192.168.1.100", "10.0.0.1"]
for srv in servers:
data = test_iperf(srv)
print(json.dumps(data))
集成告警与存档(完整示例)
#!/usr/bin/env python3
import speedtest
import sqlite3
import smtplib
from email.mime.text import MIMEText
from datetime import datetime
def test_and_store():
# 1. 测速
st = speedtest.Speedtest()
st.get_best_server()
dl = st.download() / 1e6
ul = st.upload() / 1e6
ping = st.results.ping
# 2. 存入SQLite
conn = sqlite3.connect("/var/log/bandwidth.db")
conn.execute('''CREATE TABLE IF NOT EXISTS tests
(timestamp TEXT, download REAL, upload REAL, ping REAL)''')
conn.execute("INSERT INTO tests VALUES (?,?,?,?)",
(datetime.now().isoformat(), dl, ul, ping))
conn.commit()
# 3. 告警阈值检查
if dl < 50 or ul < 10: # 小于50Mbps下载/10Mbps上传告警
send_alert(f"带宽异常: 下载={dl:.2f}Mbps 上传={ul:.2f}Mbps")
conn.close()
return dl, ul, ping
def send_alert(msg):
# 配置邮件发送
pass
if __name__ == "__main__":
test_and_store()
注意事项
- Speedtest CLI 限制:免费版有每日测试次数限制(Ookla 官方的 speedtest-cli 约 500次/天)。
- iperf3 需要双向:确保服务端已启动,防火墙开放端口(默认5201)。
- 并发测试:如果同时跑多个 iperf 实例,可能因带宽抢占导致结果不准确。
- 最小化干扰:测试期间关闭其他大流量应用(如视频、下载)。
推荐方案选择
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 家庭宽带稳定性 | Speedtest CLI | 直接测运营商带宽 |
| 公司内网质量 | iperf3 | 可点对点测量真实吞吐 |
| 跨国节点监控 | Speedtest CLI + 多服务器 | 支持全球节点选择 |
| 自动化监控集成 | Python + speedtest-cli | 易与Prometheus/Grafana结合 |
如果需要更复杂的定时任务、历史趋势图表或邮件告警,我可以帮你进一步扩展脚本。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播