golang获取本地服务器IP

golang获取本地服务器IP

Anderyly
2021-04-21 / 0 评论 / 10 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年02月27日,已超过268天没有更新,若内容或图片失效,请留言反馈。

golang获取本地服务器IP

func ExternalIP() (net.IP, error) {
    ifaces, err := net.Interfaces()
    if err != nil {
        return nil, err
    }
    for _, iface := range ifaces {
        if iface.Flags&net.FlagUp == 0 {
            continue // interface down
        }
        if iface.Flags&net.FlagLoopback != 0 {
            continue // loopback interface
        }
        addrs, err := iface.Addrs()
        if err != nil {
            return nil, err
        }
        for _, addr := range addrs {
            ip := GetIpFromAddr(addr)
            if ip == nil {
                continue
            }
            return ip, nil
        }
    }
    return nil, errors.New("connected to the network?")
}

func GetIpFromAddr(addr net.Addr) net.IP {
    var ip net.IP
    switch v := addr.(type) {
    case *net.IPNet:
        ip = v.IP
    case *net.IPAddr:
        ip = v.IP
    }
    if ip == nil || ip.IsLoopback() {
        return nil
    }
    ip = ip.To4()
    if ip == nil {
        return nil // not an ipv4 address
    }

    return ip
}

// 调用方法
ip, err := other.ExternalIP()
if err != nil {
    fmt.Println(err)
}
fmt.Println(ip)
0

评论 (0)

取消