【问题标题】:How to spoof an IP Address using a socket?如何使用套接字欺骗 IP 地址?
【发布时间】:2012-10-09 10:56:41
【问题描述】:

我正在开发一个网站测试框架,我希望能够欺骗用户 ip。我读过,像 Loadrunner 这样的软件可以做到这一点,我也希望能够做到这一点。

关于如何正常使用套接字的教程可以找到here,但是如果我想欺骗ip,我必须以某种方式编辑ip header。这是在套接字级别完成的,还是在 .Net 中有其他更深层次的,可以让我这样做?

【问题讨论】:

    标签: c# sockets ip-protocol


    【解决方案1】:

    您不能再这样做了,因为在 Windows 桌面版本中对原始套接字的访问受到限制:

    在 Windows 7、Windows Vista、带有 Service Pack 2 (SP2) 的 Windows XP 和带有 Service Pack 3 (SP3) 的 Windows XP 上,通过原始套接字发送流量的能力受到以下几个方面的限制:

    • 无法通过原始套接字发送 TCP 数据。
    • 具有无效源地址的 UDP 数据报不能通过原始套接字发送。任何传出 UDP 数据报的 IP 源地址必须存在于网络接口上,否则数据报将被丢弃。此更改旨在限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送欺骗数据包(具有伪造源 IP 地址的 TCP/IP 数据包)的能力。
    • 不允许使用IPPROTO_TCP 协议的原始套接字调用bind 函数。
      注意其他协议允许使用原始套接字的bind 函数(例如IPPROTO_IPIPPROTO_UDPIPPROTO_SCTP)。

    (来自Dev Center - Desktop - TCP/IP Raw Sockets

    您可以相当轻松地创建原始套接字:

    Socket s = new Socket(ip.AddressFamily, SocketType.Raw, ProtocolType.Ip); 
    

    此时由您来构建适当的数据报(如果您手头没有有关如何执行此操作的文档,这将是一个单独的问题)

    【讨论】:

    • 这是否意味着在服务器版本的 Windows 上启用了对原始套接字的访问?
    • 是的,只有服务器版本允许您伪造数据包的来源(因为服务器可能必须这样做以进行路由)
    • 您能否提供一个适用于 Windows 2008 服务器的示例?
    • 更新了我的答案。不过,您需要弄清楚如何单独构建数据包。
    【解决方案2】:

    只有在 Load Generator 上存在实际 IP 地址时,LoadRunner 才能欺骗 IP 地址。因此,如果我有 200 个 IP 地址分配给我的主机,那么我可以在这些 IP 地址之间分配我的负载,而不是在操作系统中使用成本最低的路由或主要与次要网络接口。这不仅适用于 LoadRunner,其他应用程序性能测试工具也是如此,需要将地址分配给生成负载的主机。

    如果您正在寻找无需将 IP 地址分配给主机进行测试的原始欺骗解决方案,那么您可以考虑网络性能测试工具,尤其是来自 Spirent 和 Ixia 等公司的基于机箱的解决方案。如果需要,这些网络解决方案还可以生成数以万计的唯一虚假 MAC 地址,以配合虚假 IP 地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2011-02-20
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多