我正在尝试使用python套接字获取ip的主机名。但是,出于某种原因,当我尝试这样做时:
import socket
result = socket.gethostbyaddr('216.58.207.46') # google ip address
print(result[0])
我被打印出来:fra16s24-in-f14.1e100.net
我如何让它打印出google.com
更新:我试图解析IP地址的范围,然后将它们转换为主机名(如果可以转换的话)。显然,当我转换3.126.**.192时,我希望看到一个实际的主机名,而不是ec2-3-126-***-192.eu-central-1.compute.amazonaws.com
我该怎么做
虽然您期望的结果与您得到的结果不一致,但是您从Python的标准
socket.gethostbyaddr()
得到的结果是正确的。让我们先看看正在发生的事情,然后根据情况调整您的期望DNS实用程序(如
dig
)在处理此类问题时是您的朋友,因此我将在为您寻找答案时显示dig
的输出Reverse DNS lookup不一定是一对一的关系,正如其他人在上述评论中指出的那样。它依赖于一种约定,其中(以上面的IPv4地址为例)您为后缀为
PTR
的反向IP地址的.in-addr.arpa
记录发出DNS查询;在您的情况下,这是46.207.58.216.in-addr.arpa
:这里的DNS响应是
fra16s24-in-f14.1e100.net
的PTR记录,这与使用Python的socket.gethostbyaddr()
时看到的完全一致虽然从概念上讲,您可能会将此主机与
google.com
相关联,但就DNS而言,它可能不会与google.com
顶级域相关联编辑(基于您的更新):
在这里给出的示例中,您需要认识到
ec2-3-126-***-192.eu-central-1.compute.amazonaws.com
是一个实际的主机名。看一看我上面链接的关于反向DNS查找的文章,也看一看DNS如何工作的入门。值得重复的是,单个名称可能存在多个地址记录(负载平衡资源通常就是这种情况)以下是
stackoverflow.com
的一个例子:所有这些IP是否都应该有指向
stackoverflow.com
的PTR记录?不,不一定。。。让我们看一个例子:在这种情况下,当您在此IP地址上执行反向DNS查找时,没有PTR记录。那么,Python的
gethostbyaddr
如何处理这种情况呢在这种情况下,它引发了一个例外。如果DNS响应没有反向查找PTR记录,Python实际上无法提供任何进一步的有用信息
如果这个答案不够清楚,写回一条评论,我会修改这个答案,直到一切都清楚
相关问题 更多 >
编程相关推荐