首先我搜索了类似主题的网站,并阅读了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