0
点赞
收藏
分享

微信扫一扫

Go语言(Golang)代码示例:获取HTTP请求客户端的IP地址


代码

在Go语言(Golang)中,获取HTTP请求客户端的IP地址通常发生在HTTP服务器处理请求的过程中。以下是如何在一个HTTP处理器中获取客户端IP地址的示例代码:

package main

import (
    "fmt"
    "net/http"
    "strings"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // 获取请求头中的Remote Address,它通常包含客户端IP和端口号
    remoteAddr := r.RemoteAddr

    // 但在代理环境下,客户端IP可能被封装在X-Forwarded-For头部
    // 需要检查并解析该头部以获取客户端的真实IP地址
    forwardedFor := r.Header.Get("X-Forwarded-For")
    if forwardedFor != "" {
        // X-Forwarded-For可能包含多个IP地址,最左边的是离客户端最近的IP
        remoteAddr = strings.Split(forwardedFor, ", ")[0]
    }

    fmt.Fprintf(w, "Client IP address: %s", strings.Split(remoteAddr,":")[0])
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server is running on :8080...")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        panic(err)
    }
}

请注意,由于代理服务器的存在,直接从r.RemoteAddr获取到的可能是代理服务器的IP地址,而非最终客户端的IP地址。X-Forwarded-For头信息是由代理服务器添加的,用于传递客户端IP地址。在实际应用中,特别是在云端环境或使用了负载均衡器的情况下,通常需要信任上游代理并解析这个头信息以获取客户端真实IP。

另外,由于X-Forwarded-For头可能包含多个IP(从客户端到服务器的所有跳转IP),所以通常取第一个IP作为客户端IP。当然,这需要你的应用程序信任这些头信息来源的真实性。对于安全性要求较高的场景,可能需要额外的安全策略或配置来验证这些头信息。

最终效果

Go语言(Golang)代码示例:获取HTTP请求客户端的IP地址_tcp/ip

Go语言(Golang)代码示例:获取HTTP请求客户端的IP地址_IP_02


举报

相关推荐

0 条评论