Some checks failed
Build and Deploy (service.xpcool.com) / build-and-deploy (push) Failing after 5m7s
- 新增 9 张房屋相关数据表(社区/楼宇/房源/价格快照/交易/设施/社区设施/学区/偏好) - 添加菜单权限种子数据并绑定超级管理员角色 - 生成 DAO 层代码和实体对象 - 实现房屋模块 API 接口(社区/房源/看板)和控制器服务层 - 支持多平台软关联匹配、笋盘标记和低可信度标记功能 - 更新超级管理员账号为 xxcool/xxCool@2026 - 调整 RBAC 菜单结构,移除管理员管理功能,新增日志管理菜单 - 修复 RBAC 安全漏洞,确保禁用角色权限失效 - 重构认证模块,将登录相关接口迁移到统一包结构下 - 移除废弃的管理模块和工具类接口定义 - 为通用工具包添加中文注释和文档说明
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
// Package ip 提供 IP 地址工具。
|
|
package ip
|
|
|
|
import (
|
|
"net"
|
|
"strconv"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"github.com/gogf/gf/v2/net/gipv4"
|
|
)
|
|
|
|
// IsValid 判断 s 是否为合法的 IPv4 地址。
|
|
func IsValid(s string) bool {
|
|
return gipv4.Validate(s)
|
|
}
|
|
|
|
// LocalIP 返回本机第一个非回环 IPv4 地址。
|
|
func LocalIP() (string, error) {
|
|
addrs, err := net.InterfaceAddrs()
|
|
if err != nil {
|
|
return "", gerror.Wrap(err, `net.InterfaceAddrs failed`)
|
|
}
|
|
for _, addr := range addrs {
|
|
if ipNet, ok := addr.(*net.IPNet); ok {
|
|
if ipv4 := ipNet.IP.To4(); ipv4 != nil && !ipv4.IsLoopback() {
|
|
return ipv4.String(), nil
|
|
}
|
|
}
|
|
}
|
|
return "", nil
|
|
}
|
|
|
|
// IsInternal 判断 s 是否为私有/内网 IPv4 地址
|
|
// (private ranges, loopback or link-local).
|
|
func IsInternal(s string) bool {
|
|
parsed := net.ParseIP(s)
|
|
if parsed == nil || parsed.To4() == nil {
|
|
return false
|
|
}
|
|
return parsed.IsPrivate() || parsed.IsLoopback() || parsed.IsLinkLocalUnicast()
|
|
}
|
|
|
|
// ToLong 将 IPv4 字符串转为 uint32 数值表示
|
|
// (big-endian, same as inet_aton).
|
|
func ToLong(s string) (uint32, error) {
|
|
ipv4 := net.ParseIP(s).To4()
|
|
if ipv4 == nil {
|
|
return 0, gerror.Newf(`invalid IPv4 address: %s`, s)
|
|
}
|
|
return uint32(ipv4[0])<<24 | uint32(ipv4[1])<<16 | uint32(ipv4[2])<<8 | uint32(ipv4[3]), nil
|
|
}
|
|
|
|
// ToString 将 uint32 的 IPv4 值转为点分十进制字符串。
|
|
func ToString(v uint32) string {
|
|
return strconv.Itoa(int(v>>24)) + "." +
|
|
strconv.Itoa(int(v>>16&0xFF)) + "." +
|
|
strconv.Itoa(int(v>>8&0xFF)) + "." +
|
|
strconv.Itoa(int(v&0xFF))
|
|
}
|