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的更多相关文章

  1. Java DNS查询内部实现

    源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...

  2. Java内部DNS查询实现和参数设置

    一.Java内部DNS查询 Java使用域名查询时,用的自己内部的域名实现机制,最后都是交给InetAddress去做DNS解析. 源码分析参考:http://blog.arganzheng.me/p ...

  3. 转载 DNS查询流程简介

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...

  4. 基于nodejs的DNS查询工具

    开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...

  5. 【Python Network】分解DNS查询结果

    针对DNS查询records,通过NS.PTR.CNAME和MX类别不同,返回数据将包含另外主机名.为了解最终的IP地址,通过将返回信息分解.继续使用PyDNS获取详细信息. #! /usr/bin/ ...

  6. DNS查询相关

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...

  7. python dns查询与DNS传输漏洞查询

    前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...

  8. 【转】DNS查询过程

    DNS查询过程 DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地 ...

  9. linux命令行学习-dig(DNS查询器)

    在web开发中.总要熟悉的就是http协议.而发起一个http開始前最先要经历的一个过程就是DNS解析.简单说就是域名怎样终于解析到实际serverip的过程. 而在研究DNS解析和排除DNS解析类故 ...

随机推荐

  1. 如何应用threejs实现立方体每个面用图片替换

    var geometry = new THREE.BoxGeometry(200, 200, 200);var materialsbg = []; for (var i = 0; i < geo ...

  2. python集合的运算

    &  交集  | 并集    - 差集  ^ 异或集 # 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果 # 创建两个集合 s = {1,2,3,4,5} s2 = {3,4,5, ...

  3. 深夜话题boot2docker还有那些隐藏MENU

    马克思的博士论文:自由意识的集中表达 --字体我设为5(18pt),你们懂的 总有人埋汰,终于我想起一个负负得正的话题 为什么放在深夜,因为希望看到的人越少越好,深夜是时差党的乐园 本篇作为之前几篇围 ...

  4. dfs序 + 树状数组

    You are given a tree, it’s root is p, and the node is numbered from 1 to n. Now define f(i) as the n ...

  5. pom文件继承与聚合

    1.简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Mave ...

  6. 【模板】2-SAT问题

    问题简述 有 \(n\) 个变量,每个变量可赋为 \(1\) 或 \(0\) 必须满足一些限制条件,如" \(a\) 为1 或 \(b\) 为0 " " \(a\) 为0 ...

  7. Maven: 互联网开发常用的jar以及版本pom.xl文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. java.io 包下的类有哪些 + 面试题

    java.io 包下的类有哪些 + 面试题 IO 介绍 IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等. IO 分类 传统的 IO ...

  9. 什么是 ThreadLocal?

    什么是 ThreadLocal? ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题.也就是说 ThreadLocal 会为每一个线程创建一个单独的变量副本. Thread ...

  10. 暑假第七周总结(安装MongoDB和Tomcat以及MongoDB进行编程实践)

    本周主要对MongoDB和Tomcat进行了安装,两项安装都遇到了一些问题.其中在对MongoDB安装过程中出现了什么没有秘钥安全证书的,最终找了一堆教程重复了好多遍之后安装成功,虽然在启动和关闭的时 ...