登录
首页 >  Golang >  Go问答

从服务器的请求中获取真实IP

来源:stackoverflow

时间:2024-03-19 12:42:32 330浏览 收藏

在部署于同一虚拟机的容器中进行 CURL 调用时,从 HTTP 请求中提取真实 IP 可能会遇到困难。通过 r.RemoteAddr 获取的 IP 通常是容器 IP,而不是虚拟机 IP。虽然在 printf 语句中打印请求可以显示虚拟机真实 IP,但需要进一步处理才能提取该信息。

问题内容

我正在尝试从 HTTP 请求中提取真实 IP。当我从部署在同一虚拟机上的容器进行 CURL 调用时,我从 http 请求中获取容器的 IP,而不是通过 r.RemoteAddr 获取虚拟机的 IP。

但是当我使用 fmt.Printf("Request: %s", r) 打印请求时,我可以看到虚拟机的真实 IP 就在那里。 Print 语句的示例请求如下所示:

&{GET /containers/json HTTP/1.1 %!s(int=1) %!s(int=1) map[接受:[*/*] 用户代理:[curl/7.64.0]] {} %!s(func() (io.ReadCloser, error)=) %!s(int64=0) [] %!s(bool=false) 10.32.20.122:2375 地图[] 地图[] %! s(*multipart.Form=) map[] 172.20.0.1:47102 /containers/json %!s(*tls.ConnectionState=) %!s(<-chan struct {}=) %!s(* http.Response=) %!s(*context.cancelCtx=&{0xc000120480 {0 0} 地图[] })}

在上面的输出中,10.32.20.122 是虚拟机 IP,172.20.0.1 是 docker 网络网关 IP。我想提取虚拟机IP。


正确答案


您最好在 printf 中使用 %+v

fmt.Printf("Request: %+v", r)

然后你就可以看到该字段的名称了。

以上就是《从服务器的请求中获取真实IP》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>