当前位置:
首页 > Python基础教程 >
-
09python实现DNS查找域名对应的IP地址
# DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候, # 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行 # 搜索的,而只是输入域名,DNS协议会将域名解析成IP地址,然后记性寻找我们访问的网页。 from scapy.all import * # 传入两个参数,域名和域名服务器。 def dns_query(dns_name,dns_ip): # 首先构造一个DNS的包,IP的目的地址为第一个域名服务器地址,UDP字段让scapy自己填写,后边我们填写DNS字段的选项部分。 # 这里是收一个包,发送一个包。 dns_response = sr1(IP(dst = dns_ip)/UDP()/DNS(id=435,qr = 0,opcode=0,ra = 1,qd=DNSQR(qname=dns_name)),verbose=False) # print(dns_response.show()) # 下边进行解析包。一个DNS的应答包中可能包含很多的回答,因为我们访问的域名可能有特别多的别名。 layer = 1 while True: try: print(dns_response.getlayer(DNS).fields['an'][layer].fields['type']) # 判断是否是A记录,每一层就是一个记录,但是不一定是A,可能是CNAME! # 只有A记录里边有IP地址,CNAME里边是别名。 # 这里我们在A记录里边进行解析,如果不是A记录,那么就跳过。 if dns_response.getlayer(DNS).fields['an'][layer].fields['type'] == 1: # A记录 # 取出IP地址。 ip_data = dns_response.getlayer(DNS).fields['an'][layer].fields['rdata'] print('域名为:',dns_name,'的IP地址为:',ip_data) layer += 1 except Exception as e : # 如果错误的话,就代表着包结束了 print("错误",e) break if __name__ == "__main__": # 入参为要查询的域名,和第一个域名服务器的地址。 dns_name = 'www.baidu.com' dns_ip = '192.168.60.14' dns_query(dns_name,dns_ip)
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式