V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
linuxzpf
V2EX  ›  Python

python 怎么获取 windows7 上的网络上下行数据 ?

  •  
  •   linuxzpf · 2015-03-16 11:17:14 +08:00 · 4330 次点击
    这是一个创建于 3525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.之前用了psutil模块,后来发现psutil.network_io_counters()在win7上有bug,每次取到的都是相同的数据。所以考虑换其他的方式来获取。
    2.现在可以选择的有wmi模块,但是听说效率很低。直接用WMIC取得话又不是所有的win上都有这个东东。

    好纠结,求指导。最好能show me the code!
    TKS

    16 条回复    2015-03-17 10:01:46 +08:00
    dant
        1
    dant  
       2015-03-16 11:23:46 +08:00 via iPhone
    winpcap
    dant
        2
    dant  
       2015-03-16 11:24:26 +08:00 via iPhone
    似乎楼主的需求不是抓包?那就不知道了
    linuxzpf
        3
    linuxzpf  
    OP
       2015-03-16 11:32:31 +08:00
    @dant 不是抓包啦,是获取实时的上传和下载数据。
    roricon
        4
    roricon  
       2015-03-16 11:47:56 +08:00
    在一台linux的机器上把网卡开启混杂模式……然后监听本地局域网的通讯呢?
    hahastudio
        5
    hahastudio  
       2015-03-16 12:00:36 +08:00
    我不知道是不是它内部有刷新时间还是什么的,但我这里没问题

    >>> psutil.net_io_counters()
    snetio(bytes_sent=514669575, bytes_recv=440756437, packets_sent=759901, packets_recv=740639, errin=0, errout=0, dropin=0, dropout=0)
    >>> psutil.net_io_counters()
    snetio(bytes_sent=514670215, bytes_recv=440759928, packets_sent=759911, packets_recv=740650, errin=0, errout=0, dropin=0, dropout=0)

    间隔是 ctrl + c/v 的间隔
    linuxzpf
        6
    linuxzpf  
    OP
       2015-03-16 12:14:12 +08:00
    @roricon 网络是没有问题的,额。。。360都显示的出网络上下行速率,关键是要取到这些数据。
    linuxzpf
        7
    linuxzpf  
    OP
       2015-03-16 12:15:37 +08:00
    @hahastudio 这个时间间隔是就是你2次执行的时间间隔,大部分都可以取到,怪就怪在我的取不到哇。只能看看有木有其他方法。
    loading
        8
    loading  
       2015-03-16 12:20:13 +08:00
    python 速度跟不上,做了白做。
    linuxzpf
        9
    linuxzpf  
    OP
       2015-03-16 12:42:10 +08:00
    @loading 没这么夸张吧
    loading
        10
    loading  
       2015-03-16 12:46:12 +08:00
    http://stackoverflow.com/questions/438240/monitor-a-processs-network-usage

    如果你只需要速度,可以调用另一个软件,这也是 python 编程的特点。
    你要原生的话,等大神!
    linuxzpf
        11
    linuxzpf  
    OP
       2015-03-16 14:33:17 +08:00
    @loading 这个netstat -e这个命令不错啊,就是不知道是不是所有的windows系统上都有
    这个是系统自带的命令吧。
    syv2
        12
    syv2  
       2015-03-16 17:04:50 +08:00
    tcpdump好像也有Windows版呢
    cfan8
        13
    cfan8  
       2015-03-16 18:42:49 +08:00
    用windows api改路由表,把流量都走你的python proxy上走,不过性能怎么样就难说了
    lingxi27
        14
    lingxi27  
       2015-03-16 18:45:33 +08:00
    调windows API吧

    import win32api

    然后去MSDN看看GetAdaptersInfo 和 GetIfEntry的用法
    linuxzpf
        15
    linuxzpf  
    OP
       2015-03-16 19:43:09 +08:00
    @lingxi27 这个就有点复杂了嘛,MSND也没有取网络上下行的函数好像。
    lingxi27
        16
    lingxi27  
       2015-03-17 10:01:46 +08:00
    @linuxzpf 你真的去看了吗,我给你的这两个api可以满足你的需求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5405 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:55 · PVG 14:55 · LAX 22:55 · JFK 01:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.