Code Monkey home page Code Monkey logo

nali's Introduction


Nali

一个查询IP地理信息和CDN提供商的离线终端工具.

Github Actions

功能

  • 支持多种数据库
    • 纯真 IPv4 离线数据库
    • ZX IPv6 离线数据库
    • Geoip2 城市数据库 (可选)
    • IPIP 数据库 (可选)
    • ip2region 数据库 (可选)
    • DB-IP 数据库 (可选)
    • IP2Location DB3 LITE 数据库 (可选)
  • CDN 服务提供商查询
  • 支持管道处理
  • 支持交互式查询
  • 同时支持IPv4和IPv6
  • 支持多语言
  • 查询完全离线
  • 全平台支持
  • 支持彩色输出

安装

从源码安装

Nali 需要预先安装 Go >= 1.19. 安装后可以从源码安装软件:

$ go install github.com/zu1k/nali@latest

下载预编译的可执行程序

可以从Release页面下载预编译好的可执行程序: Release

你需要选择适合你系统和硬件架构的版本下载,解压后可直接运行

Arch 系 Linux

我们在 Aur 中发布了 3 个相关的包:

  • nali-go: Release 版本,安装时编译
  • nali-go-bin: Release 版本,预编译的二进制文件
  • nali-go-git: 最新的 master 分支版本,安装时编译

使用说明

查询一个IP的地理信息

$ nali 1.2.3.4
1.2.3.4 [澳大利亚 APNIC Debogon-prefix网络]

或者 使用 管道

$ echo IP 6.6.6.6 | nali
IP 6.6.6.6 [美国 亚利桑那州华楚卡堡市美国国防部网络中心]

同时查询多个IP的地理信息

$ nali 1.2.3.4 4.3.2.1 123.23.3.0
1.2.3.4 [澳大利亚 APNIC Debogon-prefix网络]
4.3.2.1 [美国 新泽西州纽瓦克市Level3Communications]
123.23.3.0 [越南 越南邮电集团公司]

交互式查询

使用 exitquit 退出查询

$ nali
123.23.23.23
123.23.23.23 [越南 越南邮电集团公司]
1.0.0.1
1.0.0.1 [美国 APNIC&CloudFlare公共DNS服务器]
8.8.8.8
8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]
quit

dig 命令配合使用

需要你系统中已经安装好 dig 程序

$ dig nali.zu1k.com +short | nali
104.28.2.115 [美国 CloudFlare公司CDN节点]
104.28.3.115 [美国 CloudFlare公司CDN节点]
172.67.135.48 [美国 CloudFlare节点]

nslookup 命令配合使用

需要你系统中已经安装好 nslookup 程序

$ nslookup nali.zu1k.com 8.8.8.8 | nali
Server:         8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]
Address:        8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]#53

Non-authoritative answer:
Name:   nali.zu1k.com
Address: 104.28.3.115 [美国 CloudFlare公司CDN节点]
Name:   nali.zu1k.com
Address: 104.28.2.115 [美国 CloudFlare公司CDN节点]
Name:   nali.zu1k.com
Address: 172.67.135.48 [美国 CloudFlare节点]

与任意程序配合使用

因为 nali 支持管道处理,所以可以和任意程序配合使用

bash abc.sh | nali

Nali 将在 IP后面插入IP地理信息,CDN域名后面插入CDN服务提供商信息

支持IPv6

和 IPv4 用法完全相同

$ nslookup google.com | nali
Server:         127.0.0.53 [局域网 IP]
Address:        127.0.0.53 [局域网 IP]#53

Non-authoritative answer:
Name:   google.com
Address: 216.58.211.110 [美国 Google全球边缘网络]
Name:   google.com
Address: 2a00:1450:400e:809::200e [荷兰Amsterdam Google Inc. 服务器网段]

查询 CDN 服务提供商

因为 CDN 服务通常使用 CNAME 的域名解析方式,所以推荐与 nslookup 或者 dig 配合使用,在已经知道 CNAME 后可单独使用

$ nslookup www.gov.cn | nali
Server:         127.0.0.53 [局域网 IP]
Address:        127.0.0.53 [局域网 IP]#53

Non-authoritative answer:
www.gov.cn      canonical name = www.gov.cn.bsgslb.cn [白山云 CDN].
www.gov.cn.bsgslb.cn [白山云 CDN]       canonical name = zgovweb.v.bsgslb.cn [白山云 CDN].
Name:   zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 103.104.170.25 [新加坡 ]
Name:   zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 2001:428:6402:21b::5 [美国Louisiana州Monroe Qwest Communications Company, LLC (CenturyLink)]
Name:   zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 2001:428:6402:21b::6 [美国Louisiana州Monroe Qwest Communications Company, LLC (CenturyLink)]

用户交互

程序第一次运行后,会在 config 目录生成配置文件 config.yaml (使用 nali info 来查看具体信息),配置文件定义了数据库信息,默认用户无需进行修改

数据库格式默认如下:

- name: geoip
  name-alias:
  - geolite
  - geolite2
  format: mmdb
  file: GeoLite2-City.mmdb
  languages:
  - ALL
  types:
  - IPv4
  - IPv6

其中,languagestypes 表示该数据库支持的语言和查询类型。 如果你需要增加数据库,需小心修改配置文件,如果有任何问题,欢迎提 issue 询问。

查看帮助

$ nali --help
Usage:
  nali [flags]
  nali [command]

Available Commands:
  help        Help about any command
  update      update qqwry, zxipv6wry, ip2region ip database and cdn

Flags:
  -h, --help     help for nali
  -t, --toggle   Help message for toggle

Use "nali [command] --help" for more information about a command.

更新数据库

更新所有可以自动更新的数据库

$ nali update
2020/07/17 12:53:46 正在下载最新纯真 IP 库...
2020/07/17 12:54:05 已将最新的纯真 IP 库保存到本地 /root/.nali/qqwry.dat

或者指定数据库

$ nali update --db qqwry,cdn
2020/07/17 12:53:46 正在下载最新纯真 IP 库...
2020/07/17 12:54:05 已将最新的纯真 IP 库保存到本地 /root/.nali/qqwry.dat

自选数据库

用户可以指定使用哪个数据库,需要设置环境变量: NALI_DB_IP4NALI_DB_IP6 或者两个同时设置

支持的变量内容:

  • Geoip2 ['geoip', 'geoip2']
  • Chunzhen ['chunzhen', 'qqwry']
  • IPIP ['ipip']
  • Ip2Region ['ip2region', 'i2r']
  • DBIP ['dbip', 'db-ip']
  • IP2Location ['ip2location']

Windows平台

使用geoip数据库
set NALI_DB_IP4=geoip

或者使用 powershell

$env:NALI_DB_IP4="geoip"
使用ipip数据库
set NALI_DB_IP6=ipip

或者使用 powershell

$env:NALI_DB_IP6="ipip"

Linux平台

使用geoip数据库
export NALI_DB_IP4=geoip
使用ipip数据库
export NALI_DB_IP4=ipip

多语言支持

通过修改环境变量 NALI_LANG 来指定使用的语言,当使用非中文语言时仅支持GeoIP2这个数据库

该参数可设置的值见 GeoIP2 这个数据库的支持列表

# NALI_LANG=en nali 1.1.1.1
1.1.1.1 [Australia]

工作目录

设置环境变量 NALI_HOME 来指定工作目录,配置文件和数据库存放在工作目录下。也可在配置文件中使用绝对路径指定其他数据库路径。

设置环境变量 NALI_CONFIG_HOME 来指定配置文件目录,NALI_DB_HOME 来执行数据库文件目录

如果未指定相关环境变量,将使用 XDG 规范,配置文件目录在 $XDG_CONFIG_HOME/nali,数据库文件目录在 $XDG_DATA_HOME/nali

set NALI_HOME=D:\nali

or

export NALI_HOME=/var/nali

感谢列表

感谢 JetBrains 提供开源项目免费License

作者

Nali © zu1k, 遵循 MIT 证书.

nali's People

Contributors

datebro avatar dependabot[bot] avatar fengdelan avatar hezhizhen avatar huyz-git avatar hyliang96 avatar jasonttu avatar jingjingxyk avatar lgtm-migrator avatar lh1xc avatar m09ic avatar mzz2017 avatar oldshensheep avatar oldthreefeng avatar wisecsj avatar zpcc avatar zu1k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nali's Issues

执行nslookup报错

nslookup nali.zu1k.com 8.8.8.8 | nali
Server: 8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]
Address: 8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器] #53

Non-authoritative answer:
panic: cdn data parse failed!

goroutine 1 [running]:
github.com/zu1k/nali/pkg/cdn.NewCDN({0xc0001c8120, 0x1b})
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/pkg/cdn/cdn.go:54 +0x24d
github.com/zu1k/nali/internal/db.GetDB(0x2)
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/internal/db/db.go:73 +0x1bd
github.com/zu1k/nali/internal/db.Find(0x147c310?, {0xc0001ac330, 0xd})
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/internal/db/db.go:105 +0x5e
github.com/zu1k/nali/internal/entity.ParseLine({0xc0001ac330, 0x2e})
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/internal/entity/parse.go:54 +0x389
github.com/zu1k/nali/internal/app.Root({0x16ee130?, 0x13d5abb?, 0x0?}, 0x0)
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/internal/app/command.go:25 +0x105
github.com/zu1k/nali/cmd.glob..func1(0x16b8500?, {0x16ee130, 0x0, 0x0})
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:56 +0x4f
github.com/spf13/cobra.(*Command).execute(0x16b8500, {0xc0001901e0, 0x0, 0x0})
/Users/frank/go/pkg/mod/github.com/spf13/[email protected]/command.go:860 +0x663
github.com/spf13/cobra.(*Command).ExecuteC(0x16b8500)
/Users/frank/go/pkg/mod/github.com/spf13/[email protected]/command.go:974 +0x3b4
github.com/spf13/cobra.(*Command).Execute(...)
/Users/frank/go/pkg/mod/github.com/spf13/[email protected]/command.go:902
github.com/zu1k/nali/cmd.Execute()
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:62 +0x25
main.main()
/Users/frank/go/pkg/mod/github.com/zu1k/[email protected]/main.go:8 +0x17

about Releases and Tags

The releases and tags were mistakenly deleted by a gitea mirror push, I'm contacting GitHub staff to undo it.

版本号命名方式修改通知 0.3.8 => v0.3.8

因为 go install 仅会将 v0.3.8 类型的 tag 作为有效的版本号,而不会识别 0.3.8,我决定从 0.4 版本开始,版本号将恢复 v 开头的版本号命名方式,提前通知

使用 Scoop 从 0.3.9 升级到 0.3.10 出错

之前安装时没这个问题,升级时发现 Windows Security 弹了个通知然后下载的文件被删了导致升级失败。
不知道你是否有空分析一下原因?

系统环境
Edition Windows 11 Pro
Version 21H2
Installed on ‎11/‎23/‎2021
OS build 22000.675
Experience Windows Feature Experience Pack 1000.22000.675.0

ofc0ATMRDn

win10 update ipv6 总是报错,重启也不行。

image

win10 update ipv6 总是报错,重启也不行。

centos下没问题。
[root@localhost bin]# /usr/local/bin/nali update
2022/04/08 23:34:57 正在下载最新 纯真 IPv4数据库...
2022/04/08 23:35:02 已将最新的 纯真IP库 保存到本地: [/root/.nali/qqwry.dat]
2022/04/08 23:35:02 正在下载最新 ZX IPv6数据库...
2022/04/08 23:35:03 已将最新的 ZX IPv6数据库 保存到本地: [/root/.nali/zxipv6wry.db]
ll2022/04/08 23:35:07 已将最新的 ip2region 保存到本地: [/root/.nali/ip2region.db]
2022/04/08 23:35:07 正在下载最新 CDN服务提供商数据库...

2022/04/08 23:35:08 已将最新的 CDN数据库 保存到本地: [/root/.nali/cdn.yml]

Windows下nslookup nali.lgf.im 8.8.8.8 | nali 回显字符异常

在Windows terminal下面输入会有异常

D:\Tools\nali>nslookup nali.lgf.im 8.8.8.8 | nali
非权威应答:
������:  dns.google
Address:  8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]

����:    nali.lgf.im
Addresses:  104.21.6.190 [美国 CloudFlare公司CDN节点]
          172.67.135.48 [美国 CloudFlare节点]

[help wanted] nali will destroy mtr output format

✘ ⚡ root@tx-HK-Debian10  /aabin  nali --version       
nali version 0.3.7

 ? root@tx-HK-Debian10 ? /aabin ? lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster


 ⚡ root@tx-HK-Debian10  /aabin  mtr baidu.com |nali

结果出现排版很多错位的
image

如果不用nali,mtr同一个,如下图
image

go install报错

go install github.com/zu1k/nali

go: 'go install' requires a version when current directory is not in a module
	Try 'go install github.com/zu1k/nali@latest' to install the latest version

后面要加上版本

go get 安装不成功,命令执行后没有执行文件!

以下是 go get -u -v github.com/zu1k/nali 执行返回。然后当前目录下没有文件产生。
请求指导!

root@Armbian:/tmp/temp# go get -u -v github.com/zu1k/nali go: downloading github.com/zu1k/nali v0.2.4 go: downloading github.com/spf13/cobra v1.1.3 go: downloading golang.org/x/text v0.3.6 go: downloading github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda go: downloading github.com/oschwald/geoip2-golang v1.5.0 go: downloading github.com/ipipdotnet/ipdb-go v1.3.1 go: downloading github.com/inconshreveable/mousetrap v1.0.0 go: downloading github.com/spf13/pflag v1.0.5 go: downloading github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f go: downloading github.com/ulikunitz/xz v0.5.7 go: downloading github.com/oschwald/maxminddb-golang v1.8.0 go: downloading golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae go: downloading github.com/ulikunitz/xz v0.5.10 go: downloading golang.org/x/sys v0.0.0-20210415045647-66c3f260301c github.com/zu1k/nali/constant golang.org/x/sys/internal/unsafeheader github.com/ulikunitz/xz/internal/hash golang.org/x/text/encoding/internal/identifier golang.org/x/text/transform golang.org/x/sys/unix github.com/zu1k/nali/internal/ipdb github.com/spf13/pflag github.com/zu1k/nali/internal/tools github.com/zu1k/nali/pkg/common github.com/ipipdotnet/ipdb-go github.com/zu1k/nali/pkg/cdn golang.org/x/text/encoding github.com/zu1k/nali/pkg/ipip golang.org/x/text/encoding/internal github.com/saracen/go7z/filters golang.org/x/text/encoding/simplifiedchinese github.com/saracen/go7z/headers github.com/saracen/solidblock github.com/ulikunitz/xz/internal/xlog github.com/ulikunitz/xz/lzma github.com/spf13/cobra github.com/oschwald/maxminddb-golang github.com/zu1k/nali/pkg/qqwry github.com/oschwald/geoip2-golang github.com/saracen/go7z github.com/zu1k/nali/pkg/geoip github.com/zu1k/nali/pkg/zxipv6wry github.com/zu1k/nali/internal/app github.com/zu1k/nali/cmd github.com/zu1k/nali

匹配某种形式的地址会出错。

比如::ffff这种地址

~ nslookup chdbits.co 223.5.5.5
Server:  public1.alidns.com
Address:  223.5.5.5

Name:    chdbits.co
Addresses:  ::ffff:104.26.11.119
          104.26.11.119

~ nslookup chdbits.co 223.5.5.5 | nali
Server:  public1.alidns.com
Address:  223.5.5.5 [浙江省杭州市 阿里巴巴阿里云AliDNS服务器]

Name:    chdbits.co
Addresses:  ::ffff:104 [IANA保留地址] .26.11.119
          104.26.11.119 [美国 CloudFlare公司CDN节点]

很方便的工具,可不可以增加点提示和新的功能

  1. 当提示【文件不存在,尝试从网络获取最新数据库】时,显示下载进度条,否则网络差的时候,看起来像是程序卡住了
  2. 设置NALI_DB_IP4=geoip:chunzhen:ipip时,可以同时显示多个IP库的结果
  3. 是否可以支持mtr呢,例如: mtr -n baidu.com | ./nali 。traceroute命令显示正常,而mtr是动态的,界面都乱掉了
  4. 除了pipeline,也支持直接读取普通文件或gz文件,例如 nali /var/log/nginx/access.log,nali /var/log/nginx/login.access.log-20181220.gz
  5. 增加一个选项,启用后可以直接支持查询域名和URL(截取域名并解析成IP),类似下面这样
    image

请求添加显示版本的命令

nali versionnali -Vnali --version,输出后可查询当前nali的版本,后两种是比较常见的用法。方便脚本检测并自动更新。

Not work with *.com.*.com

Some CDN providers use the source domain as the prefix of CNAME, like a.com.qiniudns.com.

Nali does not work with that:

$ echo a.a.qiniudns.com | nali
a.a.qiniudns.com [七牛云]

$ echo a.com.qiniudns.com | nali
a.com.qiniudns.com

封装API

请问如何封装API调用呢,感谢

使用 正则匹配 判断是否为ipv4/6的性能和算法实现的性能差别还是挺大的

推荐一个leecode上的大佬写的.

func isIPV4(IP string) bool {
    arr := strings.Split(IP, ".")
    if len(arr) != 4 {
        return false
    }
    for _, elem := range arr {
        if elem == "" {
            return false
        }
        if len(elem) > 1 && elem[0] == '0' {
            return false
        }
        num := 0
        for _, c := range elem {
            if c >= '0' && c <= '9' {
                num = num*10 + int(c - '0')
            }else{
                return false
            }
        }
        if num > 255 {
            return false
        }
    }
    return true
}

//IPV6地址的判断:
//1. 用“:”分割字符串,若长度不等于8,则return Neither
//2. 遍历每一个数组的每一个元素,若元素的长度大于4,则return Neither
//3. 判断每一个元素的字符,若出现非0-9,A-F的字符,则return Neither
func isIPV6(IP string) bool {
    IP = strings.ToUpper(IP)
    arr := strings.Split(IP, ":")
    if len(arr) != 8 {
        return false
    }
    for _, elem := range arr {
        if elem == "" || len(elem) > 4{
            return false
        }
        
        for _, c := range elem {
            if (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'){
                continue
            }else{
                return false
            }
        }
    }
    return true
}

qqwry手动解压错误

➜  doc nali 8.8.8.8
panic: runtime error: slice bounds out of range [:4] with capacity 0

goroutine 1 [running]:
github.com/zu1k/nali/pkg/qqwry.(*QQwry).searchIndex(0x4000097b28, 0x8080808, 0x10)
        github.com/zu1k/nali/pkg/qqwry/qqwry.go:124 +0x360
github.com/zu1k/nali/pkg/qqwry.QQwry.Find(0x400002d170, 0x1ae419277acaa757, 0x7fcaa9e413, 0x7, 0x0, 0x0)
        github.com/zu1k/nali/pkg/qqwry/qqwry.go:66 +0xb0
github.com/zu1k/nali/internal/app.ParseIPs(0x400005da80, 0x1, 0x1)
        github.com/zu1k/nali/internal/app/parse.go:48 +0xe0
github.com/zu1k/nali/cmd.glob..func3(0x76bce0, 0x400005da80, 0x1, 0x1)
        github.com/zu1k/nali/cmd/root.go:72 +0x1d0
github.com/spf13/cobra.(*Command).execute(0x76bce0, 0x400000c090, 0x1, 0x1, 0x76bce0, 0x400000c090)
        github.com/spf13/[email protected]/command.go:846 +0x1c4
github.com/spf13/cobra.(*Command).ExecuteC(0x76bce0, 0x42d1c, 0x40000240b8, 0x0)
        github.com/spf13/[email protected]/command.go:950 +0x260
github.com/spf13/cobra.(*Command).Execute(...)
        github.com/spf13/[email protected]/command.go:887
github.com/zu1k/nali/cmd.Execute()
        github.com/zu1k/nali/cmd/root.go:79 +0x30
main.main()
        github.com/zu1k/nali/main.go:14 +0x24
➜  doc

output error when the ip is repeated as a entire or as a substring

  1. When then an ip is repeated like n times in a line, then in the output of nali for this line, the geological location will be repeated n times after everywhere the ip appears.

For example:

> echo '127.0.0.1 aaa' | nali
127.0.0.1 [本机地址] aaa

> echo '127.0.0.1 aaa 127.0.0.1' | nali
127.0.0.1 [本机地址] [本机地址] aaa 127.0.0.1 [本机地址] [本机地址]

> echo '127.0.0.1 aaa 127.0.0.1 bbbb 127.0.0.1' | nali
127.0.0.1 [本机地址] [本机地址] [本机地址] aaa 127.0.0.1 [本机地址] [本机地址] [本机地址] bbbb 127.0.0.1 [本机地址] [本机地址] [本机地址]

> echo '127.0.0.1 aa 127.0.0.2 aaaaa 127.0.0.1' | nali
127.0.0.1 [本机地址] [本机地址] aa 127.0.0.2 [局域网 IP] aaaaa 127.0.0.1 [本机地址] [本机地址]
  1. When a line contains more than ips, where one ip is a subtring of another ip, the ips will be parsed incorrectly. For example:
# ipxxxx   ip
> echo '127.0.0.12 aa 127.0.0.1 bbb' | nali
127.0.0.1 [本机地址]2 [局域网 IP] aa 127.0.0.1 [本机地址] bbb

# ip  ipxxxx
> echo '127.0.0.1 aa 127.0.0.12 bbb' | nali
127.0.0.1 [本机地址] aa 127.0.0.1 [本机地址]2 bbb

# ip  xxxip
> echo '27.0.0.1 aa 127.0.0.1 bbb' | nali
27.0.0.1 [日本 东京都Amazon数据中心] aa 127.0.0.1 [本机地址] [日本 东京都Amazon数据中心] bbb

# xxxip   ip
> echo '127.0.0.1 aa 27.0.0.1 bbb' | nali
127.0.0.1 [日本 东京都Amazon数据中心] [本机地址] aa 27.0.0.1 [日本 东京都Amazon数据中心] bbb

# xxxipxxx ip
> echo '127.0.0.12 aa 27.0.0.1 bbb' | nali
127.0.0.1 [日本 东京都Amazon数据中心]2 [局域网 IP] aa 27.0.0.1 [日本 东京都Amazon数据中心] bbb

# ip    xxxxipxxxx
> echo '27.0.0.1 aa 127.0.0.12 bbb' | nali
27.0.0.1 [日本 东京都Amazon数据中心] aa 127.0.0.1 [日本 东京都Amazon数据中心]2 bbb

For different the aforementioned cases of the relations between the two ips, the fault is different.

parseBaseCname Error

parseBaseCname() may be error. eg:www.ucloud.cn.ucloud.com.cn

func parseBaseCname(url string) (string, error) {
extract, err := tldextract.New(TldCachePath, false)
if err != nil {
return "", err
}
res := extract.Extract(url)
rootDomain := res.Root + "." + res.Tld
return rootDomain, nil
}

查询IP出错

2020/08/24 17:19:42 文件不存在,尝试从网络获取最新ZX IPv6数据库
panic: invalid signature header

goroutine 1 [running]:
github.com/zu1k/nali/pkg/zxipv6wry.Un7z(0xc0000225c0, 0xe, 0x0, 0x0, 0x0, 0x8f83e0, 0xc0000a1670)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/pkg/zxipv6wry/update.go:57 +0x61e
github.com/zu1k/nali/pkg/zxipv6wry.getData(0x0, 0x0, 0x0, 0x0, 0x0)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/pkg/zxipv6wry/update.go:49 +0x2ca
github.com/zu1k/nali/pkg/zxipv6wry.Download(0xc000024120, 0x1f, 0x1, 0xc0000a00e0, 0x8f8a01, 0xc0000a2210, 0x1f)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/pkg/zxipv6wry/update.go:16 +0x34
github.com/zu1k/nali/pkg/zxipv6wry.NewZXwry(0xc000024120, 0x1f, 0x0, 0x0)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/pkg/zxipv6wry/zxipv6wry.go:27 +0xfa
github.com/zu1k/nali/internal/app.InitIPDB(0x1)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/internal/app/parse.go:30 +0x480
github.com/zu1k/nali/cmd.glob..func3(0xbcd0c0, 0xc0000a1a70, 0x1, 0x1)
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:59 +0x39
github.com/spf13/cobra.(*Command).execute(0xbcd0c0, 0xc0000ae030, 0x1, 0x1, 0xbcd0c0, 0xc0000ae030)
/home/xxxxxx/go/pkg/mod/github.com/spf13/[email protected]/command.go:846 +0x29d
github.com/spf13/cobra.(*Command).ExecuteC(0xbcd0c0, 0x40748f, 0xc000096058, 0x0)
/home/xxxxxx/go/pkg/mod/github.com/spf13/[email protected]/command.go:950 +0x349
github.com/spf13/cobra.(*Command).Execute(...)
/home/xxxxxx/go/pkg/mod/github.com/spf13/[email protected]/command.go:887
github.com/zu1k/nali/cmd.Execute()
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:79 +0x31
main.main()
/home/xxxxxx/go/pkg/mod/github.com/zu1k/[email protected]/main.go:14 +0x25

需要支持通配符或者正则

可能需要引入字符串 glob 或者正则来处理。

阿里云全局流量管理,https://help.aliyun.com/document_detail/283229.html

通过 ICP 备案查询,阿里云注册了 63 个域名

gtm-a1b1.com  ~ gtm-a1b9.com
...
gtm-a7b1.com  ~ gtm-a7b9.com

添加设置 4ft35t/cdn@47fa60c

gtm-a[1-7]b[1-9].com:
  name: 阿里云全局流量管理
  link: https://help.aliyun.com/document_detail/283229.html

可测试域名

nslookup exp.leuke.cn 114.114.114.114
Server:         114.114.114.114
Address:        114.114.114.114#53

Non-authoritative answer:
exp.leuke.cn    canonical name = gtm-cn-zvp2nicnw08.gtm-a2b2.com.
Name:   gtm-cn-zvp2nicnw08.gtm-a2b2.com
Address: 59.110.23.54

dig 匹配失败

nslookup 正常

nslookup img.vodjk.com 114.114.114.114 | nali
Server:		114.114.114.114 [114DNS.COM 114DNS.COM]
Address:	114.114.114.114 [114DNS.COM 114DNS.COM]#53

Non-authoritative answer:
img.vodjk.com	canonical name = img.vodjk.com.s.galileo.jcloud-cdn.com.
img.vodjk.com.s.galileo.jcloud-cdn.com [京东云 CDN]	canonical name = mfn-sched.jcloud-cdn.com.
Name:	mfn-sched.jcloud-cdn.com [京东云 CDN]
Address: 180.97.189.3 [** 江苏 扬州]

dig 没有匹配 CNAME 信息

dig img.vodjk.com @114.114.114.114 +short | nali
img.vodjk.com.s.galileo.jcloud-cdn.com.
mfn-sched.jcloud-cdn.com.
180.97.189.3 [** 江苏 扬州]

移除尾部的 . 后正常显示,域名尾部的 . 是符合 RFC 规范的

dig img.vodjk.com @114.114.114.114 +short  | sed 's/\.$//' | nali
img.vodjk.com.s.galileo.jcloud-cdn.com [京东云 CDN]
mfn-sched.jcloud-cdn.com [京东云 CDN]
180.97.189.3 [** 江苏 扬州]

一行多个IP会导致只有部分显示结果

目前状况:

167.71.18.94 207.154.224.242 [美国 纽约市DigitalOcean云公司]  47.106.88.234 120.246.107.20 [** 移动]  111.59.153.137 118.123.213.221 172.105.90.107 207.180.236.214 [美国 ]  143.198.50.119 [美国 ]  165.232.161.232 182.150.48.140 [四川省成都市 电信]

分析:看了一下代码,正则匹配是正常的。出错的原因是ip同时命中了ipv4和domain的正则,sort之后有的ip在数组中是ipv4匹配在前,有的是domain在前,ipv4在前的结果就被domain的覆盖了,而domain查询结果为空,导致最终结果为空。

Element[0] = &{[%!s(int=0) %!s(int=12)] %!s(entity.EntityType=2) 167.71.18.94 }
Element[1] = &{[%!s(int=0) %!s(int=12)] %!s(entity.EntityType=0) 167.71.18.94 }
Element[2] = &{[%!s(int=13) %!s(int=28)] %!s(entity.EntityType=0) 207.154.224.242 }
Element[3] = &{[%!s(int=13) %!s(int=28)] %!s(entity.EntityType=2) 207.154.224.242 }

解决方案:
核心原因是正则问题,所以我的修复方式是修改正则,增加domain匹配的时候匹配一级域名,一级域名是在cdn.json里找出来的
`[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*.(cc|cloud|com.cn|com|co|cn|io|me|net|org|tv)``
ps:其实改成同个ip多次匹配返回非空那个比较合理,但不会写go。。。。
pps:正则改成这样肯定也会有问题,但我一般不查cdn问题不大

结果:

➜  nali git:(master) ✗ go run . 167.71.18.94 207.154.224.242 47.106.88.234 120.246.107.20 111.59.153.137 118.123.213.221 172.105.90.107 207.180.236.214 143.198.50.119 165.232.161.232 182.150.48.140
167.71.18.94 [美国 ]  207.154.224.242 [美国 纽约市DigitalOcean云公司]  47.106.88.234 [广东省深圳市 阿里云]  120.246.107.20 [** 移动]  111.59.153.137 [广西南宁市 移动]  118.123.213.221 [四川省成都市 电信]  172.105.90.107 [德国 黑森州法兰克福Linode数据中心]  207.180.236.214 [美国 ]  143.198.50.119 [美国 ]  165.232.161.232 [美国 ]  182.150.48.140 [四川省成都市 电信]

数据库目录存放建议

希望支持数据库存放在和程序同目录,或可指定存储目录,Linux下不同用户使用都需要单独下载一次不是很合理,希望采纳,谢谢!

部分 CNAM 匹配失败

nslookup img.vodjk.com 114.114.114.114 | nali
Server:		114.114.114.114 [114DNS.COM 114DNS.COM]
Address:	114.114.114.114 [114DNS.COM 114DNS.COM]#53

Non-authoritative answer:
img.vodjk.com	canonical name = img.vodjk.com.s.galileo.jcloud-cdn.com.
img.vodjk.com.s.galileo.jcloud-cdn.com	canonical name = mfn-sched.jcloud-cdn.com.
Name:	mfn-sched.jcloud-cdn.com
Address: 180.97.189.3 [** 江苏 扬州]

jcloud-cdn.com 在 cdn.json 里 https://github.com/zu1k/nali/blob/master/db/cdn.json#L530

类似格式百度的可以正常显示

nslookup www.baidu.com 114.114.114.114 | nali
Server:		114.114.114.114 [114DNS.COM 114DNS.COM]
Address:	114.114.114.114 [114DNS.COM 114DNS.COM]#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com [百度旗下业务地域负载均衡系统]
Address: 14.215.177.38 [** 广东 广州]
Name:	www.a.shifen.com [百度旗下业务地域负载均衡系统]
Address: 14.215.177.39 [** 广东 广州]

单独查询这个 CNAME 可以匹配 CDN 信息

nslookup mfn-sched.jcloud-cdn.com 114.114.114.114 | nali
Server:		114.114.114.114 [114DNS.COM 114DNS.COM]
Address:	114.114.114.114 [114DNS.COM 114DNS.COM]#53

Non-authoritative answer:
Name:	mfn-sched.jcloud-cdn.com [京东云 CDN]
Address: 111.123.242.3 [** 贵州 遵义]

WIN10 cmd输出乱码

C:\Users\user>tracert -d 208.54.80.99 |nali

ͨ������ 30 ��Ծ�����ٵ� 208.54.80.99 [美国] ��·��

1 1 ms <1 ���� <1 ���� 192.168.2.4 [局域网 对方和您在同一内部网]
2 240 ms 319 ms 320 ms 172.16.1.1 [局域网 对方和您在同一内部网]
3 270 ms 319 ms 226 ms 140.91.194.153 [美国]
4 264 ms 319 ms 219 ms 128.241.7.147 [美国 日本NTT通讯美洲公司]
5 278 ms 321 ms 315 ms 128.241.7.146 [美国 日本NTT通讯美洲公司]
6 245 ms 343 ms * 129.250.3.237 [日本 NTT通信公司骨干网]
7 253 ms 326 ms 311 ms 129.250.2.160 [日本 东京都NTT通信公司国际互联节点]
8 272 ms 226 ms 228 ms 144.232.0.193 [美国 Sprint电信公司网络]
9 349 ms 327 ms 312 ms 144.232.22.162 [美国 Sprint电信公司网络]
10 254 ms 319 ms 319 ms 144.232.22.95 [美国 Sprint电信公司网络]
11 273 ms 320 ms 240 ms 144.232.15.238 [美国 Sprint电信公司网络]
12 276 ms 312 ms 321 ms 144.232.15.166 [美国 Sprint电信公司网络]
13 594 ms 318 ms 318 ms 144.232.22.87 [美国 Sprint电信公司网络]
14 595 ms 278 ms 271 ms 144.232.23.145 [美国 Sprint电信公司网络]
15 * * * ������ʱ��
16 * * * ������ʱ��

C:\Users\user>ping 208.67.220.220 | nali

���� Ping 208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] ���� 32 �ֽڵ�����:
���� 208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] �Ļظ�: �ֽ�=32 ʱ��=57ms TTL=52
���� 208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] �Ļظ�: �ֽ�=32 ʱ��=47ms TTL=52
���� 208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] �Ļظ�: �ֽ�=32 ʱ��=59ms TTL=52
���� 208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] �Ļظ�: �ֽ�=32 ʱ��=57ms TTL=52

208.67.220.220 [美国 加利福尼亚州旧金山市OpenDNS有限公司公众DNS服务器] �� Ping ͳ����Ϣ:
���ݰ�: �ѷ��� = 4���ѽ��� = 4����ʧ = 0 (0% ��ʧ)��
�����г̵Ĺ���ʱ��(�Ժ���Ϊ��λ):
���� = 47ms��� = 59ms��ƽ�� = 55ms

SIGSEGV when using geoip database to query ipv6

$ NALI_DB=geoip nali-go
::1
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x70091f]

goroutine 1 [running]:
github.com/zu1k/nali/internal/app.ReplaceIPInString(0xc000029e88, 0x3, 0xc000029e88, 0x3)
        github.com/zu1k/nali/internal/app/parse.go:100 +0x67f
github.com/zu1k/nali/internal/app.Root(0xae6098, 0x0, 0x0)
        github.com/zu1k/nali/internal/app/command.go:31 +0xcb
github.com/zu1k/nali/cmd.glob..func3(0xab1aa0, 0xae6098, 0x0, 0x0)
        github.com/zu1k/nali/cmd/root.go:58 +0x51
github.com/spf13/cobra.(*Command).execute(0xab1aa0, 0xc000020210, 0x0, 0x0, 0xab1aa0, 0xc000020210)
        github.com/spf13/[email protected]/command.go:856 +0x2c2
github.com/spf13/cobra.(*Command).ExecuteC(0xab1aa0, 0x407de5, 0xc0000261d8, 0x401260)
        github.com/spf13/[email protected]/command.go:960 +0x375
github.com/spf13/cobra.(*Command).Execute(...)
        github.com/spf13/[email protected]/command.go:897
github.com/zu1k/nali/cmd.Execute()
        github.com/zu1k/nali/cmd/root.go:64 +0x31
main.main()
        github.com/zu1k/nali/main.go:14 +0x2a

version 0.2.3

CDN 数据库获取为 404 无法使用

 nali update
2022/05/01 17:48:38 正在下载最新 纯真 IPv4数据库...
2022/05/01 17:48:41 已将最新的 纯真IP库 保存到本地: C:\Users\...\.nali\qqwry.dat
2022/05/01 17:48:41 正在下载最新 ZX IPv6数据库...
2022/05/01 17:48:45 已将最新的 ZX IPv6数据库 保存到本地: C:\Users\...\.nali\ipv6wry.db
2022/05/01 17:48:45 正在下载最新 CDN服务提供商数据库...
2022/05/01 17:48:47 已将最新的 CDN数据库 保存到本地: C:\Users\...\.nali\cdn.json

虽然执行 update 成功,但 cdn.json 内容是:

404: Not Found

自此之后执行任何命令都会报错:

ping www.ddnsto.com | nali
panic: cdn data parse failed!

goroutine 1 [running]:
github.com/zu1k/nali/pkg/cdn.NewCDN(0xc000550060, 0x1e, 0x0)
        C:/Users/legend/go/pkg/mod/github.com/zu1k/[email protected]/pkg/cdn/cdn.go:47 +0x326
github.com/zu1k/nali/internal/app.InitCDNDB()
        C:/Users/legend/go/pkg/mod/github.com/zu1k/[email protected]/internal/app/cdn.go:25 +0x9d
github.com/zu1k/nali/cmd.glob..func3(0x102d660, 0x1078198, 0x0, 0x0)
        C:/Users/legend/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:57 +0x33
github.com/spf13/cobra.(*Command).execute(0x102d660, 0xc000036210, 0x0, 0x0, 0x102d660, 0xc000036210)
        C:/Users/legend/go/pkg/mod/github.com/spf13/[email protected]/command.go:860 +0x2c2
github.com/spf13/cobra.(*Command).ExecuteC(0x102d660, 0x95668b, 0xc000048058, 0x96b801)
        C:/Users/legend/go/pkg/mod/github.com/spf13/[email protected]/command.go:974 +0x375
github.com/spf13/cobra.(*Command).Execute(...)
        C:/Users/legend/go/pkg/mod/github.com/spf13/[email protected]/command.go:902
github.com/zu1k/nali/cmd.Execute()
        C:/Users/legend/go/pkg/mod/github.com/zu1k/[email protected]/cmd/root.go:64 +0x38
main.main()
        C:/Users/legend/go/pkg/mod/github.com/zu1k/[email protected]/main.go:14 +0x2c

请问是否可以加入启用特定数据库的选项以及修复一下 CDN 的数据库源地址?

nali-linux-amd64-v0.2.2.gz: not in gzip format

所以,这到底是个什么格式?

➜  shell ls nali-linux-amd64-v0.2.2.gz -l
-rw-r--r-- 1 GoGoogle GoGoogle 8130560 7月  30 07:37 nali-linux-amd64-v0.2.2.gz
➜  shell gzip ./nali-linux-amd64-v0.2.2.gz -d ./nali/

gzip: ./nali-linux-amd64-v0.2.2.gz: not in gzip format
gzip: ./nali/ is a directory -- ignored
➜  shell

通配符规则没有解析

https://github.com/zu1k/nali/blob/master/db/cdn.json#L482

  "kunlun(.*).com": {
    "name": "阿里云 CDN",
    "link": "https://www.aliyun.com/product/cdn"
  }

一个例子
nslookup asset.watsons.com.cn | nali
Server: 192.168.1.1 [局域网 局域网]
Address: 192.168.1.1 [局域网 局域网]#53

Non-authoritative answer:
asset.watsons.com.cn canonical name = asset.watsons.com.cn.w.kunlunno.com.
Name: asset.watsons.com.cn.w.kunlunno.com
Address: 125.36.136.244 [** 天津 天津]
Name: asset.watsons.com.cn.w.kunlunno.com
Address: 125.36.180.241 [** 天津 天津]

确认程序是正常工作的
nslookup playe.atnxty.com | nali
Server: 192.168.1.1 [局域网 局域网]
Address: 192.168.1.1 [局域网 局域网]#53

Non-authoritative answer:
playe.atnxty.com canonical name = playe.atnxty.com.w.cdngslb.com [阿里云 CDN].
Name: playe.atnxty.com.w.cdngslb.com [阿里云 CDN]
Address: 222.186.16.239 [** 江苏 镇江]
Name: playe.atnxty.com.w.cdngslb.com [阿里云 CDN]
Address: 58.215.158.239 [** 江苏 无锡]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.