35 lines
633 B
Go
35 lines
633 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
func GetLocalIpv4Addr() string {
|
|
resp, err := http.Get("https://inet-ip.aixiao.me/")
|
|
if err != nil {
|
|
fmt.Printf("请求失败: %s\n", err)
|
|
return "NULL"
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
ip, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
fmt.Printf("读取响应失败: %s\n", err)
|
|
return "NULL"
|
|
}
|
|
|
|
ipStr := strings.TrimSpace(string(ip))
|
|
// ✅ 验证是否是合法 IPv4
|
|
if net.ParseIP(ipStr) == nil || strings.Contains(ipStr, "<") {
|
|
fmt.Printf("无效的IP响应: %q\n", ipStr)
|
|
return "NULL"
|
|
}
|
|
|
|
fmt.Printf("公网IP: %s\n", ipStr)
|
|
return ipStr
|
|
}
|