我想编写一段能够监控计算机上网络事件的代码。我希望能够随时知道TX缓冲区中包含的数据包数量。 由于我的计算机将扮演一个routeur的角色(确切地说是WiFi接入点),它不会自己生成数据包。因此,我可以获取所需的信息,只需计算我的计算机接收和发送的数据包的数量。
所以,我正在寻找能够追踪这类网络事件的API。我知道内核跟踪点,但我想找到更容易的东西,跟踪点看起来不容易使用,我必须知道发送或接收数据包时调用的确切内核函数... 难道不存在像API这样的信号吗?
感谢您的帮助:)
编辑:我发现了libpcap库,我很容易计算到达接口的数据包。但有没有办法计算另一个接口上的传出数据包?答案 0 :(得分:0)
我前段时间回答了一个问题(What do I need to build to directly access the Ethernet frame bits in the kernel level?),回复与您的问题相关: 在内核中你必须查看文件:http://lxr.free-electrons.com/source/net/core/dev.c,你会发现netif_rx用于从设备驱动程序接收帧。在那里你也可以提交发送功能(用后缀'xmit'完成)。
除了转到内核之外,您还有以下备选方案:pcap,数据包套接字,netfilter,ebtables。
答案 1 :(得分:0)
快速回答:
如果您的AP运行Linux,您可能需要查看以下各种文件:
/sys/class/net/<some interface>/statistics/
但是:您的问题不明确。
由于我的电脑将扮演一个路由器的角色(WiFi接入点 确切地说,它不会自己生成数据包。
错误:您的计算机及其界面将自行生成大量数据包 - 不仅仅是TCP / IP。首先,&#34;信标帧&#34; (通常每100毫秒一个)发出AP的信号。无论是否连接了STA,都会发送这些信息。
还会有&#34;管理&#34;您的AP发送的数据包作为对STA要求的响应:
之后,是的,会有实际的说法&#34; applicatives&#34; STA之间传输的数据包(全部通过路由器AP)。
如果这些 您真正想要计算的数据包,那么您的第一个问题就是将它们与其他所有&#34;基础设施&#34;区分开来。我在上面提到的接口所携带的数据包(不仅仅是在术语的802.11基础设施模式中)。 因此,您的要求与低级别信息(&#34;任何时间TX缓冲区中包含的数据包数量&#34;)和高级别错误预设之间存在固有的矛盾(&#34;因为我的计算机将扮演一个routeur的角色(确切地说是WiFi接入点)它不会自己生成数据包&#34;)。
这是一个完全不同的问题,然后只是每个接口的数据包计费,你需要某种DPI(深度数据包检测),pcap可以在这里使用,或者在TCP / IP上进行排序和couting每个接口或IP(子)网络的级别,netfilter / iptables可以提供帮助。但是我希望我明确表示你越深入(在内核/接口/接口驱动程序中),越多&#34;噪音&#34;您似乎对您感兴趣的数据包不会得到。