C - 跟踪网络事件 - Lib pcap

时间:2016-02-26 07:27:16

标签: c networking network-programming

我想编写一段能够监控计算机上网络事件的代码。我希望能够随时知道TX缓冲区中包含的数据包数量。 由于我的计算机将扮演一个routeur的角色(确切地说是WiFi接入点),它不会自己生成数据包。因此,我可以获取所需的信息,只需计算我的计算机接收和发送的数据包的数量。

所以,我正在寻找能够追踪这类网络事件的API。我知道内核跟踪点,但我想找到更容易的东西,跟踪点看起来不容易使用,我必须知道发送或接收数据包时调用的确切内核函数... 难道不存在像API这样的信号吗?

感谢您的帮助:)

编辑:我发现了libpcap库,我很容易计算到达接口的数据包。但有没有办法计算另一个接口上的传出数据包?

2 个答案:

答案 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;探测响应&#34;您将发送作为回复&#34;探测请求&#34;发送 您可以在AP中找到潜在的ST网页。
  • 然后在之间交换连接和认证帧(来自WPA2) 您的AP(hostapd可能?)和STA。
然后 然后 我们进入TCP / IP数据包的世界。但是我们还没有完成管道工程:之后,既然你是路由器,我想它也运行一个DHCP服务器,所以会有DHCP提供作为对DHCP请求的响应。

之后,是的,会有实际的说法&#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;您似乎对您感兴趣的数据包不会得到。