65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package main
|
||
|
||
import (
|
||
"checkIP/modules"
|
||
"encoding/json"
|
||
"fmt"
|
||
"log"
|
||
"net/http"
|
||
"strings"
|
||
)
|
||
|
||
func getIPInfoAndRespond(w http.ResponseWriter, r *http.Request) {
|
||
// 获取访问者IP地址
|
||
ip := ""
|
||
xffHeader := r.Header.Get("X-Forwarded-For")
|
||
if xffHeader != "" {
|
||
// 如果X-Forwarded-For头部不为空,则使用其中的第一个IP地址
|
||
ip = strings.Split(xffHeader, ", ")[0]
|
||
} else {
|
||
// 否则,使用RemoteAddr提取IP地址(可能包含端口信息)
|
||
ip = strings.Split(r.RemoteAddr, ":")[0]
|
||
}
|
||
|
||
// 检查IP地址是否为空
|
||
if ip == "" {
|
||
w.Write([]byte("Invalid IP"))
|
||
return
|
||
}
|
||
|
||
// 获取IP信息
|
||
IPinfo := modules.GetIPInformation(ip)
|
||
fmt.Println("IP", IPinfo.IP)
|
||
fmt.Println("IsPrivate", IPinfo.IsPrivate)
|
||
fmt.Println("PrivateCIDR", IPinfo.PrivateCIDR)
|
||
|
||
// 检查是否为私有IP
|
||
if IPinfo.IsPrivate == true {
|
||
w.Write([]byte("Invalid IP"))
|
||
return
|
||
}
|
||
|
||
// 使用mmdb查询ip
|
||
IpIformation := modules.MmdbQueryIP(IPinfo.IP)
|
||
// 使用MySql查询ip
|
||
//dsn := modules.Readconfig()
|
||
//IpIformation := modules.MysqlQuery(ip, dsn)
|
||
|
||
log.Println("tag:main", IpIformation)
|
||
jsonData, err := json.Marshal(IpIformation)
|
||
if err != nil {
|
||
fmt.Println("JSON 序列化失败:", err)
|
||
return
|
||
}
|
||
|
||
// 设置响应的 Content-Type 为 application/json
|
||
w.Header().Set("Content-Type", "application/json")
|
||
// 返回 JSON 数据
|
||
w.Write(jsonData)
|
||
}
|
||
|
||
func main() {
|
||
http.HandleFunc("/", getIPInfoAndRespond)
|
||
http.ListenAndServe(":8341", nil)
|
||
}
|