1. dig domain, 經過server能夠查到該域名被哪一個server給解析了php
2. dig @dns domain 不走/etc/resolve.conf,直接走指定的dnshtml
-----------------------------------------------------------------------------------------------------------------------------------------------linux
轉自:http://www.cnblogs.com/daxian2012/archive/2013/01/10/2854126.htmlshell
譯者序:
能夠這樣說,翻譯本篇文檔的過程就是我從新學習DNS的過程,dig命令能夠幫助咱們學習DNS的原理,配置,以及其查詢過程。之前使用dig僅僅是查詢一下A記錄或者MX記錄,如今發現其功能真的不是通常的強大。但願本文對英文不是太好的朋友在使用Linux和DNS時有些幫助。
本HOWTO的官方出處是http://www.madboa.com/geek/dig/。
因爲此文檔出現較早,本文中涉及到的一些例子可能和如今實際查詢過程當中查詢到的結果有些不一致,可是爲了保證譯文與做者的原文一致,我並無對這些內容作任何修改。另外因爲本人的英語和語文都不是那麼好,有些內容可能翻譯得不是很流暢或者詞不達意,但願高手予以指點或者經過Email告知。謝謝!
Victor Chen(kubryjsc@163.com)
6/22/2008 譯畢windows
Dig簡介:
Dig是一個在類Unix命令行模式下查詢DNS包括NS記錄,A記錄,MX記錄等相關信息的工具。因爲一直缺失Dig man page文檔,本文就權當一個dig使用嚮導吧。Dig的源碼是ISC BIND大包的一部分,可是大多編譯和安裝Bind的文檔都不把它包括在內,可是在linux系統下,它一般是某個包的一部分,在Gentoo下是bind-tools,在Redhat/Fedora下是 bind-utils,或者在Debian下是 dnsutils。
若是你要查找Bind的配置相關的信息,你參考個人文章:Bind for the mall LAN
(http://www.madboa.com/geek/soho-bind/)。
看懂默認輸出:
最簡單最多見的查詢是查詢一臺主機,可是默認狀況下,Dig的輸出信息很詳細。你可能不須要全部的輸出,
可是它確實值得知道。緩存
=======================================================================bash
$ dig www.isc.org
上面是我調用dig 的命令行。服務器
; <<>> DiG 9.2.3 <<>> www.isc.org ;; global options: printcmd Dig的部分輸出告訴咱們一些有關於它的版本信息(version 9.2.3)和全局的設置選項,若是+nocmd在命令行下是第一個參數的話,那麼這部分輸出能夠經過加+nocmd的方式查詢出來。 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43071 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 在這裏,Dig告訴咱們一些從DNS返回的技術信息,這段信息能夠用選項 +[no]comments來控制顯示,可是當心,禁止掉comments也可能關閉一些其它的選項。 ;; QUESTION SECTION: ;www.isc.org. IN A 在這個查詢段中,Dig顯示出咱們查詢的輸出,默認的查詢是查詢A記錄,你能夠顯示或者禁止掉這些用+[no]question選項 ;; ANSWER SECTION: www.isc.org. 600 IN A 204.152.184.88 最後,咱們獲得咱們查詢的結果。www.isc.org 的地址是204.152.184.8,我不知道爲何大家更喜歡過濾掉這些輸出,可是你能夠用+[no]answer保留這些選項。 ;; AUTHORITY SECTION: isc.org. 2351 IN NS ns-int.isc.org. isc.org. 2351 IN NS ns1.gnac.com. isc.org. 2351 IN NS ns-ext.isc.org. 這段權威說明告訴咱們哪一個DNS服務器給咱們提供權威的答案。在這個例子中,isc.org有3個Name Server,你能夠用+[no]authority選項保留這段輸出。 ;; ADDITIONAL SECTION: ns1.gnac.com. 171551 IN A 209.182.216.75 ns-int.isc.org. 2351 IN A 204.152.184.65 ns-int.isc.org. 2351 IN AAAA 2001:4f8:0:2::15 這些額外選項頗有表明性地包含了列出的權威DNS的IP地址,這段輸出能夠用+[no]additional選項保留。 ;; Query time: 2046 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Aug 27 08:22:26 2004 ;; MSG SIZE rcvd: 173
最後一段默認輸出包含了查詢的統計數據,能夠用+[no]stats保留。網絡
===========================================================================app
Dig可讓你有效地查詢DNS,最經常使用的查詢是A記錄,TXT(文本註釋),MX記錄,NS記錄,或者任意綜合查詢。
在如今這種IPv4和IPV6混用的狀況下,你也可使用AAAA的選項查詢主機的IPv6 AAAA記錄:
dig www.isc.org AAAA +short
若是你要查詢的域容許轉發,你也能夠查詢到相關的信息,好比DNS記錄在internet上的生存週期,可是,如今只有不多的DNS容許無限制轉發。
當咱們須要一個快速回答時,+short選項是你最好的朋友:
dig www.isc.org +short 204.152.184.88
精簡答案和只有一個答案是不同的,
得到沒有附加信息的詳細答案的方法是使用+noall選項,這樣就只保留你想要的輸出。
下面是隻有一個答案的精簡查詢,最後包含全部的配置信息,包括TTL數據,格式化的BIND配置信息。
$ dig fsf.org mx +short 20 mx20.gnu.org. 30 mx30.gnu.org. 10 mx10.gnu.org. $ dig +nocmd fsf.org mx +noall +answer fsf.org. 3583 IN MX 30 mx30.gnu.org. fsf.org. 3583 IN MX 10 mx10.gnu.org. fsf.org. 3583 IN MX 20 mx20.gnu.org.
經過它的man page,你能夠經過+multiline選項得到冗長的多行模式人性化註釋的DSN的SOA記錄,通常來講,
用+multiline選項得到的信息能夠顯示不少,就像BIND配置文件同樣。
$ dig +nocmd ogi.edu any +multiline +noall +answer ogi.edu. 14267 IN A 129.95.59.31 ogi.edu. 14267 IN MX 5 cse.ogi.edu. ogi.edu. 14267 IN MX 15 hermes.admin.ogi.edu. ogi.edu. 14267 IN SOA zeal.admin.ogi.edu. hostmaster.admin.ogi.edu. ( 200408230 ; serial 14400 ; refresh (4 hours) 900 ; retry (15 minutes) 3600000 ; expire (5 weeks 6 days 16 hours) 14400 ; minimum (4 hours) ) ogi.edu. 14267 IN NS zeal.admin.ogi.edu. ogi.edu. 14267 IN NS cse.ogi.edu. ogi.edu. 14267 IN NS fork.admin.ogi.edu.
能夠用 -x的選項查找IP地址的主機名。
$ dig -x 204.152.184.167 +short mx-1.isc.org.
在這個循環中,腳本很靈活地在給出的子網中映射出名字。
#!/bin/bash NET=18.7.22 for n in $(seq 1 254); do ADDR=${NET}.${n} echo -e "${ADDR}\t$(dig -x ${ADDR} +short)" done
查詢命令以下:
dig @ns1.google.com www.google.com
使用/etc/resolv.conf裏面的記錄查詢
主機將從/etc/resolv.conf文件裏面自動查詢DNS記錄
$ host www www.madboa.com has address 65.102.49.170
可是,默認狀況下,dig會產生出一些意想不到的輸出。若是你想查詢本地主機名而不是全域名時候,使用
+search 選項
dig www +search
若是你想查詢大量的主機名,你能夠把它們存放在一個文本文件中(一條記錄一行),使用帶-f參數的dig來依
次查詢。
# 查詢大量的主機名 dig -f /path/to/host-list.txt # 相同的,更明確的輸出 dig -f /path/to/host-list.txt +noall +answer
可是我要告訴你的是,dig 9.2.3以及之後的版本都不支持使用-f的選項反向查詢了。驗證DNS映射
不正確的DNS配置會給你帶來不少苦惱,你能夠經過以下兩種方式驗證你的DNS配置:
對於這兩條規則來講,還有一些例外狀況,好比CNAME應該首先解析到另一個主機名,並且只能指向一個IP,有時多個主機名指向了相同的IP地址,可是那個IP只能有一個PTR記錄。
綜上,這些有助於你檢查你的DNS映射是否像你想象的那樣工做。
你也能夠編寫一個測試腳本寫入你已知的主機名,以下所示,內容很簡單;它執行時當捕捉到一個CNAME時它就會中斷,若是多個主機名指向同一個IP地址它會報錯。咱們假設這個文件包含你的主機名叫作named-hosts。
#!/bin/bash # # test DNS forward- and reverse-mapping # # edit this variable to reflect local class C subnet(s) NETS="192.168.1 192.168.2" # Test name to address to name validity echo echo -e "\tname -> address -> name" echo '----------------------------------' while read H; do ADDR=$(dig $H +short) if test -n "$ADDR"; then HOST=$(dig -x $ADDR +short) if test "$H" = "$HOST"; then echo -e "ok\t$H -> $ADDR -> $HOST" elif test -n "$HOST"; then echo -e "fail\t$H -> $ADDR -> $HOST" else echo -e "fail\t$H -> $ADDR -> [unassigned]" fi else echo -e "fail\t$H -> [unassigned]" fi done < named-hosts # Test address to name to address validity echo echo -e "\taddress -> name -> address" echo '-------------------------------------' for NET in $NETS; do for n in $(seq 1 254); do A=${NET}.${n} HOST=$(dig -x $A +short) if test -n "$HOST"; then ADDR=$(dig $HOST +short) if test "$A" = "$ADDR"; then echo -e "ok\t$A -> $HOST -> $ADDR" elif test -n "$ADDR"; then echo -e "fail\t$A -> $HOST -> $ADDR" else echo -e "fail\t$A -> $HOST -> [unassigned]" fi fi done done
建立屬於你本身的named.root文件
任何鏈接到internet 的DNS服務器確定會有InterNIC的named.root文件的拷貝,文件列出全部internet的根DNS,若是你不怕麻煩的話,你能夠常常從InterNIC的ftp服務器上把它下載下來,或者,你可使用dig命令建立屬於你本身的時髦的named.root
# compare with ftp://ftp.internic.net/domain/named.root dig +nocmd . NS +noall +answer +additional
你的TTL值在這邊可能會很小,可是它是你找到最新的named.root文件!
你多是個traceroute的狂熱愛好者,常常喜歡查看如何從點A鏈接點B。那你可使用dig +trace選項作相似的事。
dig gentoo.de +trace
你能夠在dig輸出的頭部分看到根DNS,而後找到負責解析全部*.de的DNS,最後找到gentoo.de的域名IP。
做爲一個DNS管理員,我有時會(對DNS配置)作一些改變,而且想知道個人DNS解析是否推送的仍是舊數據,這個+nssearch選項能夠給你的公衆服務器提供清楚的統計信息。
# the unvarnished truth dig cse.ogi.edu +nssearch # the same, displaying only serial number and hostname dig cse.ogi.edu +nssearch | cut -d' ' -f4,11
我喜好google有不少緣由,其中一個緣由就是它在個人WEB日誌中提供了精確的連接,它會使我很容易地指出哪一種類型的查詢引導人們來訪問這個站點的頁面。出乎意料的是,我已經看到不少請求要求查詢TTL數值,我歷來沒想到TTL會成爲最受歡迎的東東,可是你天天都在學習新東西,因此,應你們的要求,這裏稍微介紹一下TTL。
若是你從本地DNS查詢互聯網地址,服務器指出從哪裏得到權威的答案並得到地址,一旦服務器獲知答案,它將這個答案保存在本地緩存中以避免你在稍後的時間內再次查詢一樣的地址,這樣它就會很快地從緩存中獲取你要的答案,比你再次從internet查詢要快不少。當域管理員配置DNS記錄時,他們能夠決定這個記錄能夠在緩存中保存多長時間,這就是TTL數值(一般用多少秒來表示)。一般地,遠端服務器通常對記錄的緩存只保存TTL數值長的時間。時間過時後,服務器會刷新它的本地緩存並從新查詢一個權威答案。當你用dig來查詢DNS服務器某條記錄時,服務器會告訴dig這條記錄能夠在緩存中保持的時間長短。舉個例子,像上面寫的那樣,gmail.com域的MX記錄的TTL值是300s,gmail.com域的管理員要求遠端服務器緩存它的MX記錄不能高於5分鐘,因此當你第一次查詢那個記錄(gmail.com的MX記錄)時,dig會告訴你一個300的TTL。
$ dig +nocmd gmail.com MX +noall +answer gmail.com. 300 IN MX 20 gsmtp57.google.com. gmail.com. 300 IN MX 10 gsmtp171.google.com.
若是你一段時間後再去查,你會發現TTL值減小爲280(中間隔了20s)。
$ dig +nocmd gmail.com MX +noall +answer gmail.com. 280 IN MX 10 gsmtp171.google.com. gmail.com. 280 IN MX 20 gsmtp57.google.com.
若是你的時間計算得足夠好,你會獲取這條記錄的最後生存時間。
$ dig +nocmd gmail.com MX +noall +answer gmail.com. 1 IN MX 10 gsmtp171.google.com. gmail.com. 1 IN MX 20 gsmtp57.google.com.
在那以後,你查詢的DNS服務器會「忘記」這個問題的答案,在你下次查詢這條記錄時,整個循環又將開始(本例子中是300s)。
在 unix 和 linux 下,建議你們使用 dig 命令來代替 nslookup。 dig 命令的功能比 nslookup 強大不少,不像 nslookkup 還得 set 來 set 去的,怪麻煩的。
********************************
你能夠到 www.isc.org 去下載一個 bind for windows 的版本安裝,安裝後就能夠在 windows 上使用 dig 命令了。^O^
ftp://ftp.isc.org/isc/bind/contrib/ntbind-9.3.0/BIND9.3.0.zip
*********************************
用途
DNS 查詢實用程序。
語法
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...] dig [-h] dig [global-queryopt...] [query...]
描述
dig(域信息搜索器)命令是一個用於詢問 DNS 域名服務器的靈活的工具。它執行 DNS 搜索,顯示從受請求的域名服務器返回的答覆。多數 DNS 管理員利用 dig 做爲 DNS 問題的故障診斷,由於它靈活性好、易用、輸出清晰。雖然一般狀況下 dig 使用命令行參數,但它也能夠按批處理模式從文件讀取搜索請求。不一樣於早期版本,dig 的 BIND9 實現容許從命令行發出多個查詢。除非被告知請求特定域名服務器,dig 將嘗試 /etc/resolv.conf 中列舉的全部服務器。當未指定任何命令行參數或選項時,dig 將對「.」(根)執行 NS 查詢。
標誌
參數
查詢選項
多條查詢
dig 的 BIND9 支持在命令行上指定多個查詢(支持 -f 批處理文件選項的附加功能)。每條查詢可使用本身的標誌位、選項和查詢選項。
在這種狀況下,在上面描述的命令行語法中,每條查詢自變量表明一個個別查詢。每一條由任意標準選項和標誌、待查詢名稱、可選查詢類型和類以及任何適用於該查詢的查詢選項。
也可使用對全部查詢均有效的查詢選項全局集合。全局查詢選項必須位於命令行上第一個名稱、類、類型、選項、標誌和查詢選項的元組以前。任何全局查詢選項(除了 +[no]cmd 選項)能夠被下面的查詢特別選項重設。例如:
dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr顯示 dig 如何從命令行出發進行三個查詢:一個針對 www.isc.org的任意查詢、一個 127.0.0.1 的逆向查詢,以及一個 isc.org 的 NS 記錄查詢。應用了 +qr 的全局查詢選項,以便 dig 顯示進行每條查詢的初始查詢。最後那個查詢有一個本地查詢選項 +noqr,表示 dig 在搜索 isc.org 的 NS 記錄時不顯示初始查詢。
示例
一個典型的 dig 調用相似:
dig @server name type其中: