windows - 如何在 Windows 中挂接 TCP 堆栈以嗅探和修改数据包?

标签 windows sockets packet-capture winpcap sniffer

我想为 Windows 编写数据包嗅探器和编辑器。我希望能够看到进入和离开我的系统的所有数据包的内容,并可能修改它们。任何语言都可以,但我希望它运行得足够快,不会给系统带来负担。

我读过一些关于 WinPcap 的资料,但文档声称您不能使用 WinPcap 创建防火墙,因为它不能丢弃数据包。哪些工具可以帮助我编写此软件?

最佳答案

在那里,完成了 :-) 回到 2000 年,我的第一个 Windows 程序是 filter hook driver .

我所做的是实现过​​滤器 Hook 驱动程序并编写一个用户空间应用程序,该应用程序准备了一个关于允许什么和禁止什么的过滤器表。当您绕过最初的一组蓝屏时(请参阅下面的内核模式调试提示),过滤模式驱动程序非常易于使用……它将每个数据包提供给您编写的函数,并根据返回码将其丢弃或让它过去。

不幸的是,该级别的数据包非常原始,没有重新组装片段,它看起来更像是事物的“网卡”端(但不再有以太网 header )。因此,您将很难解码数据包以使用该解决方案进行过滤。

还有防火墙 Hook 驱动程序,如本 codeproject article 中所讨论.

如果您使用的是 Vista 或 Server 2008,您最好看看 WFP (Windows Filtering Platform),这似乎是当今编写防火墙的强制 API。 除了几分钟前我在谷歌上搜索过滤器 Hook 驱动程序时谷歌搜索它之外,我不知道它。

更新:忘记调试提示:

Sysinternals DbgView 显示内核模式 DbgPrint 输出,更重要的是 - 它还可以从上次蓝屏产生的转储文件中读取它们。所以用 dbgprint 喷洒你的代码,如果它出现蓝屏,只需将转储加载到 dbgview 中,看看它死前发生了什么……非常有用。使用这个我在没有内核调试器的情况下进行了管理。

关于windows - 如何在 Windows 中挂接 TCP 堆栈以嗅探和修改数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695057/

相关文章:

C++ OpenSSL HMACSHA1 可以工作,但不是我想要的

windows - 一般性保护错误

linux - 引用 dotnetcore classlib 中的共享项目,并在 windows 和 linux 上进行构建

c# - 是否有一种优雅的方式可以每天、每晚或按计划重新启动 Topshelf 服务?

c++ - 使用 cmake 和 mingw 在 mac OSX 上交叉编译 dll

sockets - 如何通过套接字连接到虚拟机

java - C++/Java 套接字自动端口分配

networking - 互联网 RFC 数据包图中的预期位(不是字节)顺序

wireshark - 在 WireShark 捕获的 PCap 文件中搜索 unicode 字符串 (UTF-16)

sockets - TCP客户端用于连接服务器的端口是否对其他TCP服务器不可用