From 4d0464c76bbb379590a53eb435e07a954b02392b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn>
Date: Thu, 8 Jan 2026 05:15:10 +0800
Subject: [PATCH] =?UTF-8?q?```=20feat(rpc):=20=E8=AE=BE=E7=BD=AE=E9=BB=98?=
=?UTF-8?q?=E8=AE=A4RPC=E5=9C=B0=E5=9D=80=E4=B8=BA=E6=9C=AC=E5=9C=B0?=
=?UTF-8?q?=E5=9B=9E=E7=8E=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
修复RPC客户端连接问题,将默认服务器地址设置为127.0.0.1以确保本地连接正常
refactor(qqwry): 优化IP地址查询功能
移除不必要的正则表达式依赖,重构IP地址查询逻辑,提高代码性能和可维护性
fix(server): 保存确定的端口到配置中
确保服务器端口在确定后正确保存到配置中,避免端口配置丢失
---
common/rpc/rpc.go | 2 +-
common/utils/qqwry/qqwry.go | 219 +++++++++------------------
logic/server.go | 1 +
modules/base/service/base_sys_log.go | 37 +++--
modules/blazing/service/item.go | 2 +-
modules/config/model/server_list.go | 2 +
modules/config/service/server.go | 17 ++-
public/login-login-linux-amd64 | Bin 71883545 -> 71883433 bytes
8 files changed, 116 insertions(+), 164 deletions(-)
diff --git a/common/rpc/rpc.go b/common/rpc/rpc.go
index d703ffa4..735f239b 100644
--- a/common/rpc/rpc.go
+++ b/common/rpc/rpc.go
@@ -86,7 +86,7 @@ func StartClient(id, port uint16, callback any) *struct {
} {
var rpcaddr, _ = service.NewBaseSysParamService().DataByKey(context.Background(), "server_ip")
- //rpcaddr = "127.0.0.1"
+ rpcaddr = "127.0.0.1"
closer1, err := jsonrpc.NewMergeClient(context.Background(),
"ws://"+rpcaddr+":"+rpcport, "", []interface{}{
&RPCClient,
diff --git a/common/utils/qqwry/qqwry.go b/common/utils/qqwry/qqwry.go
index bb59d06a..036215bc 100644
--- a/common/utils/qqwry/qqwry.go
+++ b/common/utils/qqwry/qqwry.go
@@ -12,12 +12,9 @@ import (
"net/http"
"net/url"
"os"
- "regexp"
"strings"
"sync"
- _ "embed"
-
"github.com/ipipdotnet/ipdb-go"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
@@ -88,143 +85,6 @@ func QueryIP(ip string) (location *Location, err error) {
}
}
-// GetIpAddress 获取 IP 归属地和运营商
-func GetIpAddress(ip string) (string, error) {
- html, err := doGet("https://www.ipshudi.com/" + ip + "/")
- if err != nil {
- return "", err
- }
-
- div := getAddress(html, `
\n.*\n`)
- div1 := getAddress(html, ` | 运营商 | .*`)
-
- location := "未知归属地"
- if div != "" {
- location = strings.Split(div, "")[1]
- location = strings.Split(location, "")[0]
- }
-
- isp := ""
- if div1 != "" {
- isp = strings.Split(div1, "")[1]
- isp = strings.Split(isp, "")[0]
- }
-
- return location + " " + isp, nil
-}
-
-// 定义响应数据结构(与 API 返回字段对应)
-type IPLocationResponse struct {
- IP string `json:"ip"`
- IPNumber string `json:"ip_number"`
- IPVersion int `json:"ip_version"`
- CountryName string `json:"country_name"`
- CountryCode2 string `json:"country_code2"`
- ISP string `json:"isp"`
- ResponseCode string `json:"response_code"`
- ResponseMessage string `json:"response_message"`
-}
-
-// 调用 IP 定位 API
-func LookupIP(ip string, format string) (*IPLocationResponse, error) {
- // 构建请求 URL
- baseURL := "https://api.iplocation.net/"
- params := url.Values{}
- params.Add("ip", ip)
- if format != "" {
- params.Add("format", format)
- }
-
- fullURL := baseURL + "?" + params.Encode()
-
- // 发送 GET 请求
- resp, err := http.Get(fullURL)
- if err != nil {
- return nil, fmt.Errorf("请求失败: %v", err)
- }
- defer resp.Body.Close()
-
- // 读取响应体
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return nil, fmt.Errorf("读取响应失败: %v", err)
- }
-
- // 解析 JSON 响应(默认格式为 json)
- var result IPLocationResponse
- if err := json.Unmarshal(body, &result); err != nil {
- return nil, fmt.Errorf("解析响应失败: %v (响应内容: %s)", err, string(body))
- }
-
- // 检查 API 响应状态
- if result.ResponseCode != "200" {
- return nil, fmt.Errorf("API 调用失败: %s (%s)", result.ResponseMessage, result.ResponseCode)
- }
-
- return &result, nil
-}
-
-// doGet 发送 HTTP GET 请求,返回响应内容
-func doGet(url string) ([]byte, error) {
- resp, err := http.Get(url)
- if err != nil {
- return nil, err
- }
- defer resp.Body.Close()
-
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return nil, err
- }
- return body, nil
-}
-
-// getAddress 使用正则表达式从 HTML 中提取内容
-func getAddress(html []byte, pattern string) string {
- re := regexp.MustCompile(pattern)
- return re.FindString(string(html))
-}
-
-// 判断IP是否为私有地址(包括IPv4和IPv6)
-func isPrivateIP(ipStr string) (bool, error) {
- ip := net.ParseIP(ipStr)
- if ip == nil {
- return false, fmt.Errorf("无效的IP地址: %s", ipStr)
- }
-
- // 定义私有网段
- privateNets := []string{
- // IPv4私有网段
- "10.0.0.0/8",
- "172.16.0.0/12",
- "192.168.0.0/16",
- // IPv6私有网段(ULA和链路本地)
- "fc00::/7",
- "fe80::/10",
- }
-
- // 检查IP是否属于任一私有网段
- for _, cidr := range privateNets {
- _, netIP, err := net.ParseCIDR(cidr)
- if err != nil {
- return false, err
- }
- if netIP.Contains(ip) {
- return true, nil
- }
- }
- return false, nil
-}
-
-// 判断IP是否为环回地址
-func isLoopbackIP(ipStr string) (bool, error) {
- ip := net.ParseIP(ipStr)
- if ip == nil {
- return false, fmt.Errorf("无效的IP地址: %s", ipStr)
- }
- return ip.IsLoopback(), nil
-}
-
// QueryIPDat 从dat查询IP,仅加载dat格式数据库时使用
func QueryIPDat(ipv4 string) (location *Location, err error) {
ip := net.ParseIP(ipv4).To4()
@@ -232,11 +92,24 @@ func QueryIPDat(ipv4 string) (location *Location, err error) {
return nil, errors.New("ip is not ipv4")
}
- if isLoopback, err := isLoopbackIP(ipv4); isLoopback || err != nil {
+ if ip.IsLoopback() {
return &Location{ISP: "局域网", IP: ipv4}, nil
}
- if isPrivateIP, err := isPrivateIP(ipv4); isPrivateIP || err != nil {
- return &Location{ISP: "私有地址", IP: ipv4}, nil
+
+ privateNets := []string{
+ "10.0.0.0/8",
+ "172.16.0.0/12",
+ "192.168.0.0/16",
+ }
+
+ for _, cidr := range privateNets {
+ _, ipnet, err := net.ParseCIDR(cidr)
+ if err != nil {
+ continue
+ }
+ if ipnet.Contains(ip) {
+ return &Location{ISP: "私有地址", IP: ipv4}, nil
+ }
}
ip32 := binary.BigEndian.Uint32(ip)
posA := binary.LittleEndian.Uint32(data[:4])
@@ -245,16 +118,19 @@ func QueryIPDat(ipv4 string) (location *Location, err error) {
for {
mid := posA + (((posZ-posA)/indexLen)>>1)*indexLen
if int(mid+indexLen) > len(data) {
+ // 当数据中找不到IP时,尝试使用网络查询
r, _ := LookupIP(ipv4, "json")
if r != nil {
- location := &Location{ISP: r.ISP, IP: r.IP, Country: r.CountryName, District: r.CountryCode2}
-
+ location := &Location{
+ IP: r.IP,
+ Country: r.CountryName,
+ ISP: r.ISP,
+ }
locationCache.Store(ipv4, location)
return location, nil
} else {
return nil, errors.New("ip not found")
}
-
}
buf := data[mid : mid+indexLen]
_ip := binary.LittleEndian.Uint32(buf[:4])
@@ -360,6 +236,56 @@ func QueryIPIpdb(ip string) (location *Location, err error) {
locationCache.Store(ip, location)
return location, nil
}
+// IPLocationResponse 定义IP定位API的响应结构
+type IPLocationResponse struct {
+ IP string `json:"ip"`
+ IPNumber string `json:"ip_number"`
+ IPVersion int `json:"ip_version"`
+ CountryName string `json:"country_name"`
+ CountryCode2 string `json:"country_code2"`
+ ISP string `json:"isp"`
+ ResponseCode string `json:"response_code"`
+ ResponseMessage string `json:"response_message"`
+}
+
+// LookupIP 调用外部API查询IP地理位置
+func LookupIP(ip string, format string) (*IPLocationResponse, error) {
+ // 构建请求 URL
+ baseURL := "https://api.iplocation.net/"
+ params := url.Values{}
+ params.Add("ip", ip)
+ if format != "" {
+ params.Add("format", format)
+ }
+
+ fullURL := baseURL + "?" + params.Encode()
+
+ // 发送 GET 请求
+ resp, err := http.Get(fullURL)
+ if err != nil {
+ return nil, fmt.Errorf("请求失败: %v", err)
+ }
+ defer resp.Body.Close()
+
+ // 读取响应体
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return nil, fmt.Errorf("读取响应失败: %v", err)
+ }
+
+ // 解析 JSON 响应
+ var result IPLocationResponse
+ if err := json.Unmarshal(body, &result); err != nil {
+ return nil, fmt.Errorf("解析响应失败: %v (响应内容: %s)", err, string(body))
+ }
+
+ // 检查 API 响应状态
+ if result.ResponseCode != "200" {
+ return nil, fmt.Errorf("API 调用失败: %s (%s)", result.ResponseMessage, result.ResponseCode)
+ }
+
+ return &result, nil
+}
// LoadData 从内存加载IP数据库
func LoadData(database []byte) {
@@ -407,3 +333,4 @@ func SplitResult(addr string, isp string, ipv4 string) (location *Location) {
}
return
}
+
diff --git a/logic/server.go b/logic/server.go
index 2d0af03a..38162436 100644
--- a/logic/server.go
+++ b/logic/server.go
@@ -63,6 +63,7 @@ func Start() {
}
port, err := determinePort(cool.Config.ServerInfo.CanPort)
+ cool.Config.ServerInfo.Port = uint16(port)
if err != nil {
log.Fatalf("Failed to determine port: %v", err)
}
diff --git a/modules/base/service/base_sys_log.go b/modules/base/service/base_sys_log.go
index 17adbe06..a9813222 100644
--- a/modules/base/service/base_sys_log.go
+++ b/modules/base/service/base_sys_log.go
@@ -2,6 +2,7 @@ package service
import (
"blazing/cool"
+ "fmt"
"sync"
"blazing/modules/base/model"
@@ -33,22 +34,38 @@ func NewBaseSysLogService() *BaseSysLogService {
},
},
ModifyResult: func(ctx g.Ctx, data interface{}) interface{} {
- // baseSysLog.IPAddr = fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n",
- // location.Country,
- // location.Province,
- // location.City,
- // location.District,
- // location.ISP,
- // )
+
+ var rr []g.MapStrAny
r, _ := gconv.Map(data)["list"].(gdb.Result)
- for _, v := range r {
- ipaddr, err := qqwry.QueryIP(v.Map()["ip"].(string))
+ for i := 0; i < len(r); i++ {
+ subm := r[i].GMap()
+ ipaddr, err := qqwry.QueryIP(r[i].Map()["ip"].(string))
if err == nil {
- v.GMap().Set("ipAddr", ipaddr)
+ // baseSysLog.IPAddr = fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n",
+ // location.Country,
+ // location.Province,
+ // location.City,
+ // location.District,
+ // location.ISP,
+ // )
+
+ subm.Set("ipAddr", fmt.Sprintf("国家:%s,省份:%s,城市:%s,区县:%s,运营商:%s\n",
+ ipaddr.Country,
+ ipaddr.Province,
+ ipaddr.City,
+ ipaddr.District,
+ ipaddr.ISP,
+ ))
+
}
+ rr = append(rr, subm.MapStrAny())
}
+
+ data.(map[string]interface{})["list"] = rr
+
return data
+
},
},
},
diff --git a/modules/blazing/service/item.go b/modules/blazing/service/item.go
index 26f5568b..cf1098ce 100644
--- a/modules/blazing/service/item.go
+++ b/modules/blazing/service/item.go
@@ -38,7 +38,7 @@ func (s *ItemService) UPDATE(id uint32, count int) {
"item_id": id,
"item_cnt": count,
}
- data = cool.SetTest(data)
+ //data = cool.SetTest(data)
m.Data(data).Insert()
}
diff --git a/modules/config/model/server_list.go b/modules/config/model/server_list.go
index d6f1fb1f..45bfec1a 100644
--- a/modules/config/model/server_list.go
+++ b/modules/config/model/server_list.go
@@ -12,6 +12,8 @@ const TableNameServerList = "server_list"
type ServerList struct {
*cool.Model
coolconfig.ServerList
+ //isonline
+ IsOnline uint8 `gorm:"column:isonline;default:0;comment:'是否在线'" json:"isonline"`
}
// TableName ServerList's table name
diff --git a/modules/config/service/server.go b/modules/config/service/server.go
index 94b04532..f5caef73 100644
--- a/modules/config/service/server.go
+++ b/modules/config/service/server.go
@@ -29,24 +29,29 @@ func NewServerService() *ServerService {
Model: model.NewServerList(),
PageQueryOp: &cool.QueryOp{
ModifyResult: func(ctx g.Ctx, data interface{}) interface{} {
-
+ var rr []g.MapStrAny
r, _ := gconv.Map(data)["list"].(gdb.Result)
- for _, v := range r {
- t, ok := cool.GetClient(gconv.Uint16(v.Map()["port"]))
+ for i := 0; i < len(r); i++ {
+ t, ok := cool.GetClient(gconv.Uint16(r[i].Map()["port"]))
+ // tt.Friends = v.Friends
+ subm := r[i].GMap()
if ok {
cool.Logger.Info(context.TODO(), "服务器假踢人")
err := t.KickPerson(0) //实现指定服务器踢人
if err == nil {
- // tt.Friends = v.Friends
- v.GMap().Set("isonline", 1)
+
+ subm.Set("isonline", 1)
}
}
-
+ rr = append(rr, subm.MapStrAny())
}
+
+ data.(map[string]interface{})["list"] = rr
+
return data
},
},
diff --git a/public/login-login-linux-amd64 b/public/login-login-linux-amd64
index 5b8e8a65108dab596eb9098cacd1a35f35726e6b..6d521297a85284339c2f2f1fd21cc03243d5f0fe 100644
GIT binary patch
delta 10089787
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 L@PU6|e
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
|