首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Golang公网IP

获取Golang公网IP
EN

Stack Overflow用户
提问于 2017-01-16 13:47:55
回答 3查看 9.6K关注 0票数 2

如何在golang获取公网IP?req.Header.Get("X-Forwarded-For")方法返回IP数组。我们如何识别哪些是公共的,哪些是内部的?有没有其他方式拉取公网(外部) IP?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-16 14:26:45

以下IP块保留用于专用IP地址。

代码语言:javascript
复制
Class        Starting IPAddress    Ending IP Address    # of Hosts
A            10.0.0.0              10.255.255.255       16,777,216
B            172.16.0.0            172.31.255.255       1,048,576
C            192.168.0.0           192.168.255.255      65,536
Link-local-u 169.254.0.0           169.254.255.255      65,536
Link-local-m 224.0.0.0             224.0.0.255          256
Local        127.0.0.0             127.255.255.255      16777216

您可以编写一个函数来检查ip是否属于这些

这里是做同样的尝试,下面的代码不是处理ipv6请添加如果需要

代码语言:javascript
复制
func IsPublicIP(IP net.IP) bool {
    if IP.IsLoopback() || IP.IsLinkLocalMulticast() || IP.IsLinkLocalUnicast() {
        return false
    }
    if ip4 := IP.To4(); ip4 != nil {
        switch {
        case ip4[0] == 10:
            return false
        case ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31:
            return false
        case ip4[0] == 192 && ip4[1] == 168:
            return false
        default:
            return true
        }
    }
    return false
}

这里是play link

票数 8
EN

Stack Overflow用户

发布于 2021-03-29 20:18:43

使用IP api将100%获取您的公网IP:

代码语言:javascript
复制
type IP struct {
    Query string
}

func getip2() string {
    req, err := http.Get("http://ip-api.com/json/")
    if err != nil {
        return err.Error()
    }
    defer req.Body.Close()

    body, err := ioutil.ReadAll(req.Body)
    if err != nil {
        return err.Error()
    }

    var ip IP
    json.Unmarshal(body, &ip)

    return ip.Query
}
票数 0
EN

Stack Overflow用户

发布于 2017-02-03 13:42:02

我使用以下代码来查找公网IP:

代码语言:javascript
复制
//function to get the public ip address
func GetOutboundIP() string {
    conn, err := net.Dial("udp", "8.8.8.8:80")
    HandleError("net.Dial: ",err)
    defer conn.Close()
    localAddr := conn.LocalAddr().String()
    idx := strings.LastIndex(localAddr, ":")
    return localAddr[0:idx]
}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41670155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档