【问题标题】:Hooking network functions using a driver, a high-level overview?使用驱动程序挂钩网络功能,高级概述?
【发布时间】:2011-10-26 20:04:27
【问题描述】:

我刚刚编写了我的第一个 Windows 驱动程序(还没有注册它 - 但我设法创建了东西!)。

我想知道是否有人可以对我如何实现以下目标进行简要概述:

我想编写一个驱动程序,它会在计算机接收到网络数据包时实现一些行为,在 Windows 对数据包执行操作之前,我想获取这些数据并将其输出到控制台C 或 C++ 程序。

假设我编写了一个带有控制台的 C/C++ 程序。 C/C++ 程序如何与我编写的挂钩网络活动的驱动程序交互?是否只是一些调用我的驱动程序的 C 代码,该函数将数据作为对象返回,然后我可以使用该对象在控制台中显示?

提前感谢您的任何可能的回复

【问题讨论】:

    标签: c windows kernel driver


    【解决方案1】:

    您不需要驱动程序来执行此任务。使用像PCap 这样的数据包嗅探器库(实际上你需要WinPCap)。捕获数据包并将它们打印到控制台非常简单。

    另一种方法是原始套接字。但桌面 Windows(与 Windows Server 相对)限制了原始套接字功能。

    【讨论】:

    • 我想在“windows”之前得到数据包,我对高频交易很感兴趣,所以我想尝试编写非常低级的程序。说了这么多,还写驱动有意义吗?
    • PCap 非常低级,因为它提供了您尝试实现的驱动程序,以及与用户模式应用程序的接口。为什么还要这样做?
    • 我没有意识到,我认为 winpcap 是一个包含许多多余功能的包装器,这会使事情变慢。那么您是否认为(假设他们使用 C 或 C++)开发 HF 交易平台的人也会在 linux 上使用 pcap,因为编写驱动程序毫无意义?还是有一些使用驱动程序的性能专家?
    • 是的,它也可以在 Linux 上使用。是的,编写自己的驱动程序或使用 pcap 的性能存在很大差异,但我的意思是开发速度;)人们使用 PCap 嗅探重载千兆网络这一事实可能会让您相信 PCap 已经足够好。它有一个无价的特性——过滤能力。自己实现它是一件很棒的事情。
    【解决方案2】:

    如果您真的需要驱动程序,或者需要在数据包到达 Windows 网络堆栈之前对其进行操作或过滤,您需要查看过滤驱动程序。

    然后,此过滤器驱动程序可以公开您的用户空间应用程序可以读取/写入的设备文件。 windows DDK 包含示例。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多