在c中捕获网络数据包

时间:2011-09-22 19:38:22

标签: c networking packet low-level-api

这个问题可能听起来很愚蠢,因为我知道有很多框架可以帮到你。我想要的是实际上与低级C API深入接触并能够编写一个位于计算机上的程序并拦截本地机器和外部空间之间的数据包。我试着通过查看开源代码(即tcpdump)来解决这个问题,但是我很难找到哪个文件实际执行网络嗅探。任何建议,将不胜感激 !

2 个答案:

答案 0 :(得分:3)

你必须使用原始套接字。这是一个example。 至少对于Linux和Unix这样的操作系统有什么关系。我不了解Windows。

答案 1 :(得分:1)

如果您使用的是基于UNIX的系统[*],那么最简单的机制是libpcap,它是tcpdump项目的一部分。

您的进程需要root权限才能访问网络接口(原始套接字也是如此)。

通常,您最终必须自己解码以太网帧,IP头等,但对于大多数协议而言,这不是

[*]它实际上也适用于Win32,但我自己并没有在Windows下使用它。