Как получить все IP-адреса, назначенные устройству?
Учитывая следующий код:
// 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-адресах, которые были назначены.
1 ответ
Решение
Если вы пытаетесь получить адреса, назначенные в данный момент машине. Я думаю, вы должны рассмотреть возможность использования 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)
}
}