如何在操作系统发送/接收数据包之前分析/拦截数据包?

时间:2009-09-21 23:54:17

标签: networking network-programming packet-capture

我一直想知道软件防火墙是如何工作的,并且希望能够编写我自己的自定义工具来分析或拦截数据包,然后再由操作系统发送或接收。我非常熟悉核心网络原则;如果我想编写适合网络堆栈的软件,我就不知道从哪里开始,类似于防火墙的方式。谁能给我一些指示?

如果可以使用C#完成,我会特别感兴趣,但我也可以使用其他语言。我主要关注Windows,但想知道是否还有任何跨平台库。

编辑使用NDIS驱动程序(正如Wireshark所做的那样)听起来是个不错的选择,Vista的数据包过滤功能听起来很整洁,但防火墙如何在Windows XP上实现?他们不必安装我所知道的特殊驱动程序。

4 个答案:

答案 0 :(得分:5)

在Windows Vista及更高版本中,您可能需要查看Windows Filtering Platform。在早期版本的Windows中,您需要使用过滤器驱动程序(链接到MSDN页面提到了WFP替换的技术。)

答案 1 :(得分:1)

我记得它涉及编写NDIS驱动程序。它实际上位于NIC(网络接口卡)的顶部,您可以完全控制NIC之前或之外的内容 - 直到以太网数据包级别。

使用C#无法实现。你真的需要使用C或C ++来完成这项任务。

<强>更新: 我最后在Window XP中做过这个。我从另一个响应中看到,如果您使用的是Windows Vista,那么有一个新的,从它看起来更简单的API。

答案 2 :(得分:1)

不确定它是否“在操作系统之前”,但请查看WireShark及其使用的库,libpcap

答案 3 :(得分:0)

看看WinPcap - 它使用NDIS驱动程序来实现其数据包过滤功能。这个库可能为您想要编写的任何数据包检查/防火墙程序提供了一个很好的基础,它是开源的。来自http://www.winpcap.org/docs/docs_40_2/html/group__internals.html

  

首先,捕获系统需要   绕过操作系统   协议栈才能访问   原始数据在网络上传输。   这需要在里面运行一部分   OS的内核,直接交互   与网络接口驱动程序。   这部分与系统有关,   在我们的解决方案中,它被实现为   一个名为Netgroup的设备驱动程序   包过滤(NPF);我们提供   不同版本的驱动程序   Windows 95,Windows 98,Windows ME,   Windows NT 4,Windows 2000和Windows   XP。这些驱动程序提供基本的   数据包捕获和   注射,以及更先进   像可编程过滤的那些   系统和监控引擎。该   第一个可以用来限制一个   捕获会话到一个子集   网络流量(例如,它是可能的   仅捕获ftp流量   由特定主机生成)   第二个提供了强大但   简单易用的机制来获得   有关流量的统计数据(例如,它是   可能获得网络负载或   之间交换的数据量   两位主持人)。