问题描述
关于SO的问题很多,都与从URL提取IP地址有关,反之亦然。
>>> import socket
>>> print(socket.gethostbyname('google.com'))
这会查找域并返回 172.217.20.14 。我正在寻找对应部分,例如:
>>> print(socket.getnamebyhost('172.217.20.14'))
任何类似的操作都会使域以指定的IP返回 google.com 。
在python3中可以做到吗? 如果是,该如何实现?
更新
不幸的是,我的解决方法是错误的。除非PTR记录另有说明,否则有些IP具有一对多的关系,即名称服务器指向多个URL。我的问题改写为:
像ipinfo.io这样的IP到域数据提供者如何返回 单个IP的顶级域名?
据我了解,A或AAAA记录起着重要的作用,但是我从中得到的唯一信息是ns而不是域。我不知道如何从记录中提取gTLD或ccTLD。如果有人愿意就如何从任何IP解析gTLD或ccTLD共享答案,我欢迎任何建议。最好使用python,但是shell脚本也足够。
解决方法
socket.gethostbyaddr('172.217.20.14')将是正确的选择,但不一定。原因如下:
IP解析域如下:
域>根服务器>原始服务器>原始服务器的IP配置主机名。
现在要对其进行反向工程,我们必须考虑到:
-
可以有多个域共享相同的IP地址,就像共享主机一样。
-
假设该域具有专用IP,则nslookup或gethostbyaddr“应”返回域名,但前端可能有代理服务器,例如Cloudflare和Google正在使用的任何服务器。
因此,即使您手动尝试这样做(例如尝试找出实际IP地址),Google的服务器也无法运行,因为那将打开其中央服务器以进行各种攻击,最重要的是DDoS。