登录
首页 >  Golang >  Go问答

Golang gin仅在ipv4中获取客户端IP

来源:stackoverflow

时间:2024-02-27 09:42:27 268浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Golang gin仅在ipv4中获取客户端IP》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我在使用 gin-gonic 时尝试获取客户端的 ip 地址,但有时它会提供我不想要的 ipv6 地址。

我当前的代码如下所示:

web.post("/path", func(c *gin.context) {
    ipaddr := c.clientip() // sometimes ipv4, sometimes ipv6

如何仅获取 ipv4 地址?

作为参考,我只监听 ipv4 地址:

server := &http.server{
    handler: router,
}
l, err := net.listen("tcp4", cfg.listen)
if err != nil {
    panic(err)
}
err = server.serve(l)

以下是我收到的 ipv6 地址的示例:

2402:800:6371:2f72:xxxx:bf67:3689:95df
2001:44b8:2169:c800:xxxx:c80a:b134:cc40

解决方案


不确定这是否有帮助,但是下面的函数帮助我获取了 ipaddress

func getClientIPByHeaders(req *http.Request) (ip string, err error) {

    // Client could be behid a Proxy, so Try Request Headers (X-Forwarder)
    ipSlice := []string{}

    ipSlice = append(ipSlice, req.Header.Get("X-Forwarded-For"))
    ipSlice = append(ipSlice, req.Header.Get("x-forwarded-for"))
    ipSlice = append(ipSlice, req.Header.Get("X-FORWARDED-FOR"))

    for _, v := range ipSlice {
        log.Printf("debug: client request header check gives ip: %v", v)
        if v != "" {
            return v, nil
        }
    }
    err = errors.New("error: Could not find clients IP address from the Request Headers")
    return "", err

}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Golang gin仅在ipv4中获取客户端IP》文章吧,也可关注golang学习网公众号了解相关技术文章。

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