mirror of
				https://github.com/xiaoqidun/qqwry.git
				synced 2023-06-27 14:38:22 +08:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			47ef8058d0
			...
			5303137428
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5303137428 | |||
| 841b08cf06 | |||
| 88e9c989f5 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
.idea/
 | 
					.idea/
 | 
				
			||||||
.vscode/
 | 
					.vscode/
 | 
				
			||||||
.devcontainer/
 | 
					.devcontainer/
 | 
				
			||||||
qqwry.dat
 | 
					assets/qqwry.dat
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@@ -33,6 +33,18 @@ 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 api:curl http://127.0.0.1/ip/1.1.1.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 特别感谢
 | 
					# 特别感谢
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 感谢[纯真IP库](https://www.cz88.net/)一直坚持为大家提供免费IP数据库。
 | 
					- 感谢[纯真IP库](https://www.cz88.net/)一直坚持为大家提供免费IP数据库。
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								assets/assets.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								assets/assets.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					package assets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import _ "embed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:embed qqwry.dat
 | 
				
			||||||
 | 
					var QQWryDat []byte
 | 
				
			||||||
							
								
								
									
										25
									
								
								client/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								client/client.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					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("qqwry.dat"); err != nil {
 | 
						if err := LoadFile("assets/qqwry.dat"); err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								server/server.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								server/server.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					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)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user