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. EntityFramework Core表名原理解析,让我来,揭开你神秘的面纱

    前言 上一节我们针对最开始抛出的异常只是进行了浅尝辄止的解析,是不是有点意犹未尽的感觉,是的,我也有这种感觉,看到这里相信您和我会有一些疑惑,要是我们接下来通过注解.Fluent APi.DbSet分 ...

  2. 你还不会Git?那就不要写代码了(一)

    Git应用开发学习 如果你还不会使用Git,那就不要写代码了. 一旦你会使用了Git,就再也不想使用SVN了.永远也回不去了. Mac上使用Git,肯定离不开对Mac上的操作.就要使用常用的Linux ...

  3. Ubuntu18.04 一次性升级Python所有库

    pip是什么 pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 升级pip版本 默认Ubuntu自带的pip (pip 9.0.1)是基于Pytho ...

  4. NOIP复活了

    众所周知,NOIP以一种奇葩而又不可避免的方式(CSP)复活了.

  5. crawler 听课笔记 碎碎念 2 一些爬虫须知的基本常识和流程

    html的宗旨:      <标签 属性=”属性的值“></标签>        只是对于文本的一种解释划分吧 dom的宗旨:      就是一个大数组,处理方便,效率低 xm ...

  6. ORM基础5

    一.一对一 场景:字段多,且一部分字段使用率高 优点:提高效率 实质:唯一的外键 # Person表 class Person(models.Model): id = models.AutoField ...

  7. 6.JavaSE之数据类型扩展及面试题讲解

    整数:二进制0b 十进制 八进制0 十六进制0x 浮点数:银行业务,关于钱的,Java有个BigDecimal数学工具类,用这个计算.最好完全避免使用浮点数进行比较.因为float 是有限的离散的,它 ...

  8. 同一个环境同时使用python2和python3的方法

    1.首先安装好p2和p3,配置好环境变量.在CMD内执行python返回版本号,返回结果根据配置的环境变量而定,如果p2的环境变量配置在前面,则返回p2的版本号,反之则p3 2.然后把各版本目录下的p ...

  9. flutter 与 android 混合开发

    现有的混合开发方式,都是存flutter项目在android系统或者iOS上面跑. 但是,实际情况是,我们需要在一个成熟的native项目上面,跑几个flutter页面,逐步的进行flutter的融合 ...

  10. Dubbo如何支持本地调用?injvm方式解析

    Dubbo是一个远程调用的框架,对于一个服务提供者,暴露了一个接口供外部消费者调用,那么对于提供者自己是否可以调用这个接口,需要什么特殊处理吗? 这篇文章就分享下Dubbo关于本地调用的实现机制,以及 ...