【发布时间】:2012-10-09 10:56:41
【问题描述】:
我正在开发一个网站测试框架,我希望能够欺骗用户 ip。我读过,像 Loadrunner 这样的软件可以做到这一点,我也希望能够做到这一点。
关于如何正常使用套接字的教程可以找到here,但是如果我想欺骗ip,我必须以某种方式编辑ip header。这是在套接字级别完成的,还是在 .Net 中有其他更深层次的,可以让我这样做?
【问题讨论】:
标签: c# sockets ip-protocol
我正在开发一个网站测试框架,我希望能够欺骗用户 ip。我读过,像 Loadrunner 这样的软件可以做到这一点,我也希望能够做到这一点。
关于如何正常使用套接字的教程可以找到here,但是如果我想欺骗ip,我必须以某种方式编辑ip header。这是在套接字级别完成的,还是在 .Net 中有其他更深层次的,可以让我这样做?
【问题讨论】:
标签: c# sockets ip-protocol
您不能再这样做了,因为在 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_IP、IPPROTO_UDP或IPPROTO_SCTP)。
(来自Dev Center - Desktop - TCP/IP Raw Sockets)
您可以相当轻松地创建原始套接字:
Socket s = new Socket(ip.AddressFamily, SocketType.Raw, ProtocolType.Ip);
此时由您来构建适当的数据报(如果您手头没有有关如何执行此操作的文档,这将是一个单独的问题)
【讨论】:
只有在 Load Generator 上存在实际 IP 地址时,LoadRunner 才能欺骗 IP 地址。因此,如果我有 200 个 IP 地址分配给我的主机,那么我可以在这些 IP 地址之间分配我的负载,而不是在操作系统中使用成本最低的路由或主要与次要网络接口。这不仅适用于 LoadRunner,其他应用程序性能测试工具也是如此,需要将地址分配给生成负载的主机。
如果您正在寻找无需将 IP 地址分配给主机进行测试的原始欺骗解决方案,那么您可以考虑网络性能测试工具,尤其是来自 Spirent 和 Ixia 等公司的基于机箱的解决方案。如果需要,这些网络解决方案还可以生成数以万计的唯一虚假 MAC 地址,以配合虚假 IP 地址。
【讨论】: