我们遇到了一个测试场景,需要篡改一个Http请求的源IP地址来模拟来自不同国家的客户端。你知道这方面的任何工具帮助吗?
最后但同样重要的是,我们的网站是用 ASP.NET 构建的。
谢谢。
在测试环境中,这通常并不困难。首先阅读这个关于虚拟网络接口的SO 问题。
如果服务器和客户端在同一台机器上,您所要做的就是弄清楚如何让您的客户端软件绑定到您的虚拟接口。
wget
例如,--bind-address
可以选择指定绑定到哪个本地地址。Web 浏览器更难做到这一点;您可能只需要在虚拟机中运行它。
如果您的服务器和客户端在同一个 LAN 上,您只需为路由器配置一些到客户端计算机的静态路由。在这种情况下,您可能不需要虚拟网络接口,只需为您的客户端机器设置一个静态 IP;只要网关设置正确,它就应该能够将数据包发送到服务器,并且只要路由设置正确,回复就应该找到返回客户端的方式。
如果客户端和服务器被互联网分开,那就更困难了。一种选择是在服务器上设置一个网络隧道端点并将其隧道传输到客户端机器,该机器“知道”它具有虚拟网络接口。
正如对ServerFault 问题“IP 地址是否易于伪造”的回答中所述,您不能轻易地在需要双向通信的协议(例如 TCP)中伪造源地址。请注意,在数据包级别需要这种“双向通信”。您不能只说“没问题,我想发送请求并忽略 HTTP 响应”。要建立 TCP 会话,您需要接收数据。您最好的选择是使用代理服务器。
我不确定 IP 标准是否允许这样做,但如果您在实验室环境中工作,在测试期间您不需要互联网连接,我可以看到它在以下情况下工作:
基本上,我会将服务器的网络接口设置为使用网络掩码0.0.0.0
并刷新路由表的其余部分。
然后,您可以将客户端计算机配置为使用任何 IP 地址,只要您使用 netmask 0.0.0.0
。并且应该可以进行双向通信。
Server[1.2.3.4/0] <---> Client[x.x.x.x/0]
但请多多包涵。我没有测试过这个,所以我可能是错的:-)
如果您有权访问您的基础架构,则可以在路由器之外添加一个接口,然后在路由器上放置一条通往该网络的静态路由。
Server-----Router----Internet
/
Test_PC----/
或者,您可以查看PBR(基于策略的路由),在路由器上您可以标记源数据包并动态更改源,因此您的服务器会认为它们来自您希望它们来自的地方。
Server-------------Router_with_PBR-------------Internet----- PC
SCR:4.2.2.2 Change SCR:6.6.6.6 to 4.2.2.2 6.6.6.6
但是您必须问自己为什么要查看数据包何时来自不同的国家。一些国家有大量的代理服务器过滤访问(“中国防火墙”),所以上面的测试证明不了多少。
那么你最好的选择是使用代理服务器,或者如果你正在寻找一个长期的解决方案,那么设置一个服务器(虚拟的非常适合这个)并使用 RDP 进行测试。我敢肯定,您可以在某处租用虚拟服务器一两个月。
那是不可能的。因为当你伪造ip地址时,响应永远不会回来,这是http所必需的。
最好的方法是使用代理。另请参阅有关 serverfault 的此问题。
如果您更改源 IP 地址,这意味着来自您的 Web 服务器的流量将无法返回到客户端。
您也许可以使用某种代理和/或地址转换过滤器来进行重新映射,同时仍然允许双向通信。