package goip import ( "context" "encoding/json" "go.dtapp.net/gorequest" "log" "net" ) // GetInsideIp 内网ip func GetInsideIp(ctx context.Context) string { conn, err := net.Dial("udp", "8.8.8.8:80") if err != nil { panic(err) } defer conn.Close() localAddr := conn.LocalAddr().(*net.UDPAddr) return localAddr.IP.String() } // Ips 获取全部网卡的全部IP func Ips(ctx context.Context) (map[string]string, error) { ips := make(map[string]string) //返回 interface 结构体对象的列表,包含了全部网卡信息 interfaces, err := net.Interfaces() if err != nil { return nil, err } //遍历全部网卡 for _, i := range interfaces { // Addrs() 方法返回一个网卡上全部的IP列表 address, err := i.Addrs() if err != nil { return nil, err } //遍历一个网卡上全部的IP列表,组合为一个字符串,放入对应网卡名称的map中 for _, v := range address { ips[i.Name] += v.String() + " " } } return ips, nil } // GetOutsideIp 外网ip func GetOutsideIp(ctx context.Context) string { // 返回结果 type respGetOutsideIp struct { Data struct { Ip string `json:"ip,omitempty"` } `json:"data"` } // 请求 getHttp := gorequest.NewHttp() getHttp.SetUri("https://api.dtapp.net/ip") response, err := getHttp.Get(ctx) if err != nil { log.Printf("[GetOutsideIp]getHttp.Get:%s\n", err) return "0.0.0.0" } // 解析 var responseJson respGetOutsideIp err = json.Unmarshal(response.ResponseBody, &responseJson) if err != nil { log.Printf("[GetOutsideIp]json.Unmarshal:%s\n", err) return "0.0.0.0" } if responseJson.Data.Ip == "" { responseJson.Data.Ip = "0.0.0.0" } return responseJson.Data.Ip } // GetMacAddr 获取Mac地址 func GetMacAddr(ctx context.Context) (arrays []string) { netInterfaces, err := net.Interfaces() if err != nil { return arrays } for _, netInterface := range netInterfaces { addr := netInterface.HardwareAddr.String() if len(addr) == 0 { continue } arrays = append(arrays, addr) } return arrays }