cf-doh:从前端 javascript 查找 DNS 记录

cf-doh:从前端 javascript 查找 dns 记录

最近在archival工作时,我发现自己需要检查域的dns记录。

背景

archival pro 允许用户在存档站点上指向自定义域。为了为这些网站启用 https,我们在颁发 ssl 之前使用基于 txt 记录的域验证器来验证所有权。为了使这个过程更简单,我需要查询记录以检查 cname 和 txt 记录是否配置正确,如果不正确,则显示一些有用的消息。

node.js 或类似 c 的环境中,这非常简单,因为每个操作系统都有本地 dns 缓存和查找工具。但是,我在 cloudflare worker 中运行它,它实际上是 v8 隔离,因此无法访问操作系统的 dns 系统。事实上,即使打开了nodejs_compat,来自node的stdlib的dns库也只会返回一个空对象。

https 上的 dns

经过一些研究,我意识到现代 dns-over-https 非常适合解决这个问题,并且在我的狭隘案例之外也有用途。然而,对于这个用例,我不喜欢 npm 上的任何库 – 我想要的是更类似于 node 的 dns 库的东西,它抽象了查找服务器。

立即学习“Java免费学习笔记(深入)”;

cloudflare 提供了 dns-over-https 解决方案,您可以在此处阅读:https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/

此 api 的主要缺点是它对普通用户来说有点不透明 – 状态代码以映射到规范的数字形式返回,响应格式采用问答格式,并包含细粒度数据,虽然很有用,但对于大多数休闲使用来说有点过分了。

一个简单的包

为了让我自己和其他人更容易做到这一点,我发布了 cf-doh。

这是一个简单的库,可以让从浏览器、cloudflare 工作人员或 javascript 运行的任何其他地方查询记录变得超级简单。它取决于本机获取实现,并且如果您还没有,则允许设置一个,因此如果您愿意,您甚至可以在带有 polyfilled whatwg 获取实现的节点中运行 – 但是如果您在节点中,您也可以有 node:dns 这可能就是你想要的。

除了包装 fetch 调用之外,该库还提供整个规范的完整类型,处理带引号的字符串响应,并将 http 错误和状态响应转换为异常。

使用很简单:

import { querydns } from "cf-doh";const records = await querydns("_verification.jesseditson.com", "txt");records.foreach((r) => console.log(r));

登录后复制

如果您更喜欢键入值,您甚至可以导入所有有效的记录类型并使用它们而不是字符串:

import { querydns, dnsrecordtype } from "cf-doh";const records = await querydns("_verification.jesseditson.com", dnsrecordtype.txt);

登录后复制

如果您想处理除 noerror 之外的状态,您可以使用较低级别的 api:

import { queryDNSRecords, DNSRecordType, DOHStatus, DOHStatusMessage } from "cf-doh";const response = await queryDNSRecords("_verification.jesseditson.com", DNSRecordType.TXT);switch (response.status) {  case DOHStatus.NoError:    console.log("This record exists!");    break;  case DOHStatus.NXDomain:    console.log("Domain wasn't found");    break;  default:    console.log(DOHStatusMessage[response.status]);    break;}

登录后复制

要将其添加到您的项目中,只需运行 npm install –save cf-doh。如果您对源代码或完整的 api 界面感到好奇,请查看存储库:

https://github.com/jesseditson/cf-doh

以上就是cf-doh:从前端 javascript 查找 DNS 记录的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2666660.html

(0)
上一篇 2025年3月7日 12:08:49
下一篇 2025年3月7日 12:08:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 缓冲区:Nodejs

    node.js 中缓冲区的简单指南 node.js 中的 buffer 用于处理原始二进制数据,这在处理流、文件或网络数据时非常有用。 如何创建缓冲区 来自字符串: const buf = buffer.from(‘hello’); 登录后…

    2025年3月7日
    200
  • 如何建js文件

    如何构建一个 JavaScript 文件?打开文本编辑器,如记事本或 Visual Studio Code,创建新文件。保存文件,使用 “.js” 扩展名,如 myscript.js。输入 JavaScript 代码…

    2025年3月7日
    200
  • 如何判断js版本

    有几种方法可判断 JavaScript 版本:使用浏览器对象上的 navigator.appVersion 或 navigator.userAgent 属性。使用某些 JavaScript 库提供的特定方法(如 window.jsVersi…

    2025年3月7日
    200
  • vs如何调试js

    通过使用 F12 开发者工具、错误处理、日志记录、断点、调试器工具、版本控制系统和优化代码等方法,可以有效地调试 JavaScript。 调试 JavaScript 的方法 调试 JavaScript 对于修复错误和优化代码的性能至关重要。…

    2025年3月7日
    200
  • 如何让js不缓存

    为了防止在 JavaScript 开发中缓存 JS 文件,可以通过以下方法:设置 Cache-Control: no-cache 响应标头使用后缀查询字符串,每次更新文件时更改版本号使用版本控制系统并更新版本配置服务器始终返回 HTTP 响…

    2025年3月7日
    200
  • js如何多线程

    否,JavaScript 是一种单线程语言,但可以通过以下方法实现多线程行为:Web Workers:允许创建并运行另一个线程Promises 和 Generators:创建异步任务,在主线程完成时执行多线程 Node.js 模块:利用操作…

    2025年3月7日
    200
  • 如何安装node.js

    Node.js 安装步骤:访问官方网站下载安装程序。选择与操作系统兼容的版本。运行安装程序,按照提示操作。验证安装,输入 “node -v” 确认版本。可选安装 npm,输入 “npm install -…

    2025年3月7日
    200
  • js如何连接远程数据库数据库数据库

    使用 JavaScript 连接远程数据库需要五个步骤:使用 JDBC 驱动程序使用 JavaScript JDBC 封装库使用异步函数连接执行查询和更新关闭连接 JavaScript 连接远程数据库 如何连接远程数据库? 使用 JavaS…

    2025年3月7日
    200
  • 使用 Deno nd Fresh 创建博客

    Fresh 是基于 Deno 构建的最流行的 Web 框架。随着 Deno 2.0 即将发布,现在是了解它的好时机。我根据 Andy Jiang 的原始示例,更新了如何用它构建一个简单的博客引擎。 完整详细信息请参见 GitHub 存储库和…

    2025年3月7日
    200
  • Hexabot 设置和可视化编辑器教程:构建您的第一个 AI 聊天机器人

    聊天机器人爱好者大家好!在本教程中,我们将指导您完成设置和使用开源 AI 聊天机器人构建器 Hexabot 的过程。我们将首先克隆 GitHub 存储库、安装依赖项并为 Hexabot 配置环境变量。您还将学习如何使用 Docker 启动项…

    2025年3月7日
    200

发表回复

登录后才能评论