怎么用脚本获取网卡速率

wen 实用脚本 3

本文目录导读:

怎么用脚本获取网卡速率

  1. Linux/macOS 命令行方案
  2. Windows PowerShell 方案
  3. 跨平台 Python 方案(推荐)
  4. 实时流量监控脚本
  5. 安装依赖的辅助脚本
  6. 使用建议

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

使用建议

  1. 快速查看(Linux):

    cat /sys/class/net/eth0/speed
  2. 实时监控

    watch -n 1 "cat /sys/class/net/eth0/speed"
  3. 组合脚本:将上述 Python 脚本保存为 net_speed.py

    chmod +x net_speed.py
    ./net_speed.py

这些脚本可以满足大部分获取网卡速率的需求,根据你的具体使用场景选择合适的方案即可。

抱歉,评论功能暂时关闭!