DNS 查询 - Domain Name Server
DNS 查询 - Domain Name Server
socket.getaddrinfo("www.baidu.com",None)
返回时一个 tuple list - (family, sockettype, protocol, canonname, socketaddr)
list 的没一个 tuple 元素是一个对应该 域名 host 的一个 web 服务器.
# [(<AddressFamily.AF_INET: 2>, 0, 0, '', ('61.135.169.125', 0)),
# (<AddressFamily.AF_INET: 2>, 0, 0, '', ('61.135.169.121', 0))] 反向查询 - IP 到 hostname
socket.gethostbyaddr(addr)
因为 DNS 信息的授权方式,返回查询得到数据可能是伪造的. 对于反向查询授权是基于IP地址的,
所以 DNS 的组织结构中没有办法阻止这种欺骗, 但是可以在程序中做一个反向查找数据的真实性验证:
首先方向查找根据 IP 得到一个 hostname , 然后使用反向查询得到的 hostname 做正向查询,
如果得到的 IP 跟之前方向查找所用的 IP 一致即反向查到到的 hostname 是真实的,否者就是伪造的.
由于正向 DNS 查询是的授权信息是基于域名服务器的, 所以正常查询的信息无法被伪造. 例子,
import sys, socket def getips(hostname):
res = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)
ips = [i[4][0] for i in res]
return ips def gethostname(ip):
return socket.gethostbyaddr(ip)[0] try:
IP = ""
hostname = gethostname(IP)
ips = getips(hostname)
except socket.herror as e:
print("Hostname not available for : %s" % IP)
print(e)
except socket.gaierror as e: # 询址错误
print("Hostname got : %s , however could not forward lookup the host with error : %S" % (hostname, str(e))) if IP not in ips:
print("Forward check failed about hostname : %s with IP: %s" % (hostname,IP))
else:
print("Validated hostname : %s " % hostname) 环境信息相关,
socket.gethostname()
本地的 hostname
socket.getfqdn(hostname)
通过 hostname 获得 full hostname 为了得到完整的域名和 IP 地址, 可以首先通过 gethostname() 方法获得 hostname,
接着 通过 getfqdn() 得到完成的信息 - full hostname. 最后使用 getaddrinfo()
来获得该域名对应的 IP 地址. 例子,
import sys, socket
def getips(hostname):
res = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)
ips = [i[4][0] for i in res]
return ips hostname = socket.gethostname()
print("hostname is : %s" % hostname)
fullhostname = socket.getfqdn(hostname)
print("full hostname is %s" % fullhostname)
try:
print("IP addrs :", ", ".join(getips(fullhostname)))
except socket.gaierror as e:
print("Could not get IP addr : ",e)
DNS 查询 - Domain Name Server的更多相关文章
- Java DNS查询内部实现
源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...
- Java内部DNS查询实现和参数设置
一.Java内部DNS查询 Java使用域名查询时,用的自己内部的域名实现机制,最后都是交给InetAddress去做DNS解析. 源码分析参考:http://blog.arganzheng.me/p ...
- 转载 DNS查询流程简介
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...
- 基于nodejs的DNS查询工具
开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...
- 【Python Network】分解DNS查询结果
针对DNS查询records,通过NS.PTR.CNAME和MX类别不同,返回数据将包含另外主机名.为了解最终的IP地址,通过将返回信息分解.继续使用PyDNS获取详细信息. #! /usr/bin/ ...
- DNS查询相关
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...
- python dns查询与DNS传输漏洞查询
前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...
- 【转】DNS查询过程
DNS查询过程 DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地 ...
- linux命令行学习-dig(DNS查询器)
在web开发中.总要熟悉的就是http协议.而发起一个http開始前最先要经历的一个过程就是DNS解析.简单说就是域名怎样终于解析到实际serverip的过程. 而在研究DNS解析和排除DNS解析类故 ...
随机推荐
- 在A卡下的 Matlab 运行C/C++混编的GPU程序
首先将你的.MEX文件和matlab脚本放在一个文件夹下开始运行 如果出错查看是那个.MEX文件出错 用depends这个软件查看他的依赖dll文件下载对应文件 放到当前文件夹下,运行成功.
- 洛谷 P2746 [USACO5.3]校园网Network of Schools schlnet Tarjan强连通分量
schlnet ★★★ 输入文件:schlnet.in 输出文件:schlnet.out 简单对比时间限制:1 s 内存限制:128 MB 描述 一些学校连入一个电脑网络.那些学校已订 ...
- Render函数详解
一.虚拟dom DOM是文档对象模型(Document Object Model)的简写,在浏览器中通过js来操作DOM的操作性能很差,于是虚拟Dom应运而生.虚拟Dom就是在js中模拟DOM对象树来 ...
- 演示共享布局 Demonstrating Shared Layouts 精通ASP-NET-MVC-5-弗瑞曼 Listing 5-10
- FileZilla 报错“the server's certificate is unknown”
FileZilla 是非常好用的一款FTP SFTP 管理工具. 但是filezilla会报错“the server's certificate is unknown” 并且会在window中看到以下 ...
- Linux程序守护脚本
不废话,直接上脚本,[]注释的下发语句需要按需替换: #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/us ...
- 《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册
<Java 开发手册>(以下简称<手册>)是每个 Java 工程师人手必备的一本参考指南.该手册包括 编程规约.异常日志.单元测试.安全规约.MySQL 数据库.工程结构.设计 ...
- c语言秋季作业3
本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 运用C语言编程解决一些简单的数学问题 这个作业在那个具体方面帮助我实现目标 学习if else ...
- cesium纽约3dtiles数据下载
cesium示例有纽约的3dtiles数据,下载官方有下载链接,但是下载后为乱码. 因此研究了下,写了个爬虫解码下载,使用办法,安装Python直接运行即可,代码如下: #coding=utf-8 f ...
- docker基础及命令
1.启动docker sudo systemctl start docker sudo systemctl restart docker sudo systemctl stop docker sudo ...