Python 网络带宽监控器

9 投票
5 回答
34284 浏览
提问于 2025-04-17 20:13

我正在用Python开发一个程序,其中有一个功能可以告诉用户自从程序打开以来他们使用了多少带宽(不仅仅是程序内部的使用,还包括在程序打开期间的正常网页浏览)。这个输出需要在GTK界面上显示。

请问有没有现成的解决方案?如果没有,你能给我一些建议吗?看起来我需要修改一个现有的代理脚本,比如pythonproxy,但我不太明白该怎么用。

谢谢!

5 个回答

3

嗯,不太确定有没有现成的(用Python写的)东西,但你可以看看以下这些。

  1. 带宽监控(这个项目不是很活跃,但可能会给你一些灵感)。

  2. Munin监控(这是一个基于Perl的网络监控项目)。

  3. ntop(这个是用C/C++写的,基于libpcap)。

另外,如果你想自己动手做点什么,可以试试用 sudo cat /proc/net/dev 来统计和存储数据包。

6
import time

def get_bytes(t, iface='wlan0'):
    with open('/sys/class/net/' + iface + '/statistics/' + t + '_bytes', 'r') as f:
        data = f.read();
        return int(data)

while(True):
    tx1 = get_bytes('tx')
    rx1 = get_bytes('rx')

    time.sleep(1)

    tx2 = get_bytes('tx')
    rx2 = get_bytes('rx')

    tx_speed = round((tx2 - tx1)/1000000.0, 4)
    rx_speed = round((rx2 - rx1)/1000000.0, 4)

    print("TX: %fMbps  RX: %fMbps") % (tx_speed, rx_speed)

应该可以工作

17

为了完成我的任务,我写了一个非常简单的解决方案,使用了psutil这个库:

import time
import psutil

def main():
    old_value = 0    

    while True:
        new_value = psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv

        if old_value:
            send_stat(new_value - old_value)

        old_value = new_value

        time.sleep(1)

def convert_to_gbit(value):
    return value/1024./1024./1024.*8

def send_stat(value):
    print ("%0.3f" % convert_to_gbit(value))

main()

撰写回答