首先我搜索了類似主題的網站,並閱讀了RFC 1535和FQDN wiki,但他們似乎沒有回答這個問題。主機名和完全限定域名(FQDN)之間的區別
讓我以www.youtube.com
爲例。 Python腳本我用:
import socket
for host in ["www.youtube.com"]:
print(host)
try:
hostname, aliases, addresses = socket.gethostbyname_ex(host)
fqdn = socket.getfqdn(host)
print(" Aliases : ", aliases)
print(" Hostname : ", hostname)
print(" FQDN : ", fqdn)
print("Addresses : ", addresses)
except socket.error as msg:
print("%15s : ERROR: %s" % (host, msg))
輸出:
Aliases : www.youtube.com
Hostname : youtube-ui.l.google.com
FQDN : sa-in-f93.1e100.net
Addresses : ['74.125.200.93', '74.125.200.190', '74.125.200.136', '74.125.200.91']
1)什麼是主機名和FQDN之間的關係?
據該網站http://kb.iu.edu/d/aiu(和許多其他網站):對於郵件服務器「mymail.somecollege.edu」,主機名是「mymail」,域名是「somecollege.edu」,並組合在一起,這些形式FQDN。但顯然這不是www.youtube.com
的情況。那麼,FQDN到底是什麼?所有這些名稱之間的關係是什麼?
2)當我反向查找IP 74.125.200.93時,主機名成爲sa-in-f93.1e100.net
。爲什麼反向查找會將FQDN作爲主機名?這些名稱可以互換嗎?
socket.gethostbyaddr('74.125.200.93')
Hostname : sa-in-f93.1e100.net
Aliases : []
Addresses : ['74.125.200.93']
3)是Aliases : www.youtube.com
也知道作爲CNAME?據http://support.dnsimple.com/articles/cname-record/答案似乎是肯定的:
舉例來說,如果你有,你保留所有的文件 在線,它可能會通過正常進行docs.example.com訪問的服務器。您 也可能想通過documents.example.com訪問它。 使之成爲可能的一種方法是添加一個CNAME記錄,將 documents.example.com指向docs.example.com。當有人訪問 documents.example.com時,他們將看到與 docs.example.com完全相同的內容。
4)爲什麼我不能用 「youtube-ui.l.google.com」 或 「sa-in-f93.1e100.net」 來訪問YouTube這是真的嗎?這是我訪問的主機名和FQDN直接:
Google
404. That’s an error.
The requested URL/was not found on this server. That’s all we know.
編輯#1
對不起緩慢回覆,我還在讀那些RFC文檔,和我有一些新的問題:
再次以www.youtube.com
爲例。
5)如何生成FQDN?每次我打電話給socket.getfqdn()
或host -t PTR
時,它是否查詢父域直到根(動態生成)?或者它只是一個PTR記錄?(似乎查詢FQDN依靠反向查找)如果它是一個PTR記錄,那我怎麼能確定它是一個FQDN,實際上它可以是FQDN,CNAME,別名,主機名或一些其他名稱如果區域DNS管理員想要設置它那樣。就像David和Esa Jokinen指出的那樣(RFC 1912,2.1),如果這些規則沒有被執行,那麼我怎麼能確定我得到了什麼?
所以我想也許查詢父域,直到根是最可靠的方式來獲得FQDN。但我該怎麼做?是否有可能得到FQDN而不使用PTR
(因爲它不是relialbe)
6)DNS查詢是否可能倒退?
正常情況下查詢IP是緩存/遞歸服務器請求根然後TLD然後子域直到它獲得IP。是否有可能做到這一點?得到IP然後以某種方式得到了子域然後TLD然後根然後我得到了FQDN?
7)是不是FQDN和IP映射到1?1?
這裏是我,當我運行
host 216.58.193.78
輸出:
爲什麼一個IP映射到兩個FQDN? 一臺機器兩個FQDN,它是如何工作的?
你正在從Python的Socket API反向工作,試圖學習DNS術語,並在過程中變得非常困惑。要做的是幫助解釋套接字API調用如何映射到DNS相關術語,這需要我們引用Python的文檔 - 使其成爲一個脫離主題的編程問題(即StackOverflow)此外,#4與Google的web服務器如何在該IP上運行有關地址處理由Web瀏覽器發送的不同'Hostname'頭部。一旦你將一個名字映射到IP地址,DNS的作用就結束了,反之則反向DNS。 –
@Alnitak你對在Stack上處理這個問題感興趣嗎?溢出?我無法解剖這一個沒有不得不參考Python文檔來解釋這些調用實際上在做什麼,所以我認爲這相當正確地屬於SO。 –
@AndrewB我剛剛更新了StackOverflow的帖子來匹配這篇文章,所以他們現在完全一樣。感謝任何地方的幫助 – oNion