python网络编程学习笔记(四):域名系统

时间:2021-05-22

一、什么是域名系统

DNS 计算机域名系统 (DNS) 是由解析器以及域名服务器组成的。当我们在上网的时候,通常输入的是网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用IP地址才能相互识别。再如,我们去一WEB服务器中请求一WEB页面,我们可以在浏览器中输入网址或者是相应的IP地址,例如我们要上新浪网,我们可以在IE的地址栏中输入网址,也可输入IP地址,但是这样子的IP地址我们记不住或说是很难记住,所以有了域名的说法,这样的域名会让我们容易的记住。

名称

含义

特性

域名服务器

保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

域名必须对应一个IP地址,而IP地址不一定只对应一个域名,采用类似目录树的等级结构。

域名解析服务器

域名与IP地址之间的转换工作

域名解析过程中的查询顺序为:本地缓存记录、区域记录、转发域名服务器、根域名服务器。



二、访问DNS的方法一:使用socket模块

1、DNS查询

以查询patible."""
if re.search('^/d+/./d+/./d+/./d+$', query):
octets = query.split('.')
octets.reverse()
return '.'.join(octets) + '.IN-ADDR.ARPA'
return None

def formatline(index, typename, descr, data):
retval = "%-2s %-5s" % (index, typename)
if isinstance(data,list):
return retval
else:

data = data.replace("/n", "/n ")
if descr != None and len(descr):
retval += " %-12s" % (descr + ":")
return retval + " " + data

DNS.DiscoverNameServers()
query1=raw_input('输入网站:')
queries = [(query1, DNS.Type.ANY)]
donequeries = []
descriptions = {'A': 'IP address',
'TXT': 'Data',
'PTR': 'Host name',
'CNAME': 'Alias for',
'NS': 'Name server'}

while len(queries):
(query, qtype) = queries.pop(0)
if query in donequeries:
# Don't look up the same thing twice
continue
donequeries.append(query)
print "-" * 77
print "Results for %s (lookup type %s)" %(query, DNS.Type.typestr(qtype))
print
rev = getreverse(query)
if rev:
print "IP address given; doing reverse lookup using", rev
query = rev

answers = nslookup(query, qtype, verbose = 0)
if not len(answers):
print "Not found."

count = 0
for answer in answers:
count += 1
if answer['typename'] == 'MX':
print formatline(count, answer['typename'],
'Mail server',
"%s, priority %d" % (answer['data'][1],
answer['data'][0]))
queries.append((answer['data'][1], DNS.Type.A))
elif answer['typename'] == 'SOA':
data = "/n" + "/n".join([str(x) for x in answer['data']])
##print data
print formatline(count, 'SOA', 'Start of authority', data)
elif answer['typename'] in descriptions:
##print answer['data']
print formatline(count, answer['typename'],
descriptions[answer['typename']], answer['data'])
else:
print formatline(count, answer['typename'], None,
str(answer['data']))
if answer['typename'] in ['CNAME', 'PTR']:
queries.append((answer['data'], DNS.Type.ANY))
if answer['typename'] == 'NS':
queries.append((answer['data'], DNS.Type.A))

本人在运行时,总是报错,没找到原因,望高手指点。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章