本文目录导读:

Linux/macOS 命令行方案
使用 ethtool(需要 root 权限)
#!/bin/bash # 获取网卡速率 interface="eth0" echo "网卡 $interface 速率:" ethtool $interface | grep "Speed"
使用 /sys/class/net 目录(无需额外工具)
#!/usr/bin/env python3
import re
def get_speed(interface):
"""从系统文件读取网卡速率"""
try:
path = f"/sys/class/net/{interface}/speed"
with open(path, 'r') as f:
speed = f.read().strip()
if speed: # 可能有 "1000" 或 "-1"(未知)
return f"{int(speed)} Mbps"
except FileNotFoundError:
return f"接口 {interface} 不存在"
except PermissionError:
return "权限不足"
return "未知"
# 获取所有网卡
import os
net_path = "/sys/class/net"
if __name__ == "__main__":
if os.path.exists(net_path):
interfaces = os.listdir(net_path)
for iface in interfaces:
print(f"{iface}: {get_speed(iface)}")
else:
print("无法访问网卡信息目录")
Windows PowerShell 方案
# PowerShell 脚本 Get-NetAdapter | Select-Object Name, LinkSpeed, Status | Format-Table
或者获取更详细的信息:
# 使用 WMI 查询
Get-WmiObject Win32_NetworkAdapter |
Where-Object {$_.NetConnectionID -ne $null} |
Select-Object NetConnectionID, @{Name="Speed(Mbps)";Expression={$_.Speed/1000000}} |
Format-Table
跨平台 Python 方案(推荐)
#!/usr/bin/env python3
"""
跨平台获取网卡速率脚本
支持 Linux、macOS、Windows
"""
import platform
import subprocess
import re
def get_network_speed_linux(interface=None):
"""Linux 系统获取网卡速率"""
try:
with open(f"/sys/class/net/{interface}/speed", 'r') as f:
speed_mbps = f.read().strip()
if speed_mbps.isdigit():
return f"{speed_mbps} Mbps"
return "未知"
except:
return "无法获取"
def get_network_speed_windows():
"""Windows 系统获取网卡速率"""
try:
result = subprocess.run(
["powershell", "-Command",
"Get-NetAdapter | Select-Object Name, LinkSpeed | ConvertTo-Json"],
capture_output=True, text=True
)
# 解析 JSON
import json
data = json.loads(result.stdout)
if isinstance(data, list):
for adapter in data:
print(f"{adapter['Name']}: {adapter['LinkSpeed']}")
elif data:
print(f"{data['Name']}: {data['LinkSpeed']}")
except:
print("无法获取网卡信息")
def get_network_speed_macos():
"""macOS 系统获取网卡速率"""
# macOS 通常需要 ethtool 或 ifconfig
try:
result = subprocess.run(
["ifconfig"],
capture_output=True, text=True
)
# 解析接口信息
interfaces = re.findall(r'^(\w+):.*?status: active', result.stdout, re.MULTILINE)
return interfaces
except:
return ["无法获取"]
def main():
system = platform.system()
print(f"系统: {system}")
if system == "Linux":
import os
net_path = "/sys/class/net"
if os.path.exists(net_path):
interfaces = os.listdir(net_path)
for iface in interfaces:
speed = get_network_speed_linux(iface)
print(f"{iface}: {speed}")
elif system == "Windows":
get_network_speed_windows()
elif system == "Darwin": # macOS
interfaces = get_network_speed_macos()
print("macOS 网络接口(需安装 ethtool 查看速率)")
for iface in interfaces:
print(f" {iface}")
# macOS 可用 system_profiler 查看更多信息
else:
print("不支持的平台")
if __name__ == "__main__":
main()
实时流量监控脚本
#!/usr/bin/env python3
"""
实时查看网卡传输速率(基于 /proc/net/dev)
"""
import time
import os
import sys
def read_net_stats():
"""读取 /proc/net/dev 数据"""
try:
with open('/proc/net/dev', 'r') as f:
lines = f.readlines()[2:] # 跳过前两行
stats = {}
for line in lines:
parts = line.strip().split()
interface = parts[0].rstrip(':')
# 格式: 名称 收包 收字节 ... 发包 发字节 ...
packages_recv = int(parts[1])
bytes_recv = int(parts[2])
packages_send = int(parts[9])
bytes_send = int(parts[10])
stats[interface] = {
'rx_bytes': bytes_recv,
'tx_bytes': bytes_send,
'rx_packets': packages_recv,
'tx_packets': packages_send
}
return stats
except FileNotFoundError:
print("不支持的文件系统")
sys.exit(1)
def format_speed(bits_per_second):
"""格式化速度"""
if bits_per_second < 1024:
return f"{bits_per_second} bits/s"
elif bits_per_second < 1024**2:
return f"{bits_per_second/1024:.2f} Kbps"
elif bits_per_second < 1024**3:
return f"{bits_per_second/1024**2:.2f} Mbps"
else:
return f"{bits_per_second/1024**3:.2f} Gbps"
def monitor_interface(interface, interval=1):
"""监控指定网卡的实时速率"""
old_stats = read_net_stats()
time.sleep(interval)
new_stats = read_net_stats()
if interface in old_stats and interface in new_stats:
old = old_stats[interface]
new = new_stats[interface]
tx_rate = (new['tx_bytes'] - old['tx_bytes']) * 8 / interval # 转为 bit/s
rx_rate = (new['rx_bytes'] - old['rx_bytes']) * 8 / interval
print(f"接口: {interface}")
print(f"发送: {format_speed(tx_rate)}")
print(f"接收: {format_speed(rx_rate)}")
print("─" * 30)
else:
print(f"接口 {interface} 不存在")
if __name__ == "__main__":
interface = sys.argv[1] if len(sys.argv) > 1 else "eth0"
while True:
monitor_interface(interface)
time.sleep(1)
安装依赖的辅助脚本
#!/bin/bash
# 检查并安装必要的工具
echo "检查必要工具..."
# Linux 检查 ethtool
if command -v ethtool &> /dev/null; then
echo "ethtool 已安装"
else
echo "安装 ethtool..."
sudo apt-get install -y ethtool # Debian/Ubuntu
# sudo yum install -y ethtool # CentOS/RHEL
fi
# macOS 检查
if [[ "$(uname)" == "Darwin" ]]; then
echo "macOS 用户建议:"
echo " brew install ethtool"
echo " 或使用系统自带命令: system_profiler SPCardDataType"
fi
使用建议
-
快速查看(Linux):
cat /sys/class/net/eth0/speed
-
实时监控:
watch -n 1 "cat /sys/class/net/eth0/speed"
-
组合脚本:将上述 Python 脚本保存为
net_speed.py,chmod +x net_speed.py ./net_speed.py
这些脚本可以满足大部分获取网卡速率的需求,根据你的具体使用场景选择合适的方案即可。