通过libc libresolv.so使用cTypes查询DNS

pylresolv的Python项目详细描述


提供对res_queryresolver(3))和好友的访问 基本DNS查询(超过gethostbyname)。

现在,它只支持MX记录查找。

这是not功能齐全的dns库的替代品,如 dnspythonpycares,而是一个小包装器,用于提供 最小查找能力。此外,它还可以作为一个例子来说明 使用-lresolv例程。

警告

当心!

这个库使用(a)没有很好记录的c库调用 (b)在不同的libc版本和 操作系统。谨慎行事。唯一的事情就是 它的尺寸很小。

最常用的用法

frompylresolvimportns_parse,ns_type,res_queryanswer=res_query('gmail.com',rr_type=ns_type.ns_t_mx)ret=ns_parse(answer,handler=ns_type.handle_t_mx)print(ret)

将生成RR对象的列表:

[RR<ns_type.ns_t_mx: 15>((40, u'alt4.gmail-smtp-in.l.google.com')),
 RR<ns_type.ns_t_mx: 15>((30, u'alt3.gmail-smtp-in.l.google.com')),
 RR<ns_type.ns_t_mx: 15>((10, u'alt1.gmail-smtp-in.l.google.com')),
 RR<ns_type.ns_t_mx: 15>((20, u'alt2.gmail-smtp-in.l.google.com')),
 RR<ns_type.ns_t_mx: 15>((5, u'gmail-smtp-in.l.google.com'))]

来自main的示例:

frompprintimportpprintqueries=(('gmail.com',ns_type.ns_t_ns),('gmail.com',ns_type.ns_t_a),('gmail.com',ns_type.ns_t_mx),('gmail.com',ns_type.ns_t_txt),('www.gmail.com',ns_type.ns_t_cname),)forqhost,qtypeinqueries:print('Querying host {!r} type {!r}:'.format(qhost,qtype))answer=res_query(qhost,rr_type=qtype)ret=ns_parse(answer)# ret = ns_parse(answer, handler=ns_type.handle_t_mx)# ret = ns_parse(answer, handler=ns_type.handle_bin)pprint([rr.contentsforrrinret])print()

产生:

Querying host 'gmail.com' type <ns_type.ns_t_ns: 2>:
['ns2.google.com', 'ns4.google.com', 'ns3.google.com', 'ns1.google.com']

Querying host 'gmail.com' type <ns_type.ns_t_a: 1>:
[bytearray(b'\xac\xd9\x11e')]

Querying host 'gmail.com' type <ns_type.ns_t_mx: 15>:
[(40, 'alt4.gmail-smtp-in.l.google.com'),
 (30, 'alt3.gmail-smtp-in.l.google.com'),
 (10, 'alt1.gmail-smtp-in.l.google.com'),
 (20, 'alt2.gmail-smtp-in.l.google.com'),
 (5, 'gmail-smtp-in.l.google.com')]

Querying host 'gmail.com' type <ns_type.ns_t_txt: 16>:
['globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=',
 'v=spf1 redirect=_spf.google.com']

Querying host 'www.gmail.com' type <ns_type.ns_t_cname: 5>:
['mail.google.com']

2019-07-03:0.2

  • ns_type.handle_mx重命名为ns_type.handle_t_mx
  • 添加: -handle_bin -handle_compressed -handle_text -handle_t_cname -handle_t_ns` -handle_t_txt`
  • ns_parse现在将返回的值包装成RR对象,因此 之后可以检索类型。可以从它的 contents属性。
  • 您可以使用handle_bin来获取a或aaaa记录。
  • res_query现在在失败时引发lookuperror。

2019-03-17:0.1

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务