使用Python解析主机名(通过DNS)

时间:2018-08-17 07:28:07

标签: python dns

我想用Python解析主机名。

但是,我不希望require "set" def foo(array, target = 10) available = array.to_set if match = array.find { |value| available.include?(target - value) } [match, target - match] end end foo([ 2,5,3,6,33,11,7,23,8,50,9 ], 10) => [2, 8] 被使用。

我的用例是检查DNS是否正常工作。

如何在Python中通过DNS强制进行名称解析?

2 个答案:

答案 0 :(得分:1)

最常用的Python DNS库似乎是dnspython。之后,请参见以下答案:https://stackoverflow.com/a/6947181/4822566

答案 1 :(得分:0)

一般来说,不需要特定的Python库即可解析主机名,因为这是libc的核心功能,因此也是任何编程语言的核心功能。这是在您的问题不特定于使用DNS时写的,在这种情况下,使用DNS库当然是唯一的解决方案。以下文字对于使用Python进行名称的通用解析仍然正确。

请参见https://docs.python.org/3.8/library/socket.html#socket.getaddrinfo上的socket.getaddrinfo,其描述为:

  

将host / port参数转换为5元组的序列,其中包含创建连接到该服务的套接字所需的所有参数。

  

该函数返回具有以下结构的5元组列表:

     

(家庭,类型,原型,佳能名称,sockaddr)

及其示例:

>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP) 
[(<AddressFamily.AF_INET6: 10>, <SocketType.SOCK_STREAM: 1>,  6, '',   
('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
(<AddressFamily.AF_INET: 2>, <SocketType.SOCK_STREAM: 1>,  6, '',
('93.184.216.34', 80))]

这可能会或可能不会使用DNS,因为libc将使用/etc/resolv.conf/etc/gai.conf/etc/nsswitch.conf/etc/hosts(通常在Unix系统上)来决定如何解析名称和位置。

至于

  

我的用例是检查DNS是否正常工作。

这太模糊了。您如何定义“ DNS正在工作”?您的意思是您的特定递归名称服务器答复?还是一些遥远的人?还是激活了DNSSEC?还是答案被欺骗?还是正确配置了某些特定域名并响应DNS查询?等