go: 获取所有网卡名和IP地址 获取所有的IP,Filter中可以填网卡前缀,比如`eth` ``` func GetClientIp(filter string) (string, error) { interfaces, err := net.Interfaces() if err != nil { return "", err } nameIPS := map[string]string{} names := []string{} for _, i := range interfaces { name := i.Name addrs, err := i.Addrs() if err != nil { panic(err) } // handle err for _, addr := range addrs { var ( ip net.IP ) switch v := addr.(type) { case *net.IPNet: ip = v.IP case *net.IPAddr: ip = v.IP } if filter == "" || strings.Contains(name, filter) { names = append(names, name) nameIPS[name] = ip.String() } } } sort.Strings(names) if len(names) == 0 { return "", errors.New("can not find the client ip address ") } logrus.Infof("GetClientIP ips:%v", nameIPS) return nameIPS[names[0]], nil } ``` 获取ipv4的IP ``` func GetClientIp(filter string) (string, error) { interfaces, err := net.Interfaces() if err != nil { return "", err } nameIPS := map[string]string{} names := []string{} for _, i := range interfaces { name := i.Name addrs, err := i.Addrs() if err != nil { panic(err) } // handle err for _, addr := range addrs { var ( ip net.IP ) switch v := addr.(type) { case *net.IPNet: ip = v.IP case *net.IPAddr: ip = v.IP } if filter == "" || strings.Contains(name, filter) { ipv4 := ip.To4() if ipv4 != nil { names = append(names, name) nameIPS[name] = ip.String() } } } } sort.Strings(names) if len(names) == 0 { return "", errors.New("can not find the client ip address ") } logrus.Infof("GetClientIP ips:%v", nameIPS) return nameIPS[names[0]], nil } ``` 来自 大脸猪 写于 2021-12-03 14:38 -- 更新于2023-09-22 17:13 -- 0 条评论