代码之家  ›  专栏  ›  技术社区  ›  Malkocoglu

DNS应答返回没有IP地址的NS记录,这正常吗?

  •  1
  • Malkocoglu  · 技术社区  · 16 年前

    在我的应用程序中,我必须不时发送通知电子邮件。为了发送邮件(通过SMTP),我必须获得该特定域的MX服务器(电子邮件地址的域部分)。这不是Unix应用程序,而是嵌入式应用程序。

    1-向当前DNS发送包含域的DNS查询(MX类型)

    2-如果响应包含MX应答,则从该函数返回success

    3-读取第一个NS记录并将其IP地址复制到当前DNS,转到1

    这可能会循环几次,这是意料之中的,但我不希望响应包含名为ns1.blahblah.com的服务器的NS记录,但不包含它们的IP地址。在这种情况下,我必须发送另一个查询来查找此NS的IP。我只在1个电子邮件地址(1个域)中看到了这一点,其他地址没有任何问题。

    这是正常的行为吗?嗯,这是对DNS记录的错误配置。有什么想法吗?

    先谢谢你。。。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Gonzalo    16 年前

    您必须先查询MX,然后再查询邮件服务器的IP

        2
  •  3
  •   Tommy McGuire    16 年前

    RFC 1035 说,

    NS记录导致通常的附加节处理定位 它们为获取粘合信息而驻留的区域。

    …附加记录部分包含RRs 问题。

    …在编写响应时,将插入到 附加部分,但答案或权限中有重复的RRs 章节,可从附加章节中省略。

    一些 部分,可能在某个地方配置错误。但是,正如老掉牙的道奇所说,“在你接受的东西上要自由”;如果你要提出疑问,你需要处理这样的情况。DNS充斥着这类问题。

    较长的答案需要一个问题:如何获得开始MX查找的原始DNS服务器?

    您正在执行的是非递归查询:如果您查询的第一台服务器不知道答案,它会将您指向DNS层次结构中与您要查找的域“更近”的另一台服务器,并且您必须进行后续查询以查找MX记录。如果您是在某个根服务器上启动查询,我认为您必须像现在这样遵循NS指针。

    但是,如果在您的应用程序中配置了启动DNS服务器(即手动配置项或通过DHCP),则您应该能够使用Recursion Desired标志发出递归请求,这将在配置的DNS服务器上取消重复查找。在这种情况下,您只需在第一个响应中获得MX记录值。另一方面,递归查询是可选的,您的本地DNS服务器可能不支持它们(这很奇怪,因为历史上许多客户端库都依赖于递归查找)。

    无论如何,我个人要感谢您查找MX记录。我不得不处理那些想发送邮件但无法进行DNS查找的系统,他们使用的各种奇怪和令人不快的黑客数量和种类给我留下了情感上的伤痕。

        3
  •  0
  •   Tim Post Samir J M Araujo    16 年前

    可能是该域根本没有MX记录。我完全删除了我未使用/存放的域的MX条目,这为我的邮件服务器节省了很多麻烦(垃圾邮件)。

    真的没有必要超过步骤2。如果系统(或ISP)解析程序没有返回MX条目,这是因为它已经执行了额外的步骤,但没有找到任何内容。或者,可能是系统主机解析程序太慢(即来自ISP)。

    另外,在应用程序中配置解析器是否可行,这样用户就可以绕过一个乱七八糟的问题?