如何使用Golang获取WiFi本地IP地址?解决多IP返回问题
只获取WiFi接口对应的本地IPv4地址
要筛选出WiFi接口的IP,核心是先识别无线网络接口,再提取该接口的有效IPv4地址。可以通过接口名称(不同系统的无线接口名有规律)和接口状态来判断,以下是实现代码:
package main import ( "fmt" "net" "strings" ) func getWiFiLocalIP() (string, error) { // 获取所有网络接口 ifaces, err := net.Interfaces() if err != nil { return "", err } for _, iface := range ifaces { // 跳过禁用的接口 if iface.Flags&net.FlagUp == 0 { continue } // 跳过环回接口 if iface.Flags&net.FlagLoopback != 0 { continue } // 判断是否为无线接口:兼容多系统的名称匹配 ifaceName := strings.ToLower(iface.Name) if !strings.Contains(ifaceName, "wlan") && !strings.Contains(ifaceName, "wifi") && ifaceName != "en0" { // en0是macOS常见无线接口名,wlan是Linux/Windows的无线接口名 continue } // 获取该接口的所有地址 addrs, err := iface.Addrs() if err != nil { continue // 跳过获取地址失败的接口 } for _, addr := range addrs { ipNet, ok := addr.(*net.IPNet) if !ok { continue } // 筛选IPv4地址,且不是环回地址 if ipNet.IP.To4() != nil && !ipNet.IP.IsLoopback() { return ipNet.IP.To4().String(), nil } } } return "", fmt.Errorf("no WiFi interface with valid IPv4 found") } func main() { ip, err := getWiFiLocalIP() if err != nil { fmt.Println("Error:", err) return } fmt.Println("WiFi Local IP:", ip) }
代码说明:
- 先通过
net.Interfaces()枚举所有网络接口,跳过禁用、环回的无效接口 - 通过接口名称匹配无线接口:
- Linux/Windows系统的无线接口名通常包含
wlan(如wlan0、WLAN) - macOS系统的无线接口名一般是
en0
- Linux/Windows系统的无线接口名通常包含
- 找到目标接口后,遍历其绑定的地址,筛选出有效的非环回IPv4地址,返回第一个匹配结果
如果你的系统无线接口名不在上述判断范围内,可根据实际情况修改接口名称的匹配条件。
内容的提问来源于stack exchange,提问作者gsy
相关产品推荐
相关产品推荐

