【问题标题】:Make a 512 UDP bytes DNS request发出 512 UDP 字节的 DNS 请求
【发布时间】:2012-08-23 01:37:55
【问题描述】:

我有一个问题。我在互联网上阅读了各种 RFC 和许多信息。 我读到通过 UDP 的 DNS 有 512 字节的限制。我想编写一个 python 程序,使用这个最大限制来创建一个生成良好的 DNS 请求。使用 UDP 而不是 TCP DNS 实现非常重要。 我尝试过使用公共库,但他们没有使用 RFC 所说的可以使用的 512 字节。

这也很重要,在一个请求中使用 ~ 512 字节发送这么多数据。

感谢您的帮助!

让我们实现它! ;)

【问题讨论】:

  • 你想做什么,为什么?

标签: python dns size


【解决方案1】:

您不应该对您的 DNS 请求完全强制 512 字节限制或 UDP 传输。 RFC 1035 关于传输(第 4.2 节)的确切说法是 datagrams are preferred for queries due to their lower overhead and better performance

也就是说,UDP 在适用时首选作为更轻量级的传输,这主要是请求大小的问题。经验法则是通过 UDP 传输长度小于 512 字节的请求,通过 TCP 传输长度超过 512 字节的请求。 (不过也有例外,例如第 4.2 节中提到的zone refresh activities。)

大多数流行的 Python DNS 库(如 dnspython)在使用高级查询时可以正确处理此问题。无需重新发明轮子。

【讨论】:

  • 我会改写:如果您正在编写的应用程序/脚本旨在达到生产质量并由最终用户掌握,那么您不应该完全强制 512 字节限制或 UDP 传输您的 DNS 请求。另一方面,你没有说你为什么想要这个(你的目标),也许你正在做一些边缘/破坏性的 QA 测试,在这种情况下你的问题是完全有效的。
【解决方案2】:

512 字节的限制是针对 dns message 的,而不是专门针对请求的,并且该限制仅对可以包含资源记录的 responses 有效。 p>

对于请求,您被限制为域名的 253 个字节。

您也许可以手动创建包含资源记录的查询,但它可能会被您的本地 dns 服务器删除。

【讨论】:

  • 不正确,查询中可能有几个问题(如何处理是一个难题,通常取决于服务器),并且您可以有附加部分(例如,由EDNS)。因此,完全有可能进行 512 字节的查询。
猜你喜欢
  • 2019-04-27
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多