首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Go中获取本地IP地址?

如何在Go中获取本地IP地址?
EN

Stack Overflow用户
提问于 2014-05-09 15:00:08
回答 7查看 114K关注 0票数 82

我想要得到计算机的IP地址。我使用了下面的代码,但它返回127.0.0.1

我想要获取IP地址,例如10.32.10.111,而不是环回地址。

代码语言:javascript
复制
name, err := os.Hostname()
if err != nil {
     fmt.Printf("Oops: %v\n", err)
     return
}

addrs, err := net.LookupHost(name)
if err != nil {
    fmt.Printf("Oops: %v\n", err)
    return
}

for _, a := range addrs {
    fmt.Println(a)
}  
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-05-09 15:05:20

您需要遍历所有网络接口

代码语言:javascript
复制
ifaces, err := net.Interfaces()
// handle err
for _, i := range ifaces {
    addrs, err := i.Addrs()
    // handle err
    for _, addr := range addrs {
        var ip net.IP
        switch v := addr.(type) {
        case *net.IPNet:
                ip = v.IP
        case *net.IPAddr:
                ip = v.IP
        }
        // process IP address
    }
}

Play (取自util/helper.go)

票数 137
EN

Stack Overflow用户

发布于 2016-05-23 11:26:27

当机器上存在多个ip接口时,这是一个检索首选出站ip地址的更好的解决方案。

代码语言:javascript
复制
import (
    "log"
    "net"
    "strings"
)

// Get preferred outbound ip of this machine
func GetOutboundIP() net.IP {
    conn, err := net.Dial("udp", "8.8.8.8:80")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    localAddr := conn.LocalAddr().(*net.UDPAddr)

    return localAddr.IP
}
票数 144
EN

Stack Overflow用户

发布于 2015-07-22 07:13:32

要确保获得非环回地址,只需在迭代时检查IP不是环回地址。

代码语言:javascript
复制
// GetLocalIP returns the non loopback local IP of the host
func GetLocalIP() string {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        return ""
    }
    for _, address := range addrs {
        // check the address type and if it is not a loopback the display it
        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                return ipnet.IP.String()
            }
        }
    }
    return ""
}
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23558425

复制
相关文章

相似问题

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