[英]Resolve hostname with Python (via DNS)
我想用Python解析一个主机名。
但是,我不希望/etc/hosts
被使用。
我的用例是检查DNS是否正常工作。
如何在Python中通过DNS强制进行名称解析?
Python最常用的DNS库似乎是dnspython 。 之后,请参见以下答案: https : //stackoverflow.com/a/6947181/4822566
通常,您不需要特定的Python库来解析主机名,因为这是libc的核心功能,因此也是任何编程语言的核心功能。 这是在您的问题不特定于使用DNS时写的,在这种情况下,使用DNS库当然是唯一的解决方案。 以下文字对于使用Python进行名称的通用解析仍然正确。
请参阅https://docs.python.org/3.8/library/socket.html#socket.getaddrinfo上的socket.getaddrinfo,其描述为:
将主机/端口参数转换为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查询? 等等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.