如何获得分配给机器的所有 IP 地址?
How do I get all IP addresses assigned to the machine?
给定以下代码:
// 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)
}
}
}
我遇到了一个问题,它只 returns 分配给适配器的第一个 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)
}
}
给定以下代码:
// 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)
}
}
}
我遇到了一个问题,它只 returns 分配给适配器的第一个 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)
}
}