You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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
  • 找到目标接口后,遍历其绑定的地址,筛选出有效的非环回IPv4地址,返回第一个匹配结果

如果你的系统无线接口名不在上述判断范围内,可根据实际情况修改接口名称的匹配条件。

内容的提问来源于stack exchange,提问作者gsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:06:21