代码之家  ›  专栏  ›  技术社区  ›  Phil

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

  •  3
  • Phil  · 技术社区  · 17 年前

    我一直想知道软件防火墙是如何在保护层下工作的,并且希望能够在操作系统发送或接收数据包之前编写自己的自定义工具来分析或拦截数据包。我相当熟悉核心网络原则;如果我想编写类似于防火墙的软件,我就不知道从哪里开始。有人能给我指点一下吗?

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

    编辑 使用NDIS驱动程序(就像wireshark一样)听起来是一个不错的选择,而且Vista的包过滤功能听起来很不错,但是防火墙在WindowsXP上是如何做到的呢?他们不必安装我所知道的特殊驱动程序。

    4 回复  |  直到 17 年前
        1
  •  5
  •   Michael    17 年前

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

        2
  •  1
  •   Colin Mackay    17 年前

    我记得这涉及到写一个NDIS驱动程序。它实际上位于网卡(network interface card)的顶部,您可以完全控制网卡中的输入或输出内容,而无需进行其他操作——直接到以太网包级别。

    这不能用C完成。你真的需要使用C或C++来完成这个任务。

    更新 以下内容: 我上一次这样做是在WindowsXP的日子里。我从另一个响应中看到了一个新的,并且从外观上看,如果您使用的是WindowsVista以后的版本,那么API会更简单。

        3
  •  1
  •   Tim Sylvester    17 年前

    不确定是不是“在O/S之前”,但请看一下 WireShark 它使用的图书馆, libpcap .

        4
  •  0
  •   We Are All Monica    17 年前

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

    首先,捕获系统需要 绕过操作系统的 协议栈以便访问 在网络上传输原始数据。 这需要一部分在内部运行 操作系统的核心,直接交互 使用网络接口驱动程序。 这部分非常依赖于系统, 在我们的解决方案中, 称为netgroup的设备驱动程序 包过滤器(NPF);我们提供 驱动程序的不同版本 Windows 95、Windows 98、Windows Me, Windows NT 4、Windows 2000和Windows XP。这些驱动程序提供两种基本功能 包捕获和 注射,以及更先进的 像可编程过滤 系统和监控引擎。这个 第一个可以用来限制 将会话捕获到 网络流量(例如 只捕获FTP流量 由特定主机生成) 第二个提供了强大的 简单易用的获取机制 交通统计(例如 可能获得网络负载或 数据交换量 两个主机)。