我们遇到了一个测试场景,需要篡改Http请求的源IP地址,以模拟来自不同国家/地区的客户端。你知道任何工具帮助吗?
最后但并非最不重要的是,我们的网站是使用ASP.NET构建的。
感谢。
答案 0 :(得分:4)
在测试环境中,通常并不困难。首先阅读有关虚拟网络接口的this SO question。
如果服务器和客户端位于同一台计算机上,您所要做的就是弄清楚如何让客户端软件绑定到您的虚拟接口。
例如,wget
具有--bind-address
选项,用于指定要绑定的本地地址。使用Web浏览器有点困难;您可能需要在VM中运行它。
如果您的服务器和客户端位于同一个LAN上,则只需要为路由器配置一些到客户端计算机的静态路由。在这种情况下,可能不需要虚拟网络接口,只需为客户端机器设置静态IP;只要网关设置正确,它就应该能够将数据包发送到服务器,只要路由设置正确,回复就应该找回客户端。
如果客户端和服务器被互联网分开,那就更难了。一种选择是在服务器上设置网络隧道端点并将其隧道传送到客户端计算机,客户端计算机“知道”它具有虚拟网络接口。
答案 1 :(得分:3)
如ServerFault question "Are IP addresses trivial to forge"的答案中所述,您无法在需要双向通信的协议(例如TCP)中轻松伪造源地址。请注意,在数据包级别需要这种“双向通信”。你不能只说“没问题,我想发送请求并忽略HTTP响应”。要建立TCP会话,您需要接收数据。最好的办法是使用代理服务器。
答案 2 :(得分:1)
我不确定IP标准是否允许这样做,但如果您在实验室环境中工作,在测试期间不需要互联网连接,我可以看到它在以下情况下工作:
基本上,我会将服务器的网络接口设置为使用网络掩码0.0.0.0
并刷新路由表的其余部分。
然后,只要使用网络掩码0.0.0.0
,就可以将客户端计算机配置为接受任何IP地址。并且应该可以进行双向沟通。
Server[1.2.3.4/0] <---> Client[x.x.x.x/0]
但请耐心等待我。我没有测试过这个,所以我错了: - )
答案 3 :(得分:1)
如果您可以访问您的基础架构,则可以在路由器上添加一个接口,然后在该路由器的路由器上放置一条静态路由。
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进行测试。我相信你可以在某个地方租一台虚拟服务器一两个月。
答案 4 :(得分:0)
那是不可能的。因为当你伪造ip地址时,响应永远不会回来,这是http。
所必需的最好的方法是使用代理。另请参阅有关serverfault的this问题。
答案 5 :(得分:0)
如果您更改了源IP地址,则表示您的网络服务器的流量无法返回客户端。
您可以使用某种代理和/或地址转换过滤器进行重新映射,同时仍然允许双向通信。