DNS 查询之 10 个 dig 详细例子

本文索引:

  1. 简单的 dig 用法 (理解输出)
  2. 仅列出结果段
  3. 查询 MX 记录
  4. 查询 NS 记录
  5. 查看所有 DNS 记录
  6. 使用 +short 查看精简输出
  7. 使用 -x 进行 DNS 反向查询
  8. @dnsserver 指定解析域名的 NDS 服务器
  9. 批量 DNS 查询
  10. 使用 $HOME/.digrc 文件来设置默认项

*nix 上的 dig 命令是专门用来挖取域名信息的。本文详细列举了 10 个例子来解析 dig 命令。

1. 简单的 dig 用法 (理解输出)

当你给 dig 命令传一个域名时,默认情况下它会返回该域名的 A 记录 (查询到的站点的 ip 地址),如下例所示。

在本例中,结果段( ANSWER SECTION )中 显示了 redhat.com 的 A 记录。

$ dig redhat.com

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62863
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3

;; QUESTION SECTION:
;redhat.com.                    IN      A

;; ANSWER SECTION:
redhat.com.             37      IN      A       209.132.183.81

;; AUTHORITY SECTION:
redhat.com.             73      IN      NS      ns4.redhat.com.
redhat.com.             73      IN      NS      ns3.redhat.com.
redhat.com.             73      IN      NS      ns2.redhat.com.
redhat.com.             73      IN      NS      ns1.redhat.com.

;; ADDITIONAL SECTION:
ns1.redhat.com.         73      IN      A       209.132.186.218
ns2.redhat.com.         73      IN      A       209.132.183.2
ns3.redhat.com.         73      IN      A       209.132.176.100

;; Query time: 13 msec
;; SERVER: 209.144.50.138#53(209.144.50.138)
;; WHEN: Thu Jan 12 10:09:49 2012
;; MSG SIZE  rcvd: 164

dig 命令的输出由以下几个部分组成:

  • 头部(Header): 这里显示了 dig 命令的版本,以及使用的全局选项(+cmd),和一些附加的头信息。
  • 查询段(QUESTION SECTION):dig 命令查询的输入域名。例如我们运行 “dig redhat.com”,那么默认配置的 dig 命令就会去取 redhat.com 的 A 记录。而 “redhat.com. IN A” 就是在暗示我们取的是该域名的 A 记录。
  • 结果段(ANSWER SECTION):查询到的结果。“redhat.com. 37 IN A 209.132.183.81” 即 redhat.com 的 A 记录 ip 地址为 209.132.183.81。
  • 来源段(AUTHORITY SECTION):返回该结果段的授信 DNS 域名服务器。实际上这里就是 redhat.com 这个域名的 DNS 解析服务器。
  • 附加段(ADDITIONAL SECTION):这里列出了来源段中 DNS 服务器的地址。
  • 统计段(底部内容):这里列出一些 dig 命令的统计信息,包括查询花了多长时间等。

2. 仅列出结果段

大多数情况下,你只需要查看结果段(ANSWER SECTION)的内容。所以,我们可以关掉其他部分的显示内容。

  • +nocomments – 关闭注释行
  • +noauthority – 关闭来源段
  • +noadditional – 关闭附加段
  • +nostats – 关闭统计段
  • +noanswer – 关闭结果段 (Emmm, 我想你应该不会这样)

所以,下例的命令仅仅只显示了结果段的信息:

$ dig redhat.com +nocomments +noquestion +noauthority +noadditional +nostats

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
redhat.com.             9       IN      A       209.132.183.81

不想带那么多关闭项?你可以使用 +noall 来关闭所有的内容(包括结果段),然后再加上 +answer 来开启结果段的输出。

$ dig redhat.com +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com +noall +answer
;; global options: +cmd
redhat.com.             60      IN      A       209.132.183.81

3. 查询 MX 记录

$ dig redhat.com MX +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com MX +noall +answer
;; global options: +cmd
redhat.com.             513     IN      MX      5 mx1.redhat.com.
redhat.com.             513     IN      MX      10 mx2.redhat.com.

你也可以使用 -t 参数指定一个类型来查询 MX 记录。例如

$ dig -t MX redhat.com +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> -t MX redhat.com +noall +answer
;; global options: +cmd
redhat.com.             489     IN      MX      10 mx2.redhat.com.
redhat.com.             489     IN      MX      5 mx1.redhat.com.

4. 查询 NS 记录

$ dig redhat.com NS +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com NS +noall +answer
;; global options: +cmd
redhat.com.             558     IN      NS      ns2.redhat.com.
redhat.com.             558     IN      NS      ns1.redhat.com.
redhat.com.             558     IN      NS      ns3.redhat.com.
redhat.com.             558     IN      NS      ns4.redhat.com.

也可以用 -t 指定 NS 类型。

$ dig -t NS redhat.com +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> -t NS redhat.com +noall +answer
;; global options: +cmd
redhat.com.             543     IN      NS      ns4.redhat.com.
redhat.com.             543     IN      NS      ns1.redhat.com.
redhat.com.             543     IN      NS      ns3.redhat.com.
redhat.com.             543     IN      NS      ns2.redhat.com.

也可以用 -t 指定 NS 类型。

5. 查看所有 DNS 记录

$ dig redhat.com ANY +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com ANY +noall +answer
;; global options: +cmd
redhat.com.             430     IN      MX      5 mx1.redhat.com.
redhat.com.             430     IN      MX      10 mx2.redhat.com.
redhat.com.             521     IN      NS      ns3.redhat.com.
redhat.com.             521     IN      NS      ns1.redhat.com.
redhat.com.             521     IN      NS      ns4.redhat.com.
redhat.com.             521     IN      NS      ns2.redhat.com.

或使用 -t

$ dig -t ANY redhat.com  +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> -t ANY redhat.com +noall +answer
;; global options: +cmd
redhat.com.             367     IN      MX      10 mx2.redhat.com.
redhat.com.             367     IN      MX      5 mx1.redhat.com.
redhat.com.             458     IN      NS      ns4.redhat.com.
redhat.com.             458     IN      NS      ns1.redhat.com.
redhat.com.             458     IN      NS      ns2.redhat.com.
redhat.com.             458     IN      NS      ns3.redhat.com.

6. 使用 +short 查看精简输出

$ dig redhat.com +short
209.132.183.81

你也可以指定记录类型:

$ dig redhat.com ns +short
ns2.redhat.com.
ns3.redhat.com.
ns1.redhat.com.
ns4.redhat.com.

7. 使用 -x 进行 DNS 反向查询

$ dig -x 209.132.183.81

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> -x 209.132.183.81
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62435
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3

;; QUESTION SECTION:
;81.183.132.209.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
81.183.132.209.in-addr.arpa. 600 IN     PTR     www.redhat.com.

;; AUTHORITY SECTION:
183.132.209.in-addr.arpa. 248   IN      NS      ns2.redhat.com.
183.132.209.in-addr.arpa. 248   IN      NS      ns1.redhat.com.
183.132.209.in-addr.arpa. 248   IN      NS      ns3.redhat.com.
183.132.209.in-addr.arpa. 248   IN      NS      ns4.redhat.com.

;; ADDITIONAL SECTION:
ns1.redhat.com.         363     IN      A       209.132.186.218
ns2.redhat.com.         363     IN      A       209.132.183.2
ns3.redhat.com.         363     IN      A       209.132.176.100

;; Query time: 35 msec
;; SERVER: 209.144.50.138#53(209.144.50.138)
;; WHEN: Thu Jan 12 10:15:00 2012
;; MSG SIZE  rcvd: 193

简要版:

$ dig -x 209.132.183.81 +short
www.redhat.com.

8. @dnsserver 指定解析域名的 NDS 服务器

默认情况下 dig 会使用你本机上 /etc/resolv.conf 文件中定义的 DNS  服务器。

如果你想使用不同的 DNS 服务器来执行查询,可以通过 @dnsserver 来在命令行指定。

$ dig @ns1.redhat.com redhat.com

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> @ns1.redhat.com redhat.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20963
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;redhat.com.                    IN      A

;; ANSWER SECTION:
redhat.com.             60      IN      A       209.132.183.81

;; AUTHORITY SECTION:
redhat.com.             600     IN      NS      ns1.redhat.com.
redhat.com.             600     IN      NS      ns4.redhat.com.
redhat.com.             600     IN      NS      ns3.redhat.com.
redhat.com.             600     IN      NS      ns2.redhat.com.

;; ADDITIONAL SECTION:
ns1.redhat.com.         600     IN      A       209.132.186.218
ns2.redhat.com.         600     IN      A       209.132.183.2
ns3.redhat.com.         600     IN      A       209.132.176.100
ns4.redhat.com.         600     IN      A       209.132.188.218

;; Query time: 160 msec
;; SERVER: 209.132.186.218#53(209.132.186.218)
;; WHEN: Thu Jan 12 10:22:11 2012
;; MSG SIZE  rcvd: 180

9. 批量 DNS 查询

你可以通过创建一个文件存储多行域名来告诉 dig 批量查询多个域名。

首先我们可以创建一个简单的 names.txt 文件,里面包含两个准备批量查询的域名。

$ vi names.txt
redhat.com
centos.org

接下来,我们可以通过 -f 标志来告诉 dig 读取该文件进行批量查询:

$ dig -f names.txt MX +noall +answer
redhat.com.             600     IN      MX      10 mx2.redhat.com.
redhat.com.             600     IN      MX      5 mx1.redhat.com.
centos.org.             3600    IN      MX      10 mail.centos.org.

当然你也可以通过命令行来进行该操作:

$ dig redhat.com mx +noall +answer centos.org ns +noall +answer

; <<>> DiG 9.7.3-RedHat-9.7.3-2.el6 <<>> redhat.com mx +noall +answer centos.org ns +noall +answer
;; global options: +cmd
redhat.com.             332     IN      MX      10 mx2.redhat.com.
redhat.com.             332     IN      MX      5 mx1.redhat.com.
centos.org.             3778    IN      NS      ns3.centos.org.
centos.org.             3778    IN      NS      ns4.centos.org.
centos.org.             3778    IN      NS      ns1.centos.org.

上例中同时查询了 redhat.com 的 MX 记录以及 centos.org 的 NS 记录。

10. 使用 $HOME/.digrc 文件来设置默认项

你可能不想每次执行 dig 命令都带上一串选线,甚至 +short 也会觉得麻烦。这个时候你可以将这些选项配置到 .digrc 文件中,之后每次 dig 调用时,默认就会带上这些选项。配置如下选项:

$ cat $HOME/.digrc
+noall +answer

那么在进行 dig 操作时你可以省略这些不写了:

$ dig redhat.com
redhat.com.             60      IN      A       209.132.183.81

$ dig redhat.com MX
redhat.com.             52      IN      MX      5 mx1.redhat.com.
redhat.com.             52      IN      MX      10 mx2.redhat.com.

原文地址:https://www.thegeekstuff.com/2012/02/dig-command-examples

Advertisements

0% Connecting to archive.ubuntu.com

通过 apt-get 安装模块或者 update 的时候出现的日志。解决方案

sudo vim /etc/gai.conf

找到

# precedence     
#    Add another rule to the RFC 3484 precedence table.  See section 2.1
#    and 10.3 in RFC 3484.  The default is:
#
#precedence  ::1/128       50
#precedence  ::/0          40
#precedence  2002::/16     30
#precedence ::/96          20
#precedence ::ffff:0:0/96  10
#
#    For sites which prefer IPv4 connections change the last line to
#
# 此处解开下行注释
#precedence ::ffff:0:0/96  100

删除 #precedence ::ffff:0:0/96 100 之前的 # 号即可。

ubuntu vps 安装 docker 失败 Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

详情见兴致冲冲的安装:

wget -qO- https://get.docker.com/ | sh

然后

docker info

输出:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

通过 service docker restart 尝试没有变化, 查看 docker 的日志 tail -5f /var/log/upstart/docker.log 发现

time="2017-04-23T01:13:59.857654612-04:00" level=fatal msg="Your Linux kernel version 2.6.32-042stab116.2 is not supported for running docker. Please upgrade your kernel to 3.10.0 or newer."

所以问题是, 当前 linux 的 kernel 2.6 版本太低, 需要升级到 3.10 以上. 坑爹的 vps 自带模板[捂脸] 然后基于 OpenZV 6 的 vps 默认内核是 2.6, docker 需要基于 3.x 的内核, 只有 OpenZV 7 的 vps 才支持 (基于 3.x 内核).

qmlscene WARNING **: Unable to register app: Invalid application ID

编写 QML 的时候运行出现的警告:

$ /usr/bin/qmlscene hello.qml

unity::action::ActionManager::ActionManager(QObject*):
	Could not determine application identifier. HUD will not work properly.
	Provide your application identifier in $APP_ID environment variable.

** (qmlscene:12464): WARNING **: Unable to register app: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: Invalid application ID

这个警告是因为没有指定应用 id(application ID),在命令的前面指明 APP_ID 这个环境变量即可:

$ APP_ID=hello /usr/bin/qmlscene hello.qml

如果是使用 ubuntu sdk 这个 IDE 编写的时候 Ctrl + R 运行报错。
请找到 Ubuntu SDK (其实就是定制版的 Qt Creator) 左侧的 【Projects】接着请找到Desktop下,Build旁边的 【Run】,然后在出来的界面中找到下方的 Rune Environment 下点击【Details】点添加,跟加 windows 的环境变量一样,加上一个 APP_ID 然后 value 比如项目名 hello 。
然后再来 Ctrl+R 就不会出现这个错误了。

另外 .desktop 文件中的 Exec 参数修改是不影响 Ubuntu sdk 运行的,那个文件中指明的是打包之后告诉你的 ubuntu 桌面如何运行的一个配置。

ubuntu sdk 安装 (ubuntu touch 开发环境)

按照官方的说法,最好使用 ubuntu 14.04 来进行开发。安装的过程很简单:

sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
sudo apt-get update
sudo apt-get install ubuntu-sdk

其过程就是添加一个 SDK Release PPA 的地址,然后更新 apt-get,接着使用 apt-get 来直接安装 ubuntu sdk。
不过博主直接安装有报错:

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/trusty-updates/universe/binary-amd64/Packages  Hash Sum mismatch
W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/trusty-updates/main/binary-i386/Packages  Hash Sum mismatch
W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/trusty-updates/universe/binary-i386/Packages  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.

原因就如英文原文所说的 old ones used,有些库太老了,需要更新。这个时候你需要

sudo apt-get dist-upgrade

之后再 sudo apt-get install ubuntu-sdk 就可以了。等安装好了之后就可以在菜单里面搜索 ubuntu sdk 找到,或者直接在 terminal 上运行:

ubuntu-sdk

命令也可以运行该 IDE。

小Tip:Ctrl + N 新建项目,Ctrl + R 查看运行效果

源引官方文档:Installing the ubuntu sdk

ubuntu 12 升级到 14 错误记录 no suitable download server was found

博主是按官方文档走出的错,这里是官方文档出处:http://www.ubuntu.com/download/desktop/upgrade
所以最开始附上一种跟官方文档流程不一样的,各位也可以尝试一下:http://ubuntuserverguide.com/2014/06/how-to-upgrade-ubuntu-server-12-04-to-ubuntu-server-14-04-lts.html

按照官方文档,最初说是按下菜单键(win图标),然后输入 updater 选第一个就是了。会自动更新。
如果你找不到也可以用 terminal 运行 sudo update-manager -d。

不过等了一会之后报了很多错,错误内容是:no suitable download server was found 很多地址 404 之类的。要我检查网络。
后来研究了好一阵子,找到一个解决方案。ubuntu software center 上面选 Edit -> software source, 更改了更新的地址。
结果还是不行。然后通过自动【select best server】也弹出来说没有合适的,要我检查网络。

最后只能求助谷歌。找到如下方法:

sudo sed -i -e 's/archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo apt-get update && sudo apt-get dist-upgrade
sudo update-manager -d。

这个方法貌似人气很高,但是我试过了没用。log 上一堆 404 提示跟开始差别不大。

后来继续看,老外说是版本太久了所以默认设置的更新地址都没法起作用。
我了个去,Ubuntu 12.04 不是说维护 5 年吗,我才用了 2 年啊喂!
所以,附上最后找到的办法:
1.打开更新配置文件

gksudo gedit /etc/apt/sources.list

2.在出来的文件里面从上往下找到一个不是以 # 开头的那行. 假设你的编辑器是 Karmic Koala (Ubuntu 9.10) 看起来像是这样的:

deb <网站url> karmic main restricted

这里, 就是你的默认更新请求的地址,例如:http://gb.archive.ubuntu.com/ubuntu
或者向博主这样:

deb http://mirrors.163.com/ubuntu/ quantal main restricted

这是博主刚刚用 software center 改了以后的更新地址。这其中的 http://mirrors.163.com/ubuntu/ 就是我们要修改的部分。

3.按下 Ctrl + H 使用 http://old-releases.ubuntu.com/ubuntu 来替换你当前的 ,

如果你的ubuntu也是英文,看起来就像这样:
Search for: 例如 http://mirrors.163.com/ubuntu/;
Replace with: http://old-releases.ubuntu.com/ubuntu
然后按下 Replace All (替换全部)

4.再来一遍 (博主没有做直接跳过也成功了)

Search for: http://security.ubuntu.com/ubuntu (该 url 用于所有版本的 Ubuntu)
Replace with: http://old-releases.ubuntu.com/ubuntu
然后按下 Replace All

5.保存文件,然后打开 terminal 运行:

sudo apt-get update
sudo update-manager -d。

等了一会,好的,software updater 终于正常了!点击 install now,慢慢开始更新了!

更新完之后重启,我从 12.04 升级到了 12.10。并没有直接从 12 升级到 14。好吧,不过 updater 也终于正常了。于是再重复最开始的操作。

按照官方文档,最初说是按下菜单键(win图标),然后输入 updater 选第一个就是了。会自动更新。
如果你找不到也可以用 terminal 运行 sudo update-manager -d。

然后提示我已经没有 12 版本的更新了,提示升级到 13.10。自然点升级。接下来一路这个流程就升级上去了。

援引问答地址:how to install software or upgrade from old unsupported release

局域网想要DNS指向自己服务器的解决方案(主机名称的作用)

原本想使用路由添加 DNS 记录,来指向局域网测试的服务器。结果意外的发现了一种非常简单的办法。那就是通过修改当前主机的名称来实现局域网内的一个“模拟域名”。

博主这里用的是 win7 的操作系统,刷系统的时候用户名写的是 Lellansin,于是我的电脑主机名也就默认的变成了: Lellansin-PC

于是情况就来了,我们打开 cmd,输入:

ping Lellansin-PC

你会发现,这其实是 ping 的通的。这也意味着,在局域网测试的时候,原本通过 192.168.1.XX/test.php (当前计算机在局域网中的ip + 网站路径) 的访问方式可以通过使用 lellansin-pc/test.php 来代替。如果你把当前计算机的名称改为 pms 的话也可以通过 pms/test.php 来访问。

不过貌似 windows 上改名字的时候不能加点(有知道的望留言提醒),不然改成 http://www.test.com 也是极好的。

在 linux 上的话就会自由一些,通过:

sudo vim /etc/hostname

我就直接把局域网里测试用的服务器的主机名改成了 http://www.testgame.com ,尝试确实是可以用的。