Home >Backend Development >Golang >How to get my wifi IP address using Golang?

How to get my wifi IP address using Golang?

WBOY
WBOYforward
2024-02-09 14:33:18763browse

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

php editor Xiaoxin is here to introduce how to use Golang to obtain your own wifi IP address. Golang is an efficient and concise programming language that provides many convenient methods to handle network-related tasks. To get the wifi IP address, we can use Golang's net package and os/exec package to execute some system commands. With some simple code, we can get the IP address of the wifi we are connected to. Let’s take a look at the specific implementation process!

Question content

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

I have used this but it gave me a list of ip addresses.

I just want to get my wifi local address, what should I do?

Solution

You need to know at least one of the two pieces of information:

  1. The name of the correct interface (usually en0 on mac, for example, but ymmv)
  2. Your wireless network address, including mask length - addresses like 192.168.0.0/16 or 192.168.0.0/24 are common, but you have to figure this out ahead of time.

If you only know the interface name:

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

simpler:

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

If you know the network address of the wireless network

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

Which method to choose

Relying on an interface with a specific name will generally not be portable. So while my assumption is that you just want to run this on your own workstation, if this is something that needs to run across multiple hosts, you'll probably want to at least start by matching the correct network address. There are other tricks - if you know assuming you will be running in a server farm where each host has a nic from manufacturer xxx, you can look up the mac address and see if it is from that manufacturer - you can try this here. You can use other filters as well, but these will be a good fit for your personal use case.

The above is the detailed content of How to get my wifi IP address using Golang?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete