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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python去掉字符串中空格的方法
Mar 11 Python
Python脚本实现下载合并SAE日志
Feb 10 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
TensorFlow saver指定变量的存取
Mar 10 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
pytorch 模型可视化的例子
Aug 17 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Python绘制组合图的示例
Sep 18 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
destoon常用的安全设置概述
2014/06/21 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
laravel学习教程之存取器
2016/07/30 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
NumPy 数组使用大全
2019/04/25 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
50岁生日感言
2014/01/23 职场文书
体育之星事迹材料
2014/05/11 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书