繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM