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. cannot mount volume over existing file, file exists /var/lib/docker/overlay2/.../merged/usr/share/zoneinfo/UTC 解决

    问题产生原因: linux系统docker-compose.yml文件 放到 mac本启动发现启动报错 cannot mount volume over existing file, file exi ...

  2. Spirng Boot2 系列教程(二十二)| 启动原理

    一个读者,也是我的好朋友投稿的一篇关于 SpringBoot 启动原理的文章,才大二就如此优秀,未来可期. 我一直想了解一下 SpirngBoot 的是如何启动的,我想就来写一篇关于 SpirngBo ...

  3. Spring 框架学习(1)--Spring、Spring MVC扫盲

    纸上得来终觉浅,绝知此事要躬行 文章大纲 什么是spring 传统Java web应用架构 更强的Java Web应用架构--MVC框架 Spring--粘合式框架 spring的内涵 spring核 ...

  4. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第六节:第一境尾声

    在第一境中,我们主要了解了爬虫的一些基本原理,说原理也行,说基础知识也罢,结果就是已经知道一个小爬虫是如何诞生的了~那么现在,请默默回想一下,在第一境中,您都掌握了哪些内容?哪些还比较模糊?如果还有什 ...

  5. urllib基本用法(了解)

    一.urllib.urlopen 1.urlopen from urllib import request r = request.urlopen('http://www.baidu.com/') # ...

  6. C#中TripleDES对应Java中的DESede即大家说的3DES,附C#及Java加解密结果一致的控制台程序例子

    直接上代码了. Java控制台代码: package Test; import java.security.Key; import javax.crypto.Cipher; import javax. ...

  7. 从0开发3D引擎(八):准备“搭建引擎雏形”

    大家好,现在开始本系列的第三部分,按照以下几个步骤来搭建引擎雏形: 1.分析引擎的需求 2.实现最小的3D程序 3.从中提炼引擎原型 4.一步一步地对引擎进行改进,使其具备良好的架构 5.实现与架构相 ...

  8. XSS Cheat Sheet

    Basic and advanced exploits for XSS proofs and attacks. Work in progress, bookmark it. Technique Vec ...

  9. 通过识别页面内容获得返回值判断后续执行(exists指令的用法)

    本案例主要用到airtest 的exists指令 从指令解释可以知道,当判断某图片不存在的时候,会返回false值 脚本思路即为如果返回值==false则执行A,!=fales则执行B 下图脚本思路, ...

  10. Android教程2020 - RecyclerView使用入门

    本文介绍RecyclerView的使用入门.这里给出一种比较常见的使用方式. Android教程2020 - 系列总览 本文链接 想必读者朋友对列表的表现形式已经不再陌生.手机上有联系人列表,文件列表 ...