我正在做一个测试工具来测试一个web服务器。该工具可以构造一个简单的http请求,并发送到服务器。但每个请求应该有一个不同的src ip地址。我的问题是,有没有什么方法可以从http请求构建一个ip包,修改ip地址,然后直接发送到网络?我使用java或go(新的去)。非常感谢!:)
4xrmg8kj1#
IP地址是在比HTTP更低的级别上处理的-具体来说,它是由TCP/IP协议完成的。Can I trust the source IP of an HTTP request?提供了一个很好的概述,说明为什么从HTTP客户端获得的IP是可信的(并且难以欺骗)。也就是说,HTTP头支持“建议”从TCP获得的IP地址不正确的想法-最常见的方法是X-Forwarded-For头。假设您的服务器依赖于此值(它可能不应该!),您可以很容易地欺骗您的IP:
req, err := http.NewRequest("GET", "http://example.com", nil) // ... req.Header.Add("X-Forwarded-For", "1.2.3.4") resp, err := client.Do(req)
当然,大多数服务器不会依赖于此字段,因为滥用的可能性很大。如果您正在为自己的服务器编写测试工具,最好的方法是向服务器添加逻辑,以检查X-Forwarded-For头(或类似的东西)的存在,并覆盖IP地址(如果设置了)。
X-Forwarded-For
1条答案
按热度按时间4xrmg8kj1#
IP地址是在比HTTP更低的级别上处理的-具体来说,它是由TCP/IP协议完成的。Can I trust the source IP of an HTTP request?提供了一个很好的概述,说明为什么从HTTP客户端获得的IP是可信的(并且难以欺骗)。
也就是说,HTTP头支持“建议”从TCP获得的IP地址不正确的想法-最常见的方法是X-Forwarded-For头。假设您的服务器依赖于此值(它可能不应该!),您可以很容易地欺骗您的IP:
当然,大多数服务器不会依赖于此字段,因为滥用的可能性很大。
如果您正在为自己的服务器编写测试工具,最好的方法是向服务器添加逻辑,以检查
X-Forwarded-For
头(或类似的东西)的存在,并覆盖IP地址(如果设置了)。