You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于DNSCrypt Proxy的sdns://URL解析及自定义的技术问询

解析sdns://格式URL到IP地址 & 创建自定义sdns://链接

刚好对DNSCrypt Proxy的sdns://格式比较熟悉,我来分两部分帮你解决这两个问题:

一、把sdns:// URL解析为IP地址

sdns://本质是URL安全的Base64编码字符串,里面封装了DNSCrypt服务器的IP、公钥、协议类型等元数据。有两种常用方法解析:

方法1:用DNSCrypt Proxy自带的工具

如果你已经安装了DNSCrypt Proxy,它通常会附带sdns-decode工具(不同平台的二进制包位置可能不同,比如Linux下在/usr/local/bin)。直接运行以下命令:

# 把你的sdns://链接去掉前缀后的Base64字符串传入
echo "AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk" | base64 -d | sdns-decode

执行后会输出清晰的结构化信息,比如服务器IP、公钥、域名、协议版本等,你能直接找到对应的IP地址。

方法2:手动解码(适合没有工具的场景)

如果没有sdns-decode,可以手动解码:

  1. 提取Base64部分:去掉sdns://前缀,得到纯Base64字符串
  2. 转换为标准Base64:因为是URL安全的,需要把字符串里的-替换成+,_替换成/,然后补=字符让字符串长度是4的倍数(比如长度除以4余1就补3个=,余2补2个,余3补1个)
  3. Base64解码:用任意Base64解码工具(比如Python的base64.b64decode())解码成二进制数据
  4. 提取IP:解码后的二进制数据开头会包含IP地址(IPv4是4字节,IPv6是16字节),你可以用十六进制编辑器或者简单脚本提取,比如用Python打印解码后的IPv4:
import base64

sdns_str = "AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk"
# 转换为标准Base64
standard_b64 = sdns_str.replace('-', '+').replace('_', '/')
# 补全=
padding = len(standard_b64) % 4
if padding != 0:
    standard_b64 += '=' * (4 - padding)
# 解码
data = base64.b64decode(standard_b64)
# 提取IPv4(跳过协议头后的4字节)
ipv4 = ".".join(str(b) for b in data[8:12])
print(ipv4)  # 输出1.0.0.8,和你例子里的Cloudflare服务器对应

二、创建自定义的sdns:// URL

要生成自己的sdns://链接,你需要先有一个支持DNSCrypt v2的服务器(自己搭建或者使用第三方支持自定义的服务器),然后准备以下信息:

  • 服务器的IPv4/IPv6地址
  • DNSCrypt服务器的公钥(可以从服务器的dnscrypt-proxy配置文件里的public-key字段获取)
  • 可选:服务器名称、DNS查询路径(默认是/dns-query)

方法1:用官方sdns-encode工具

这是最简单的方法,DNSCrypt Proxy包自带sdns-encode工具,运行类似以下命令:

# 示例:创建指向IPv4 1.2.3.4,公钥为指定值的sdns链接
sdns-encode --ipv4 1.2.3.4 --pubkey "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" --name "my-custom-dnscrypt" --path "/dns-query"

命令执行后会直接输出生成的sdns://开头的URL。

方法2:手动编码(适合自定义场景)

如果需要更灵活的控制,可以手动打包数据:

  1. 按照DNSCrypt的规范,把协议版本、IP地址、公钥、名称、路径等信息打包成二进制格式
  2. 对二进制数据做URL安全的Base64编码:把标准Base64里的+换成-,/换成_,去掉末尾的=
  3. 在编码后的字符串前加上sdns://前缀,就是最终的URL

内容的提问来源于stack exchange,提问作者user7258070

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:45