我想用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强制进行名称解析?
答案 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查询?等