【发布时间】:2016-02-26 07:27:15
【问题描述】:
我想编写一段能够在计算机上监控网络事件的代码。我希望能够随时知道 TX 缓冲区中包含的数据包数量。 由于我的计算机将扮演路由器的角色(准确地说是 WiFi 接入点),因此它不会自行生成数据包。因此,我只需计算计算机接收和发送的数据包数量即可获得所需的信息。
所以,我正在寻找一种能够跟踪此类网络事件的 API。我知道内核跟踪点,但我想找到一些更简单的东西,跟踪点看起来不容易使用,我必须知道发送或接收数据包时调用的确切内核函数...... 难道没有像API这样的信号能够做到这一点吗?
感谢您的帮助:)
编辑:我找到了 libpcap 库,通过它我可以轻松地计算到达接口的数据包。但是有没有办法计算另一个接口上的传出数据包?
【问题讨论】:
-
这个怎么样,使用system()读取“ifconfig
”的输出,然后解析需要的数据? -
感谢您的想法,但我认为 ifconfig 不够快。我刚刚测试过用一个简单的脚本转储 ifconfig 的输出。并且无法跟踪信息,每次发送或接收的数据包返回值都不会改变
-
那么“netstat -s”怎么样?
-
它看起来更具反应性,但仍然不够。我想我会尝试使用 pcap 库。我看到它现在可以将数据包放在链接上。我会尝试拦截传入的数据包,然后将它们放在另一个接口中
-
import os,sys import subprocess flag = 0 def main(): global flag command = ['ifconfig', 'wlan0'] p = subprocess.Popen(command, stdout=subprocess. PIPE) text = p.stdout.read() temp = text.split(' ') for x in temp: if "packets" in x: if flag == 0: print "RX",x flag = 1 else: print "TX",x main()我知道你想要在 C 中使用它,但作为概念证明,我在 Python 中尝试过它并且它有效。
标签: c networking network-programming