我正在运行网络爬虫,并从我的数据中心收到一些有关指向私有 IP(如 10.0.0.1)的连接的报告。我在爬虫代码中实现了环回/私有 IP 检查,我意识到许多域名解析为以下 IPv6 地址。
- 7777:772e:726f:7763:6174:6368:2e63:6f6d
- 7777:772e:726f:7763:726f:6674:2e6f:7267
我正在使用自己的绑定 DNS 缓存,并且当我尝试在其他计算机/网络上访问这些域时,我可以毫无问题地访问它们,并且它们的所有 DNS 设置看起来都正常。
如上所示,将这些域解析为私有/环回 IPv6 地址的原因是什么?我可以做什么来检查与此问题相关的任何其他事项?
是不是因为我的 BIND DNS 缓存?是不是因为我的数据中心的路由器配置错误?
提前非常感谢...
解决方案:@kasperd 帮我解决了这个问题,他发现这是因为我的代码实现错误。
答案1
您的问题中做出了一些错误的假设。
IPv6地址空间大部分都是保留的,包括6000::/3
你提到的两个地址所属的范围。
如果任何保留地址出现在 AAAA 记录中,则表明配置无效。这可能会导致连接问题,尽管正确实施的客户端将回退到使用该域的其他地址之一。
AAAA 记录中出现无效地址的第一个明显原因是,最初配置该 AAAA 记录的人犯了一个错误。如果您提到域名,我们可能会告诉您是否是这种情况。
错误配置缓存 DNS 服务器也可能导致此类无效 AAAA 记录。我认为 Bind 具有足够的灵活性来引入此类问题。
路由器配置错误本身并不足以产生这样的问题。但许多路由器都具有与路由无关的附加功能,因此从理论上讲,您的路由器可能具有一些功能,如果使用不当,则会产生此类无效记录。
如果仔细查看无效的 IPv6 地址,您会发现每个八位字节都在可打印 ASCII 字符 ( 20
- 7e
) 的范围内。这可能提示了无效地址的来源。
聊天调试总结。问题是由于爬虫代码中的错误导致的:
ip = ipaddress.ip_address(hostname)
该行将把任何恰好为 16 个字符长的主机名解释为 IPv6 地址。主机名上未执行任何 DNS 解析。