如何在 Windows 中挂钩 TCP 堆栈来嗅探和修改数据包?

2023-12-21

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

我读过一些有关 WinPcap 的内容,但文档声称您不能使用 WinPcap 创建防火墙,因为它不能丢弃数据包。什么工具可以帮助我编写这个软件?


在那里,完成了 :-) 早在 2000 年,我的第一个 Windows 程序就是过滤器钩子驱动程序 http://msdn.microsoft.com/en-us/library/aa504969.aspx.

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

不幸的是,该级别的数据包是相当原始的,碎片不会重新组装,它看起来更像是“网卡”末端(但不再有以太网标头)。因此,使用该解决方案解码数据包以进行过滤会非常困难。

还有防火墙挂钩驱动程序,如此处讨论的代码项目文章 http://www.codeproject.com/KB/IP/FwHookDrv.aspx.

如果您使用的是 Vista 或 Server 2008,您最好看看 WFP (Windows过滤平台 http://www.microsoft.com/whdc/device/network/wfp.mspx)相反,这似乎是当今编写防火墙的强制 API。 除了几分钟前我在谷歌上搜索过滤器挂钩驱动程序时谷歌将其打开之外,我不知道这一点。

更新:忘记了调试提示:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 中挂钩 TCP 堆栈来嗅探和修改数据包? 的相关文章

  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS
  • 具有类型推断功能的 Lisp 静态类型方言,适用于 Windows?

    是否有静态类型的 Lisp 方言可以执行类型推断并与 Windows 兼容 我找到了 CMUCL 但它似乎没有 Windows 兼容版本 看一下SBCL http www sbcl org它源自 CMUCL 它通过类型声明对静态类型提供良好
  • 按名称显示进程的命令行

    我在cmd中使用以下命令来获取进程命令行 它提供了所有流程的详细信息 WMIC OUTPUT C ProcessList txt PROCESS get Caption Commandline Processid 我想在记事本中按名称获取特
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • Mac + Ruby:无法访问 Socket 的 ioctl?怎么修?

    一天中的好时光 红宝石代码 def hw address iface sock Socket new Socket AF INET Socket SOCK DGRAM 0 buf iface pack a16h16 sock ioctl S
  • 套接字错误 10054

    我有一个C S程序 客户端使用socket向服务器发送文件 发送后大约超过700k数据 客户端 在win7上 将收到套接字10054错误 这意味着连接被对等方重置 服务器运行在CentOS 5 4上 客户端是在virtual box中运行的
  • Chrome 扩展 - 消息传递到批处理文件

    我使用了示例项目https developer chrome com extensions samples https developer chrome com extensions samples我能够运行 python 本机应用程序 有
  • Powershell:获取 FQDN 主机名

    我想通过 powershell 脚本检索 Windows 服务器的 FQDN 名称 到目前为止我已经找到了2个解决方案 server Invoke Command ScriptBlock hostname 上面的行将仅打印服务器的短名称 s
  • .NET 中安全身份的本地化

    我想在 NET 中实现一个用于服务 客户端通信的命名管道 并遇到了这段代码 http code msdn microsoft com windowsdesktop CSNamedPipeCommunication 33b2485c view
  • 当调用dll函数时,参数对象的成员变量的内存地址发生变化

    类某类 一些成员MemberClass one of the mem 我有一个函数foo SomeClass object 在 dll 中 它是从 exe 调用的 Problem 地址one of the mem 在调度 dll 调用期间发
  • 为什么某些安装程序需要在运行程序之前重新启动计算机?

    我对部署桌面应用程序相当陌生 所以这是我第一次为我的软件构建安装程序 目前 我安装软件后第一次运行它时 它崩溃了 之后 它运行良好 我仍在调试此问题 但我注意到在安装后和运行软件之前立即重新启动似乎可以修复此崩溃 某些安装程序要求您在运行软
  • Docker Desktop 不会切换到 Windows 容器(在 Windows 10 上)

    我有 Windows 10 专业版 版本 21H1 BIOS 中已启用虚拟化 Hyper V 正在运行 我已经安装了适用于 Windows 的 Docker Desktop 如上所述here https docs docker com de
  • Windows 10:任务栏中的图标大小错误

    从 Windows 10 开始 任务栏中的图标大小似乎为 24x24px 如果 Windows 选择图标文件中的 24px 版本进行显示 那么这不会有问题 但它选择了 32px 版本并将其缩小 这会导致丑陋的伪像 尤其是当你的图标中有直线时
  • 如何在 Windows 上使用命令行获取 svn 修订信息

    我正在尝试使用此命令行获取头部的修订信息 svn info https myserver branches Code Improvements rHEAD find Revision 然而 这返回修订版 1234 由于我使用 svn inf
  • 使用 Windows 命令行将多行环境变量回显到文本文件

    我有一个环境变量 SSH PRIVATE KEY 并希望使用命令行将其打印到文件中 而不使用批处理文件 这是因为我需要在 Gitlab Ci yml 脚本中使用此文件 在 Linux 中 这很简单 echo SSH PRIVATE KEY
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • 如何通过文件关联执行已启动应用程序的事件?

    在尝试了一个新的 Windows 窗体项目后 我发现当您将文件类型与 Windows 中的可执行文件关联时 您可以使用以下命令找到启动应用程序的文件的文件路径args 0 from static void Main string args
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • 有什么理由不在Python中混合使用多处理和线程模块

    我正在考虑使用Python来实现一个需要大量多线程的程序 另一个要求是它将在桌面上运行 因此拥有许多进程将使应用程序显得混乱且难以杀死 在任务管理器中 因此 我正在考虑使用线程和多处理模块来减少进程数量 据我了解 GIL 仅适用于单个进程

随机推荐

  • 无效的视图状态、Base-64 字符数组或字符串的长度无效

    我时不时会遇到这个错误 ExecuteStep at line 0 at Column 0 状态信息对此页无效 并且可能已损坏 无效的视图状态 内部异常 Application Error 中未处理的异常 在加载行 0 和列 0 Base
  • 动态链接和动态加载有什么区别

    我认为 动态加载意味着在加载或运行时将库 或任何其他二进制文件 加载到内存中 因此 在下面的程序中 当 dlopen 调用的动态加载器将出现时 如果库尚未加载 它将把库加载到内存中 动态链接是指在加载或运行时完成的链接 它解决了外部引用 因
  • Laravel TokenMismatchException 会话超时

    我遇到一个问题 当用户闲置超过 24 小时 我的会话超时 或者离开网站并在 24 小时后返回时 他们不会从网站注销 但他们的会话正在被注销已过期 或者至少他们的 token 不再有效 这会导致不必要的行为 就好像用户在 token 过期后提
  • MAC:Mono Helloworld 示例

    我在 OSX Yosemite 上全新安装了 Mono 并尝试了以下示例http www mono project com docs getting started mono basics http www mono project com
  • eclipse 上“资源”目录放在哪里

    我的项目是一个 Eclipse Java 项目 它的结构是 游戏 src 游戏 资源 但这段代码返回一个异常 image new ImageIcon new URL resources Monster png java net Malfor
  • 在沙盒中哪里可以找到奇点定义文件

    我正在尝试学习奇点 所以我从他们的库中提取了这个例子 singularity pull library sylabsed examples lolcow 拉取后 我想检查该映像内的目录是什么 以及是否有任何用于构建映像的定义文件 因此我通过
  • 在网页上渲染 PDF

    我们正在尝试使用以下方式在网络浏览器中加载 pdf 文件pdf对象 http pdfobject com JavaScript API 目前我们尝试显示的 pdf 大小接近 10MB 这会导致网页上显示 PDF 时出现较长的延迟 同时下载完
  • Jackson无限循环多对一一对多关系

    我有两个模型 Parent id name childrenIds 1 parent1 1 2 2 parent2 3 Child id parentId 1 1 2 1 3 2 当我尝试使用 Jackson 序列化此模型时 发生堆栈溢出错
  • 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

    可以找到 Cipher nsdl crypto 中的所有文件here http nsdeleon wikispaces com file detail crypto zip用gcj编译的java文件 参见compile sh nmint n
  • 告诉 Gradle 检查两个目录中的主要 java 源代码

    我有一个充满测试的项目 我们用它来查询我们的环境 我们使用 Gradle 运行这些测试 我想从独立应用程序运行这些测试以摆脱 Gradle 依赖性 我正在使用 gradle application 插件并尝试使用 JUnitCore 运行
  • Automapper 在 Profile 类中注入 DbContext

    我有以下映射配置文件 public class DomainProfile Profile private FootballPredictionsContext m Context public DomainProfile Football
  • Android(Mobile)视觉相机亮度很低

    我已将谷歌视觉集成到我的项目中 如下文所示 http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680 http code
  • 构建静态链接的Boost (MinGW)

    我正在使用 bjam 为 MinGW 构建 Boost 我正在使用系统和文件系统 bjam toolset gcc stage 它构建得很好 但我希望能够静态链接到它 我必须为最终产品提供一个文件 所以我尝试了 bjam link stat
  • 使用 auth0-react 库时访问令牌的格式似乎不正确

    我正在关注这篇博文 https auth0 com blog complete guide to react user authentication 关于如何使用auth0 react 库 https github com auth0 au
  • Android - 将除某些警告之外的所有 lint 警告设置为错误

    当新的 lint 警告不在其中时 我试图使我的持续集成使构建失败lint baseline xml文件有介绍 我希望将所有 lint 警告视为错误 因此构建被中止 但我想要一种方法来指定某些 lint 检查被视为信息或警告级别 以便它们仍然
  • 从 Fancybox 打开 Fancybox 并关闭父级

    我有 fancybox 麻烦 我的产品正在 fancybox 中打开 并且内容中有相关产品 当用户单击相关链接并在新的 fancybox 中打开产品时 我想关闭 fancybox 谢谢你们的帮助 但它不起作用 产品在没有 fancybox
  • C++ 中的全局枚举

    好吧 我想将地形枚举定义为 enum terrain MOUNTAIN GRASS 或者其他的东西 我如何使这个枚举在我的项目中的所有类中定义 把你的enum头文件中的声明 地形 h ifndef TERRAIN H define TERR
  • 在 JavaScript 中强制重新加载并跳过 Service Worker

    Service Worker 可能会干扰刷新按钮 按设计 在桌面版 Chrome 上 您可以按住 Shift 键并单击刷新按钮来执行硬重新加载 而忽略任何已安装的 ServiceWorker 有没有办法强制重新加载而忽略 JavaScrip
  • Android:为什么必须使用 getBaseContext() 而不是这个

    this通常参考当前上下文 但是 在某些情况下 为什么我们必须使用getBaseContext 代替this 这意味着当使用this会注意到错误 这是我的例子 Spinner spinner Spinner findViewById R i
  • 如何在 Windows 中挂钩 TCP 堆栈来嗅探和修改数据包?

    我想为 Windows 编写一个数据包嗅探器和编辑器 我希望能够查看进入和离开我的系统的所有数据包的内容 并可能对其进行修改 任何语言都可以 但我希望它运行得足够快 以免给系统带来负担 我读过一些有关 WinPcap 的内容 但文档声称您不