【问题标题】:How to workaround the "Limitations on Raw Sockets" under Windows 7?如何解决 Windows 7 下的“原始套接字限制”?
【发布时间】:2018-02-04 07:09:28
【问题描述】:

我正在开发一个 Windows 7 下的 TCP 协议模糊测试软件。我想使用原始套接字发送自构造的 TCP 数据包。但似乎微软出于某些安全原因禁止这样做。 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx)

我知道 WinPcap 也可以发送自定义数据包。但我不想从以太网级别构建数据包。以太网和 IPv4 的参数非常复杂,让我发疯。我只关心上面的 TCP 部分。有什么解决方案可以解决这个问题吗?我所能想到的就是将我的 Win7 更改为 Windows 2008 R2,但这是一个很大的项目。希望有更好的方法吗?

【问题讨论】:

  • 这样做的动机是什么?
  • @EdHeal 你知道协议模糊测试吗?我在一家网络设备测试机构工作,该机构需要测试路由器、交换机等协议栈的健壮性。我几乎完成了除 TCP 之外的所有协议栈(以太网、IP、UDP HTTP 等)。所以你知道,这是为了好的目的。而且我不知道为什么微软会限制这一点。
  • 一个IP包是1024字节。 1K。 TCP 部分只是其中的一小部分。我假设您不需要深入到网络层。那么为什么不做一些硬事情并创建软件来驱动以太网卡产生正确的数据。使用网络分析仪进行检查。
  • 微软在桌面版 Windows 上支持原始套接字受到了很多批评。它被广泛滥用。所以他们再次禁用它。你已经知道你需要做什么,和你的老板谈谈以获得你需要的资源。志存高远,没有人愿意被小请求打扰,请求订阅 MSDN。
  • 我想知道为什么您不使用 WinPCap 进行原始 TCP 套接字编程?

标签: windows sockets tcp raw-sockets


【解决方案1】:

在 Windows XP Service Pack 1 之后,发送原始套接字的功能已被禁用,但您仍然可以读取它们。

您可以在 WDK 中修改 Microsoft 提供的源代码示例以再次启用原始发送。有关详细信息,请查看链接。

PCAUSA - How To Access To NIC Drivers From A Win32 Application

或者,您可以使用 WinPcap 将数据包注入网络。

WinPcap

【讨论】:

  • 我对 WDK-enable-raw-sends 非常感兴趣。但是我在提供的链接中没有找到任何相关材料,我看到的只是“如何从 Win32 应用程序访问 NIC 驱动程序”使用协议驱动程序。不是说“raw socket send”,因为协议驱动需要MAC和IP头,WinPcap也是一样的(其实WinPcap是基于协议驱动的),是这个意思吗?
  • 我认为第一个链接应该是值得探索的东西。为您的目标系统下载 DDK 并构建 ndis 网络驱动程序示例。之后你需要修改“send.c”文件或类似的东西。除了修改驱动程序之外,您还需要对其进行签名。如果您不向 Microsoft 支付有效签名,则安装时必须手动绕过 UAC。这应该不是问题,因为您拥有正在安装驱动程序的机器。
  • 对不起。也许我没有说清楚,我想根据 IP 级别发送数据包,这意味着,我不构造以太网和 IP 标头,操作系统堆栈将负责它们。但是 ndisprot 驱动程序是从非常低的级别发送数据包的东西,这意味着我必须从以太网标头构造数据包。但实际上,以太网和IP头是我并不真正关心的东西,我希望这会清楚..
  • 如果你想在没有 pcap 的情况下启用原始发送,编写自定义驱动程序(或使用其他人的驱动程序)是我知道的唯一方法。如果你正在编写一个模糊器,我也不会忘记低层(因为在那里发现了一些有趣的漏洞)。在任何情况下,您都必须决定是否值得花时间获得自定义驱动程序。正如你所提到的,Windows 不支持发送任何 tcp 数据,所以如果你想要没有 pcap,你将不得不编写代码来处理较低的层。 msdn.microsoft.com/en-us/library/windows/desktop/…
猜你喜欢
  • 2018-12-02
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2017-02-16
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多