Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich meine WLAN-IP-Adresse mit Golang?

Wie erhalte ich meine WLAN-IP-Adresse mit Golang?

WBOY
WBOYnach vorne
2024-02-09 14:33:18676Durchsuche

如何使用 Golang 获取我的 wifi IP 地址?

php-Editor Xiaoxin ist hier, um Ihnen vorzustellen, wie Sie mit Golang Ihre eigene WLAN-IP-Adresse erhalten. Golang ist eine effiziente und prägnante Programmiersprache, die viele praktische Methoden zur Bewältigung netzwerkbezogener Aufgaben bietet. Um die WLAN-IP-Adresse zu erhalten, können wir das Net-Paket und das OS/Exec-Paket von Golang verwenden, um einige Systembefehle auszuführen. Mit einem einfachen Code können wir die IP-Adresse des WLANs ermitteln, mit dem wir verbunden sind. Werfen wir einen Blick auf den konkreten Umsetzungsprozess!

Frageninhalt

func getLocalIP() ([]string, error) {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        return nil, err
    }
    IPs := make([]string, 0)
    for _, a := range addrs {
        if ipNet, ok := a.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
            if ipNet.IP.To4() != nil {
                IPs = append(IPs, ipNet.IP.To4().String())
            }
        }
    }
    return IPs, nil
}
func TestGetLocalIP() {
    addrs, _ := getLocalIP()
    for _, a := range addrs {
        fmt.Println(a)
    }
}

Ich habe dies verwendet, aber es gab mir eine Liste mit IP-Adressen.

Ich möchte nur meine lokale WLAN-Adresse erhalten. Was soll ich tun?

Lösung

Sie müssen mindestens eine dieser beiden Informationen kennen:

  1. Der Name der richtigen Schnittstelle (normalerweise en0 beispielsweise auf dem Mac, aber ymmv)
  2. Ihre drahtlose Netzwerkadresse, einschließlich Maskenlänge – Adressen wie 192.168.0.0/16 oder 192.168.0.0/24 sind üblich, aber Sie müssen dies im Voraus herausfinden.

Wenn Sie nur den Schnittstellennamen kennen:

ifs, _ := net.interfaces()
for _, ifi := range ifs {
  if ifi.name == "en0" { // or whatever other filter you want
    addrs, _ := ifi.addresses()
    for _, a := range addrs {
      // filter to get the one you want, typically unicast ip4
    }
  }
}

Einfacher:

if, _ := net.interfacebyname("en0")
addrs, _ := if.addresses()
for _, a := range addrs {
  // as before, filter for the address you want
}

Wenn Sie die Netzwerkadresse Ihres drahtlosen Netzwerks kennen

// Loop over interfaces, get addrs, then loop over addresses and get IPs for those that have them
if ip.Mask(net.CIDRMask(16, 32)) == myNetworkAddress {
  // The interface you got this IP from is probably your wifi interface
}

Welche Methode soll ich wählen

Das Verlassen auf eine Schnittstelle mit einem bestimmten Namen ist im Allgemeinen nicht portierbar. Ich gehe also davon aus, dass Sie dies nur auf Ihrer eigenen Workstation ausführen möchten. Wenn dies jedoch auf mehreren Hosts ausgeführt werden muss, möchten Sie wahrscheinlich zumindest damit beginnen, die richtige Netzwerkadresse abzugleichen. Es gibt noch andere Tricks – wenn Sie davon ausgehen, dass Sie in einer Serverfarm arbeiten, in der jeder Host eine Netzwerkkarte des Herstellers xxx hat, können Sie die Mac-Adresse nachschlagen und sehen, ob sie von diesem Hersteller stammt – Sie können dies hier ausprobieren . Sie können auch andere Filter verwenden, diese passen jedoch gut zu Ihrem persönlichen Anwendungsfall.

Das obige ist der detaillierte Inhalt vonWie erhalte ich meine WLAN-IP-Adresse mit Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen