本文目录导读:

使用Python + psutil(推荐)
import psutil
import time
from datetime import datetime
def monitor_network_usage(interval=1):
"""监控网络流量"""
old_value = psutil.net_io_counters()
try:
while True:
new_value = psutil.net_io_counters()
# 计算每秒传输的字节数
sent_per_sec = (new_value.bytes_sent - old_value.bytes_sent) / interval
recv_per_sec = (new_value.bytes_recv - old_value.bytes_recv) / interval
# 转换为更易读的格式
sent = format_bytes(sent_per_sec)
recv = format_bytes(recv_per_sec)
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{timestamp}] 上传: {sent}/s | 下载: {recv}/s")
old_value = new_value
time.sleep(interval)
except KeyboardInterrupt:
print("\n监控已停止")
def format_bytes(bytes):
"""将字节转换为人类可读格式"""
for unit in ['B', 'KB', 'MB', 'GB']:
if bytes < 1024.0:
return f"{bytes:.2f} {unit}"
bytes /= 1024.0
return f"{bytes:.2f} TB"
if __name__ == "__main__":
monitor_network_usage()
监控特定网卡流量
import psutil
import time
def monitor_specific_interface(interface_name):
"""监控特定网卡的流量"""
old_counter = psutil.net_io_counters(pernic=True).get(interface_name)
if not old_counter:
print(f"网卡 {interface_name} 不存在")
return
print(f"开始监控网卡: {interface_name}")
print("=" * 50)
try:
while True:
time.sleep(1)
new_counter = psutil.net_io_counters(pernic=True).get(interface_name)
if new_counter:
sent = (new_counter.bytes_sent - old_counter.bytes_sent) / 1024
recv = (new_counter.bytes_recv - old_counter.bytes_recv) / 1024
print(f"上传: {sent:.2f} KB/s | 下载: {recv:.2f} KB/s")
old_counter = new_counter
except KeyboardInterrupt:
print("\n监控结束")
# 获取可用网卡列表
def list_interfaces():
interfaces = psutil.net_io_counters(pernic=True)
return list(interfaces.keys())
# 使用示例
if __name__ == "__main__":
interfaces = list_interfaces()
print("可用网卡:", interfaces)
if interfaces:
monitor_specific_interface(interfaces[0]) # 监控第一个网卡
Shell脚本方式
#!/bin/bash
# 简单的网络流量监控脚本
INTERVAL=1
# 获取初始值
OLD_RX=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
OLD_TX=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
while true; do
sleep $INTERVAL
NEW_RX=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
NEW_TX=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
RX_RATE=$(( ($NEW_RX - $OLD_RX) / $INTERVAL ))
TX_RATE=$(( ($NEW_TX - $OLD_TX) / $INTERVAL ))
# 转换为KB
RX_KB=$(echo "scale=2; $RX_RATE / 1024" | bc)
TX_KB=$(echo "scale=2; $TX_RATE / 1024" | bc)
echo "$(date '+%Y-%m-%d %H:%M:%S') 下载: ${RX_KB}KB/s 上传: ${TX_KB}KB/s"
OLD_RX=$NEW_RX
OLD_TX=$NEW_TX
done
高级版:带日志和统计功能
import psutil
import time
import json
import csv
from datetime import datetime, timedelta
from collections import deque
class NetworkMonitor:
def __init__(self, log_file="network_traffic.csv", history_size=60):
self.log_file = log_file
self.history = deque(maxlen=history_size)
self.init_log_file()
def init_log_file(self):
"""初始化日志文件"""
try:
with open(self.log_file, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['timestamp', 'sent_bytes', 'recv_bytes', 'sent_rate', 'recv_rate'])
except:
print(f"无法创建日志文件: {self.log_file}")
def log_traffic(self, data):
"""记录流量数据"""
try:
with open(self.log_file, 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow([
data['timestamp'],
data['total_sent'],
data['total_recv'],
data['sent_rate'],
data['recv_rate']
])
except:
pass
def get_statistics(self):
"""获取统计信息"""
if len(self.history) < 2:
return None
rates = [h['recv_rate'] for h in self.history if h['recv_rate'] > 0]
if rates:
return {
'avg_recv': sum(rates) / len(rates),
'max_recv': max(rates),
'min_recv': min(rates),
'total_records': len(self.history)
}
return None
def start_monitoring(self, interval=1):
"""开始监控"""
print("网络流量监控开始...")
print("=" * 60)
old_counters = psutil.net_io_counters()
try:
while True:
time.sleep(interval)
new_counters = psutil.net_io_counters()
# 计算速率
sent_rate = (new_counters.bytes_sent - old_counters.bytes_sent) / interval
recv_rate = (new_counters.bytes_recv - old_counters.bytes_recv) / interval
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 准备数据
data = {
'timestamp': timestamp,
'total_sent': new_counters.bytes_sent,
'total_recv': new_counters.bytes_recv,
'sent_rate': sent_rate,
'recv_rate': recv_rate
}
# 添加到历史记录
self.history.append(data)
# 记录日志
self.log_traffic(data)
# 显示信息
print(f"[{timestamp}]", end=" ")
print(f"上传: {self._format(sent_rate)}/s | 下载: {self._format(recv_rate)}/s", end=" ")
# 显示统计信息
stats = self.get_statistics()
if stats:
print(f"| 平均下载: {self._format(stats['avg_recv'])}/s", end="")
print()
old_counters = new_counters
except KeyboardInterrupt:
print("\n监控已停止")
self.show_summary()
def _format(self, bytes_per_sec):
"""格式化显示"""
for unit in ['B', 'KB', 'MB', 'GB']:
if bytes_per_sec < 1024:
return f"{bytes_per_sec:.2f} {unit}"
bytes_per_sec /= 1024
return f"{bytes_per_sec:.2f} TB"
def show_summary(self):
"""显示统计摘要"""
print("\n" + "=" * 60)
print("监控摘要:")
if self.history:
total_sent = self.history[-1]['total_sent'] - self.history[0]['total_sent']
total_recv = self.history[-1]['total_recv'] - self.history[0]['total_recv']
print(f"总上传量: {self._format(total_sent)}")
print(f"总下载量: {self._format(total_recv)}")
print(f"监控时长: {len(self.history)} 秒")
print(f"日志文件: {self.log_file}")
if __name__ == "__main__":
monitor = NetworkMonitor()
monitor.start_monitoring(interval=2) # 每2秒更新一次
安装依赖
# Python方案需要安装psutil pip install psutil # 如果使用虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows pip install psutil
使用建议
-
选择合适的工具:
- 简单监控:使用Shell脚本
- 需要统计分析:使用Python方案
- 长期记录:使用带日志功能的版本
-
性能考虑:
- 监控间隔不要太小(建议1-5秒)
- 避免频繁写日志(可以批量写入)
-
扩展功能:
- 添加告警功能(流量超过阈值时通知)
- 支持多网卡同时监控
- 添加Web界面显示
需要根据具体需求选择合适的脚本版本。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播