Nali:一个离线查询 IP 地理信息和 CDN 提供商的终端利器

Posted by Mike on 2020-09-07

什么是 Nali

dignslookuptraceroute 等都是非常实用的网络调试工具,Nali 是一个可以自动解析这些工具 stdout 中的 IP 并附上所属 ISP 和地理信息,对这些已是瑞士军刀般的工具可谓如虎添翼。

Nali 取自中文「哪里」。Nali 一开始是数年前由 surfchenCPerl 写成的小工具(C 用于解析纯真 IP 数据库,Perl 用于解析 stdout),如今已经失传。

今天给大家介绍两款基于 GO 语言和 Nodejs 开发的,且具有更多高级功能的新一代 Nali

Nali CLI

Nali CLI 采用 Nodejs 开发,在安装之前,你的环境必须已经具备 Nodejs 环境。

项目地址:

安装

对于环境中有 Node.js 的,可以直接通过 NPMYarn 安装:

1
2
3
4
# NPM
$ npm i nali-cli -g
# Yarn
$ yarn global add nali-cli

Nali CLI 也有预编译好的供 macOS x64Linux x64 的二进制文件,可以在 GitHub Repo 中的 bin 目录中下载。

首次运行 Nali CLI 时会自动下载所需的 qqwry.dat$HOME/.config/nali-cli/ 目录下。

常用命令行语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ nali --help


Usage: nali <command> [options]

Options:
-v, --version 版本信息
-h, --help output usage information

Commands:
parse 解析 stdin 或参数中的 IP 信息 (默认)
update 更新 IP 库
help [cmd] display help for [cmd]

$ nali update --help
Usage: update [options]

更新 IP 库 (qqwry.dat)

Options:
-r, --remote 获取最新 IP 库版本信息
-f, --force 强制更新 IP 库
-y, --yes 直接更新 IP 库
-h, --help output usage information

使用

Nali CLI 支持从传入的参数中解析 IP

1
2
3
4
5
6
7
8
$ nali 11.4.5.14
11.4.5.14 [美国 俄亥俄州哥伦布市 DoD 网络信息中心]

$ nali Cloudflare 1.0.0.1 1.1.1.1
Cloudflare 1.1.1.1 [美国 APNIC&CloudFlare 公共 DNS 服务器] 1.0.0.1 [美国 APNIC&CloudFlare 公共 DNS 服务器]

$ nali 114.514.191.9 114.5.1.4
114.514.191.8 114.5.1.4 [印度尼西亚]

除此以外,Nali CLI 内置了以下几个常用工具:

  • nali-dig
  • nali-nslookup
  • nali-ping
  • nali-tracepath
  • nali-traceroute

注意,上述工具只是 Wrapper,使用时仍然需要安装原始程序。比如要使用 nali-dig 和 nali-nslookup 需要先安装 Bind (dnsutils)。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ nali-nslookup nali.skk.moe 1.1.1.1
Server: 1.1.1.1 [美国 APNIC&CloudFlare 公共 DNS 服务器]
Address: 1.1.1.1 [美国 APNIC&CloudFlare 公共 DNS 服务器]#53

Non-authoritative answer:
Name: nali.skk.moe
Address: 104.18.100.28 [美国 CloudFlare 公司 CDN 节点]
Name: nali.skk.moe
Address: 104.18.101.28 [美国 CloudFlare 公司 CDN 节点]
Name: nali.skk.moe
Address: 2606:4700::6812:641c
Name: nali.skk.moe
Address: 2606:4700::6812:651c

Nali CLI 还支持从外部的 stdin 中解析和查询 IP 信息,因此像 mtr 这类未被 Nali CLI 包装的工具也可以使用:

1
2
3
4
5
# 这里以 dig 为例

$ dig nali.skk.moe @1.1.1.1 +short | nali
104.18.100.28 [美国 CloudFlare 公司 CDN 节点]
104.18.101.28 [美国 CloudFlare 公司 CDN 节点]

对于 mtr 等,还可以自行创建 nali-mtr 文件并添加到 PATH 中:

1
2
3
#!/bin/sh

mtr $@ 2>&1 | nali

也可以直接在 .bashrc.zshrc 中注册 nali-mtr

1
2
3
nali-mtr() {
mtr $@ 2>&1 | nali
}

Nali CLI 也可以更新 qqwry.dat

1
$ nali upadte

Nali (Go 版本)

Nali (Go 版本)是在 SukkaNodejs 版本上进行改良的,它在原有功能的基础上增加了对 IPv6 的支持,并且增加了 Geoip2 数据库。

项目地址:

支持的功能

  • 纯真 IPv4 离线数据库
  • ZX IPv6 离线数据库
  • Geoip2 城市数据库 (可选)
  • IPIP 数据库 (可选)
  • CDN 服务提供商查询
  • 支持管道处理
  • 支持交互式查询
  • 同时支持 IPv4 和 IPv6
  • 查询完全离线
  • 全平台支持

安装

  1. 从源码安装

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

1
$ go get -u -v github.com/zu1k/nali
  1. 下载预编译的可执行程序(推荐)

直接从项目的 Release 页面下载预编译好的可执行程序,你只需要选择适合你系统和硬件架构的版本下载,解压后直接运行即可。

常用命令语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ nali --help
Usage:
nali [flags]
nali [command]

Available Commands:
cdn Query cdn service provider
help Help about any command
parse Query IP information
update update chunzhen ip database

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

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

使用

第一次使用时会需要点时间,因为要下载纯真和 CDN 相关数据库。

1
2
3
4
5
6
7
$ nali                                                         
2020/08/20 17:37:14 文件不存在,尝试从网络获取最新纯真 IP 库
2020/08/20 17:37:32 已将最新的 纯真IP库 保存到本地: /Users/Mike/.nali/qqwry.dat
2020/08/20 17:37:32 文件不存在,尝试从网络获取最新ZX IPv6数据库
2020/08/20 17:37:33 已将最新的 ZX IPv6数据库 保存到本地: /Users/Mike/.nali/ipv6wry.db
2020/08/20 17:37:33 文件不存在,尝试从网络获取最新CDN数据库
2020/08/20 17:37:34 已将最新的 CDN数据库 保存到本地: /Users/Mike/.nali/cdn.json
  1. 查询一个 IP 的地理信息
1
2
3
4
5
6
$ nali 1.2.3.4
1.2.3.4 [澳大利亚 APNIC Debogon-prefix网络]

# 或者使用管道
$ echo IP 6.6.6.6 | nali
IP 6.6.6.6 [美国 亚利桑那州华楚卡堡市美国国防部网络中心]
  1. 同时查询多个IP的地理信息
1
2
3
4
$ 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 [越南 越南邮电集团公司]
  1. 交互式查询

使用 exitquit 退出查询。

1
2
3
4
5
6
7
8
$ 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
  1. 与 dig 命令配合使用

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

1
2
3
4
$ dig nali.lgf.im +short | nali
104.28.2.115 [美国 CloudFlare公司CDN节点]
104.28.3.115 [美国 CloudFlare公司CDN节点]
172.67.135.48 [美国 CloudFlare节点]
  1. 与 nslookup 命令配合使用

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

1
2
3
4
5
6
7
8
9
10
11
$ nslookup nali.lgf.im 8.8.8.8 | nali
Server: 8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]
Address: 8.8.8.8 [美国 加利福尼亚州圣克拉拉县山景市谷歌公司DNS服务器]#53

Non-authoritative answer:
Name: nali.lgf.im
Address: 104.28.3.115 [美国 CloudFlare公司CDN节点]
Name: nali.lgf.im
Address: 104.28.2.115 [美国 CloudFlare公司CDN节点]
Name: nali.lgf.im
Address: 172.67.135.48 [美国 CloudFlare节点]
  1. 与任意程序配合使用

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

1
$ bash abc.sh | nali

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

  1. 支持 IPv6

IPv4 用法完全相同。

1
2
3
4
5
6
7
8
9
$ 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. 服务器网段]
  1. 查询 CDN 服务提供商

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

  • 只查询 CDN 服务提供商
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ nslookup www.gov.cn | nali cdn
Server: 127.0.0.53
Address: 127.0.0.53#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: 185.232.56.148
Name: zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 185.232.56.147
Name: zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 2001:428:6402:21b::6
Name: zgovweb.v.bsgslb.cn [白山云 CDN]
Address: 2001:428:6402:21b::5
  • 查询所有信息
1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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)]
  • 单独使用

需要提前查询到 CNAME 域名

1
$ nali cdn cdn.somecdncname.com

一些使用技巧

  1. 更新纯真数据库
1
2
3
$ nali update
2020/07/17 12:53:46 正在下载最新纯真 IP 库...
2020/07/17 12:54:05 已将最新的纯真 IP 库保存到本地 /root/.nali/qqwry.dat
  1. 使用自定义 IP 库

使用自定义 IP 库前,你需要设置环境变量:NALI_DB。目前支持的变量内容:

1
2
Geoip2 ['geoip', 'geoip2', 'geo']
Chunzhen ['chunzhen', 'qqip', 'qqwry']

使用三方 IP 库,需要手动提前下载相应的 IP 数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Windows 平台
## 使用geoip数据库
set NALI_DB=geoip

## 使用ipip数据库
set NALI_DB=ipip

# Linux平台

## 使用geoip数据库
export NALI_DB=geoip

## 使用ipip数据库
export NALI_DB=ipip

参考文档

  1. https://www.google.com
  2. https://blog.skk.moe/post/nali-cli/
  3. https://juejin.im/post/6854573212865560584