java - Go/Java中如何修改http请求中的ip地址

标签 java http go ip pcap

我正在做一个测试工具来测试网络服务器。该工具可以构造一个简单的http请求,并发送到服务器。但是每个请求都应该有不同的 src ip addr。

我的问题是。有什么方法可以从 http 请求构建一个 ip 包,修改 ip 地址,然后直接发送到 net 中吗?

我使用 java 或 go(新手)。非常感谢! :)

最佳答案

IP 地址的处理级别低于 HTTP - 具体来说,它是由 TCP/IP 协议(protocol)完成的。 Can I trust the source IP of an HTTP request?很好地概述了为什么您从 HTTP 客户端获得的 IP 值得信赖(并且难以欺骗)。

也就是说,HTTP header 支持“建议”从 TCP 获得的 IP 地址不正确的想法 - 最常见的做法是 X-Forwarded-For header 。假设您的服务器依赖于此值(它可能不应该!),您可以很容易地欺骗您的 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 header (或其他内容)类似)并覆盖 IP 地址(如果已设置)。不过,请确保在生产环境中禁用此功能。

关于java - Go/Java中如何修改http请求中的ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46869775/

相关文章:

go - 同一个 Go 程序的不同输出

java - 空闲时的JVM锯齿模式? JVM在此期间做了什么?

java - 从 map 添加到堆栈

google-app-engine - Go API 的 KEY_RESERVED_PROPERTY 等价物是什么?数据存储

wordpress - SSL 证书因内容不匹配而无效?

javascript - 使用 Node Js 重定向无法正常工作

Golang 包被意外删除

java - BufferedImage 未作为图像返回

java - Hibernate 上的多线程 'session.flush'

Django:根据 request.META 值为用户创建唯一标识符