Как получить все 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)
    }
}
Другие вопросы по тегам