Compare commits

..

No commits in common. "5303137428aecd411b107880ccd2cc33cb87f152" and "47ef8058d0dfc27566ceddff2c932d082b7dfe38" have entirely different histories.

6 changed files with 2 additions and 92 deletions

2
.gitignore vendored

@ -1,4 +1,4 @@
.idea/ .idea/
.vscode/ .vscode/
.devcontainer/ .devcontainer/
assets/qqwry.dat qqwry.dat

@ -33,18 +33,6 @@ func main() {
- [https://aite.xyz/share-file/qqwry/qqwry.dat](https://aite.xyz/share-file/qqwry/qqwry.dat) - [https://aite.xyz/share-file/qqwry/qqwry.dat](https://aite.xyz/share-file/qqwry/qqwry.dat)
# 编译说明
1. 下载IP数据库并放置于assets目录中。
2. client和server需要go1.16的内嵌资源特性。
3. 作为库使用请直接引包并不需要go1.16+才能编译。
# 服务接口
1. 自行根据需要调整server下源码。
2. 可以通过-listen参数指定http服务地址。
3. json apicurl http://127.0.0.1/ip/1.1.1.1
# 特别感谢 # 特别感谢
- 感谢[纯真IP库](https://www.cz88.net/)一直坚持为大家提供免费IP数据库。 - 感谢[纯真IP库](https://www.cz88.net/)一直坚持为大家提供免费IP数据库。

@ -1,6 +0,0 @@
package assets
import _ "embed"
//go:embed qqwry.dat
var QQWryDat []byte

@ -1,25 +0,0 @@
package main
import (
"fmt"
"github.com/xiaoqidun/qqwry"
"github.com/xiaoqidun/qqwry/assets"
"os"
)
func init() {
qqwry.LoadData(assets.QQWryDat)
}
func main() {
if len(os.Args) < 2 {
return
}
queryIp := os.Args[1]
city, area, err := qqwry.QueryIP(queryIp)
if err != nil {
fmt.Printf("错误:%v\n", err)
return
}
fmt.Printf("城市:%s区域%s\n", city, area)
}

@ -5,7 +5,7 @@ import (
) )
func init() { func init() {
if err := LoadFile("assets/qqwry.dat"); err != nil { if err := LoadFile("qqwry.dat"); err != nil {
panic(err) panic(err)
} }
} }

@ -1,47 +0,0 @@
package main
import (
"encoding/json"
"flag"
"github.com/xiaoqidun/qqwry"
"github.com/xiaoqidun/qqwry/assets"
"net"
"net/http"
)
type resp struct {
IP string `json:"ip"`
Err string `json:"err"`
City string `json:"city"`
Area string `json:"area"`
}
func init() {
qqwry.LoadData(assets.QQWryDat)
}
func main() {
listen := flag.String("listen", "127.0.0.1:80", "http server listen addr")
flag.Parse()
http.HandleFunc("/ip/", IpAPI)
if err := http.ListenAndServe(*listen, nil); err != nil {
panic(err)
}
}
func IpAPI(writer http.ResponseWriter, request *http.Request) {
ip := request.URL.Path[4:]
if ip == "" {
ip, _, _ = net.SplitHostPort(request.RemoteAddr)
}
rw := &resp{IP: ip}
city, area, err := qqwry.QueryIP(ip)
if err != nil {
rw.Err = err.Error()
} else {
rw.City = city
rw.Area = area
}
b, _ := json.MarshalIndent(rw, "", " ")
_, _ = writer.Write(b)
}