基于Python原生asyncio模块对DNS正向和反向的解析
一、正向解析:域名解析IP地址
import asyncio
import socket domains = [
('www.baidu.com', 'https'),
('cn.bing.com', 'https'),
('www.2345.com', 'https'),
] async def main(loop, domains):
domain_ip = {}
for domain in domains:
info = await loop.getaddrinfo(
*domain,
proto=socket.IPPROTO_TCP,
)
for host in info:
if domain[0] in domain_ip:
domain_ip[domain[0]].append(host[4][0])
else:
domain_ip[domain[0]] = [host[4][0]]
return domain_ip # 事件环循
event_loop = asyncio.get_event_loop()
try:
get_future = asyncio.ensure_future(main(event_loop, domains)) # 相当于开启一个future
event_loop.run_until_complete(get_future)
print(get_future.result())
finally:
event_loop.close()
输出的结果
{'www.baidu.com': ['14.215.177.39', '14.215.177.38'],
'cn.bing.com': ['202.89.233.101', '202.89.233.100'],
'www.2345.com': ['121.201.101.42']}
二、反向解析:IP地址解析域名
import asyncio ip_ports = [
('66.33.211.242', 443),
] async def main(loop, ip_ports):
dns_dict = {}
for ip_port in ip_ports:
info = await loop.getnameinfo(ip_port)
if ip_port in dns_dict:
dns_dict[ip_port[0]].append(info)
else:
dns_dict[ip_port[0]] = info
return dns_dict event_loop = asyncio.get_event_loop()
try:
get_future = asyncio.ensure_future(main(event_loop, ip_ports)) # 相当于开启一个future
event_loop.run_until_complete(get_future)
print(get_future.result())
finally:
event_loop.close()
输出结果
{'66.33.211.242': ('apache2-zoo.george-washington.dreamhost.com', 'https')}
基于Python原生asyncio模块对DNS正向和反向的解析的更多相关文章
- Python之asyncio模块的使用
asyncio模块作用:构建协程并发应用的工具 python并发的三大内置模块,简单认识: .multiprocessing:多进程并发处理 .threading模块:多线程并发处理 .asyncio ...
- python:Asyncio模块处理“事件循环”中的异步进程和并发执行任务
python模块Asynico提供了管理事件.携程.任务和线程的功能已经编写并发代码的同步原语. 组成模块: 事件循,Asyncio 每个进程都有一个事件循环. 协程,子例程概念的泛化,可以暂停任务, ...
- 基于Python的datetime模块和time模块源码阅读分析
目录 1 前言 2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...
- Python:asyncio模块学习
python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...
- 基于Python的多线程模块Threading小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
- 基于python的extract_msg模块提取outlook邮箱保存的msg文件中的附件
笔者保存了一些outlook邮箱中保存的一些msg格式的邮件文件,现需要将其中的附件提取出来, 当然直接在outlook中就可以另存附件,但outlook默认是不支持批量提取邮件中的附件的 思考过几种 ...
- 基于python第三方requests 模块的HTTP请求类
使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...
- nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )
一.准备工作 1.安装nodejs 首先你需要安装nodeJs 那么nodejs官网:http://nodejs.cn/,下载相应版本,一步一步安装. 二.使用nodejs开发服务器后台应用 1.创建 ...
- LINUX中的DNS服务---DNS正向、反向和双向解析
一.DNS的正向解析 也就是域名解析为IP地址进行访问! 1)vim /etc/named.conf ----> 删除forwarders所在行 2)vim /etc/named.rf ...
随机推荐
- 阿里EMR原理
hadoop2.8.5: https://hadoop.apache.org/docs/r2.8.5/ 阿里文档: EMR里可以通过 Ranger组件来实现https://help.aliyun.co ...
- 利用微信web开发者工具调试企业微信页面
1.只有企业号的管理员才能调试. 2.勾选企业号的开发者工具(具体位置见下图,这个入口位置总是在变,一般来说,找到”微工作台“就能找到了) 3.下载web开发者工具 https://developer ...
- [LGP4859,...] 一类奇怪的容斥套DP
漫山遍野都是fake的光影. 题目 [LGP4859] 已经没有什么好害怕的了 给定两个长度为n的数组a和b,将a中元素与b中元素配对,求满足ai>bj的配对(i,j)个数减去满足ai<b ...
- SpringBoot 的启动banner生成网址
1.http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20 2.http://www. ...
- Codeforces 1196E. Connected Component on a Chessboard
传送门 注意到棋盘可以看成无限大的,那么只要考虑如何构造一个尽可能合法的情况 不妨假设需要的白色格子比黑色格子少 那么容易发现最好的情况之一就是白色排一排然后中间黑的先连起来,剩下黑色的再全部填白色周 ...
- Chrome开发者工具详解(一)之使用断点来调试代码上
1.断点调试是啥?难不难? 断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了.操作起来似乎很简单,其实很多人纠结的是,是在哪里打断 ...
- 关于记录log日志的几种方法
最近在记录日志的时候总结了几种方式: 1.使用log4j2记录 2.使用log4j记录 3.使用logback配置,记录前使用 private final Logger logger = Logge ...
- 104、验证Swarm数据持久性 (Swarm11)
参考https://www.cnblogs.com/CloudMan6/p/8016994.html 上一节我们成功将 nfs 的volume挂载到 Service上,本节验证 Failover时 ...
- wpf GridSplitter左右托不了或者拖拽异常
对于水平分割线,需要将verticalAlignment属性设置为Center 对于垂直分割线,需要将horizontalAlignment属性设置为center 切记切记,不然很苦逼....
- 关于redis的几件小事(二)redis线程模型
1.memcached和redis有什么区别? (1)Redis支持服务器端的数据操作 redis和memcached相比,redis拥有更多的 数据结构并且支持更丰富的数据操作 ,通常在memcac ...