学习笔记:自制查询IP归属地小应用
2022-3-6 21:17:48 Author: mp.weixin.qq.com(查看原文) 阅读量:6 收藏

最近在捣鼓一个需求,找出访问海外的业务。我第一反应就是从流量里捞取目标地址,然后检查IP是否为海外。

那么如何知道一个IP地址的归属地呢?我们可以通过ip138.com查询,但挨个查显然不现实,我也没钱买他们的付费服务。

于是,聪明的我从GitHub上找了一个免费的、可升级的数据库做本地离线查询。

下载地址:

https://github.com/hezhizheng/go-ip2region

启动起来是这个样子:

./go-ip2region_windows_amd64.exe -hUsage of D:\go-ip2region\go-ip2region_windows_amd64.exe:  -d string        仅用于下载最新的ip地址库,保存在当前目录 (default "0")  -p string        本地监听的端口 (default "9090")
 // 没有IP地址库会自动下载,保存在当前目录./go-ip2region_windows_amd64.exe
// 没有指定IP会获取当前客户端IPcurl http://127.0.0.1:9090curl http://127.0.0.1:9090?ip=59.42.37.186
// 返回数据格式{ "code": 200, "msg": "", "data": { "ip": "59.42.37.186", "country": "中国", "province": "广东", "city": "广州", "county": "", "region": "亚洲", "isp": "电信" }}

有了这个好东西之后,我们就能够直接开搞了。我写了一段Demo。

package mainimport ("encoding/json""fmt""io/ioutil""net/http")//定义json结构type IPinfo struct {  Code int `json:"code"`  Msg string `json:"msg"`  Data struct {    IP string `json:"ip"`    Country string `json:"country"`    Province string `json:"province"`    City string `json:"city"`    County string `json:"county"`    Region string `json:"region"`    Isp string `json:"isp"`  } `json:"data"`}func main() {  ipquery := "42.193.103.52" //要查询的IP地址  url := "http://localhost:9090?ip="  response, err := http.Get(url + ipquery)if err != nil {    fmt.Println("The site is down")  }   body, _ := ioutil.ReadAll(response.Body)var IP_Info IPinfo  err = json.Unmarshal(body, &IP_Info)if err != nil{    fmt.Printf("The error is %+v \n", err)  }  fmt.Printf("The IP %v is from %v \n\n", IP_Info.Data.IP, IP_Info.Data.Country)}

最终运行效果如下:

后来,又增加了去重、排序等功能,让程序能读更大的流量日志文件,这样就能得到自己最想要的结果了。

示例如下:

全文完,笔芯❤️


作者:阿飞,十余年来一直混迹于信息安全行业,扛过设备,卖过服务,做过审计,查过黑客,反过欺诈,岁月神偷带走了我的苹果肌,留下了一肚子的瘫软,貌似我将要成为一个油腻的中年男人,不过依然对世界充满好奇。


文章来源: https://mp.weixin.qq.com/s?__biz=MjM5Mjc0MDU1MQ==&mid=2452313915&idx=1&sn=bf56ec7c31a926898339ecf91be37033&chksm=b17e52938609db85c7d21c652fd406c654f186ada7e51b5e846ac3c4f2712221e08edb993963&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh