python实现DNS正向查询、反向查询的例子


Posted in Python onApril 25, 2014

1.DNS查询过程:

以查询 www.baidu.com为例

(1)电脑向本地域名服务器发送解析www.baidu.com的请求
(2)本地域名服务器收到请求后,先查询本地的缓存,如果找到直接返回查询结果,如果没有该记录,本地域名服务器把www.baidu.com的请求发送给根域名服务器
(3)根域名服务器收到请求后,把.com域的服务器IP地址返回给本地域名服务器
(4)本地域名服务器连接.com服务器,向其请求解析域名www.baidu.com, .com服务器把baidu.com服务器的IP地址返回给本地DNS服务器
(5)本地DNS服务器向baidu.com服务器发送解析域名请求,baidu.com服务器将www.baidu.com的IP地址返回给本地DNS服务器
(6)本地DNS服务器把www.baidu.com的IP地址返回给电脑。

2.域名和IP地址的对应关系:

一个域名可以对应多个IP地址,但在同一时刻,一个域名只能有一个IP地址,一个IP地址可以对应多个域名。

3.查询DNS

Python可以实现DNS的正向和反向查询。下面是正向查询的代码:

#!/usr/bin/env python
import sys,socket
result=socket.getaddrinfo(sys,argv[1],None)
print result[0][4]

因为一个域名可以有多个IP地址,所以上述程序两次运行的结果可能会不同。

运行程序 :

./test.py www.baidu.com

结果为 :
(‘111.13.100.91',80)

反向查询:

#!/usr/bin/env python
import sys,socket
try:
 result=socket.gethostbyaddr(sys.argv[1])
 print "hostname is "+result[0]
except socket.herror,e:
 print "can't look up"

运行程序

./test2  127.0.0.1

结果为:
hostname is localhost
Python 相关文章推荐
tornado框架blog模块分析与使用
Nov 21 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python实现日志按天分割
Jul 22 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
Python Django项目和应用的创建详解
Nov 27 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 Python
python网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 #Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 #Python
python中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 #Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 #Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 #Python
Python 时间操作例子和时间格式化参数小结
Apr 24 #Python
python抓取网页图片并放到指定文件夹
Apr 24 #Python
You might like
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
Python中的Descriptor描述符学习教程
2016/06/02 Python
python异常和文件处理机制详解
2016/07/19 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
自我评价的写作规则
2014/01/06 职场文书
将相和教学反思
2014/02/04 职场文书
终止劳动合同协议书
2014/04/14 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
2015年度企业工作总结
2015/05/21 职场文书
孔繁森观后感
2015/06/10 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
ICOM R71E和R72E图文对比解说
2022/04/07 无线电