几年前我用Go写过一个命令行程序,叫IP resolver,这个程序可以同时向多个DNS服务器发出请求,查询一个域名的IP地址,程序会把不同的DNS服务器查询的结果返回,并汇总显示到命令行界面上。

下面是使用IP resolver查询mengqi.info域名的截图,程序对5个DNS(具体的DNS可以自行配置)发出了查询请求,并返回了结果。返回结果用一条横线分为了上下两个部分,横线上面的是DNS服务器的名称和其IP地址,横线下面的是这个DNS查询到的IP。从图上可以看出,这5个DNS共查询到了5个不同的IP地址,其中3个国内的DNS(前3个DNS)都只能查询到一个IP,2个国外的DNS可以查询到4个IP:

IP resolver

下面对IP resolver的使用方式做一些介绍。

下载

我为Windows、Linux、Mac OS X编译了对应版本的可执行文件,可通过此地址下载。如果你使用的是其他操作系统,可以下载IP Resolver的源码自行编译。

下载完成后,可以将程序进行重命名,建议Windows下,设置为ipre.exe,Linux/Mac下,设置为ipre。然后请将程序放到系统的PATH目录中,在Windows中,可以是C:\Windows\system32等目录,在Linux/Mac下可以是/bin, /usr/bin, ~/bin等目录。

配置文件

要使用IP resolver,首先需要提供一个配置文件,配置文件的格式为json,内容包含了DNS名称和其IP地址。当使用IP resolver进行查询时,程序向配置文件中的DNS服务器发出请求,查询域名的IP地址。

可以使用-s参数查询配置文件的样例:

IP resolver配置文件

默认情况下,程序会依次从以下几个位置检测和读取配置文件:

Linux/Unix下:

  1. ~/.config/ipre.conf
  2. ~/.ipre
  3. /etc/ipre.conf

Windows下:

  1. %HOMEDRIVE%/%HOMEPATH%/.config/ipre.conf
  2. %HOMEDRIVE%/%HOMEPATH%/.ipre

(注:%HOMEDRIVE%一般为c:%HOMEPATH%一般为\Users\用户名

另外,也可以使用-l参数指定配置文件的路径,例如:

ipre -l /path/to/ipre.conf

输出结果格式

默认情况下,输出结果会显示每个DNS的名称、DNS的IP和每个DNS查询到的IP(见本文中第一副图)。

如果你需要使用其他程序读取IP resolver输出的结果,可以使用-f参数,将结果设置为json格式,例如:

ipre -f json mengqi.info

输出结果如下:

将输出结果设置为json

如果只需要在结果中显示IP地址,可以使用-f ip实现,例如:

ipre -f ip mengqi.info

输出结果如下:

只显示IP地址

命令行参数

IP resolver的命令行参数如下:

-l, -load <file>            指定配置文件的路径
-f, -format <std|json|ip>   设置输出结果格式:标准、json、只有ip
-s, -sample                 显示配置文件样例
-t, -tcp                    使用TCP协议进行DNS查询(不使用此参数时,默认使用UDP协议查询)
-c, -config                 显示当前的配置文件内容
-h, -help                   显示帮助
-v, -version                显示版本信息

如果忘记了怎么使用,可以使用-h参数查看帮助:

显示帮助

使用举例

使用默认的配置文件查询:

ipre www.example.com

加载名为config.json的配置文件,并将输出结果设置为json

ipre -l config.json -f json -tcp www.example.com

指定配置文件的路径并显示配置文件的内容:

ipre -l config.json -c

使用配置文件样例生成一个配置文件,然后进行查询:

ipre -s > ~/.ipre && ipre www.example.com