Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mendapatkan alamat IP wifi saya menggunakan Golang?

Bagaimana untuk mendapatkan alamat IP wifi saya menggunakan Golang?

WBOY
WBOYke hadapan
2024-02-09 14:33:18731semak imbas

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

editor php Xiaoxin di sini untuk memperkenalkan cara menggunakan Golang untuk mendapatkan alamat IP wifi anda sendiri. Golang ialah bahasa pengaturcaraan yang cekap dan ringkas yang menyediakan banyak kaedah mudah untuk mengendalikan tugas berkaitan rangkaian. Untuk mendapatkan alamat IP wifi, kita boleh menggunakan pakej bersih Golang dan pakej os/exec untuk melaksanakan beberapa arahan sistem. Dengan beberapa kod mudah, kami boleh mendapatkan alamat IP wifi yang kami sambungkan. Mari kita lihat proses pelaksanaan khusus!

Isi soalan

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

Saya menggunakan ini tetapi ia memberi saya senarai alamat ip.

Saya hanya ingin mendapatkan alamat wifi tempatan saya, apakah yang perlu saya lakukan?

Penyelesaian

Anda perlu mengetahui sekurang-kurangnya satu daripada dua maklumat ini:

  1. Nama antara muka yang betul (biasanya en0 pada mac, contohnya, tetapi ymmv)
  2. Alamat rangkaian wayarles anda, termasuk panjang topeng - alamat seperti 192.168.0.0/16 atau 192.168.0.0/24 adalah perkara biasa, tetapi anda perlu memikirkan perkara ini lebih awal.

Jika anda hanya tahu nama antara muka:

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

Lebih mudah:

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

Jika anda tahu alamat rangkaian rangkaian wayarles anda

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

Kaedah yang mana satu untuk dipilih

Bergantung pada antara muka dengan nama tertentu biasanya tidak mudah alih. Jadi walaupun andaian saya ialah anda hanya mahu menjalankan ini di stesen kerja anda sendiri, jika ini adalah sesuatu yang perlu dijalankan merentasi berbilang hos, anda mungkin mahu sekurang-kurangnya bermula dengan memadankan alamat rangkaian yang betul. Terdapat helah lain - jika anda tahu dengan mengandaikan anda akan berjalan di ladang pelayan di mana setiap hos mempunyai nic dari pengeluar xxx, anda boleh mencari alamat mac dan melihat sama ada ia dari pengeluar itu - anda boleh mencuba ini di sini . Anda boleh menggunakan penapis lain juga, tetapi ini sesuai untuk kes penggunaan peribadi anda.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan alamat IP wifi saya menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam