【问题标题】:How to analyze/intercept packets before they are sent/received by the OS?如何在操作系统发送/接收数据包之前分析/拦截数据包?
【发布时间】:2009-09-21 23:54:17
【问题描述】:

我一直想知道软件防火墙是如何在幕后工作的,并且希望能够编写自己的自定义工具来分析或拦截操作系统发送或接收的数据包。我相当熟悉核心网络原则;如果我想编写适合网络堆栈的软件,就像防火墙那样,我只是不知道从哪里开始。谁能给我一些指点?

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

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

【问题讨论】:

    标签: networking network-programming packet-capture


    【解决方案1】:

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

    【讨论】:

    • +1 非常感谢,找这个API很久了。
    【解决方案2】:

    我记得它涉及编写 NDIS 驱动程序。这实际上位于 NIC(网络接口卡)的顶部,您可以绝对控制进出 NIC 的内容,然后再进行其他任何操作 - 一直到以太网数据包级别。

    这不能用 C# 来完成。您确实需要使用 C 或 C++ 来完成这项任务。

    更新: 我最后一次这样做是在 Window XP 时代。我从另一个响应中看到,如果您使用的是 Windows Vista 及更高版本,则有一个新的、看起来更简单的 API。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我不认为 libpcap 可以选择在发送之前丢弃或修改数据包。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-09
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        相关资源
        最近更新 更多