如何使用 Python 从反向 DNS 查找中获取正确的主机名?

How to get correct Hostname from reverse DNS lookup using Python?

我需要:

  1. 从客户端请求中获取主机 IP(完成
  2. 执行反向 DNS 查找(完成
  3. 然后将生成的主机名与客户端 SSL 证书的主题备用名称 (SAN) 上的主机名进行比较。 (问题

如果我使用 this tool 和域名对一家公司进行手动反向查找,我将获得 IP 地址:

这是我目前在 Python 中的内容:

import socket

request_ip = xxx.xxx.101.75 # Full IP address actually used

def reverse_dns(request_ip):
    if socket.inet_aton(request_ip):
        try:
            r_dns = socket.gethostbyaddr(request_ip)
        except:
            logging.error('######## Host IP reverse DNS lookup failed. ########')
    else:
        logging.error('######## Host IP is not a valid IP address. ########')
    return r_dns

reverse_dns = reverse_dns(request_ip)

问题:

('xxx-xxx-101-75.somedata.com', [], ['xxx.xxx.101.75'])

如果 DNS 会为名称 knowledge.com 提供一个 IP 地址,但不会为同一 IP 地址提供名称 knowledge.con,则无法从 DNS 获取它.

一个可能的原因是没有配置反向查找。 A记录(name-to-addr)的存在不需要相应的PTR记录(addr-to-name)。

就是这样。