首頁  >  文章  >  後端開發  >  如何使用 Golang 取得我的 wifi IP 位址?

如何使用 Golang 取得我的 wifi IP 位址?

WBOY
WBOY轉載
2024-02-09 14:33:18732瀏覽

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

php小編小新在這裡為大家介紹如何使用Golang取得自己的wifi IP位址。 Golang是一種高效且簡潔的程式語言,它提供了許多方便的方法來處理網路相關的任務。要取得wifi IP位址,我們可以使用Golang的net套件和os/exec套件來執行一些系統指令。透過一些簡單的程式碼,我們就可以取得到我們所連接的wifi的IP位址了。下面就讓我們來看看具體的實作過程吧!

問題內容

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)
    }
}

我用過這個,但它給了我一個 ip 位址清單。

我只想取得我的 wifi 本地地址,該怎麼做?

解決方法

您需要至少了解其中的兩個資訊之一:

  1. 正確介面的名稱(在 mac 上通常為 en0,例如,但 ymmv)
  2. 您的無線網路位址,包括遮罩長度 - 192.168.0.0/16 或 192.168.0.0/24 之類的位址很常見,但您必須事先弄清楚這一點。

如果您只知道介面名稱:

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
    }
  }
}

更簡單:

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

如果您知道無線網路的網路位址

// 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
}

選擇哪一種方法

依賴具有特定名稱的介面通常不會是可移植的。因此,雖然我的假設是您只是想在自己的工作站上運行它,但如果這是需要跨多個主機運行的東西,您可能至少需要從匹配正確的網路位址開始。還有其他技巧- 如果你知道的話假設您將在一個伺服器場中運行,其中每台主機都有來自製造商xxx 的nic,您可以查找mac 地址並查看它是否來自該製造商- 您可以嘗試一下此處。您也可以使用其他過濾器,但這些過濾器將非常適合您的個人用例。

以上是如何使用 Golang 取得我的 wifi IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除