鉴于以下代码:

// iptest
package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    host, _ := os.Hostname()
    addrs, _ := net.LookupIP(host)
    for _, addr := range addrs {
        if ipv4 := addr.To4(); ipv4 != nil {
            fmt.Println("IPv4: ", ipv4)
        }
    }
}

我遇到了一个问题,它只返回分配给适配器的第一个 IP 地址。这似乎仅在定义了 DNS 后缀的系统上是一个问题。如果未定义,则它可以正常工作并报告已分配的所有 IP。

最佳答案

如果您正在尝试获取当前分配给机器的地址。我认为您应该考虑使用 net.InterfaceAddrs() 而不是尝试对主机名进行 DNS 查找。这是一个简短的示例,它将为您提供本地计算机上的所有 IP。

package main

import (
    "fmt"
    "net"
)

func main() {
    addrs, _ := net.InterfaceAddrs()
    fmt.Printf("%v\n", addrs)
    for _, addr := range addrs {
        fmt.Println("IPv4: ", addr)
    }
}

关于go - 如何获取分配给机器的所有 IP 地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35319515/

10-12 22:23