使用域名存储任意二进制数据

11 小时 46 分钟前
 iqoo

花两小时写了个小玩具~ 将任意数据编码成 0123456789abcdefghijklmnopqrstuvwxyz-_. 这 39 种字符,从而可使用泛域名作为数据载荷。

演示:

https://webtun.net

测试 1:

https://ieexilte62qr8gi_3y76.webtun.net

测试 2:

http://kdogjdmfpm9p7.6d5zsei2npvtpih.tk79f4585ks94nxxo9ajk27bna85p3z4w29wa43jrivwdner9cq7nddhedeipqm.zor5dvt35zb04is4sl361pcsefqbhujln3brpwangxm.5.a14v59vq8zp-s49_s7t7-a5jhy_3m2bj9zlgd8od.m0.j7avjurm6.p5wvkbfwlflo-4_l44zavnycho6p3y0vvu3056nm0140h1da.webtun.net

测试 3:

http://vhrxs88.aonmd_1j53i6tv6lb.s.rzkobvrsrhmcxh9s4oscdwl5pmv8jznshsgmy1japb045wxz2kh1zqwqyuwaab1.3nap.wfes65.utd--5s3.webtun.net

测试 4:

http://eqh9ah1obms5ofl-v0r92s8-469-z53dbz1w3goa2zgnjmsupxkrnfn1r.eu2.7am27y1bferkctlc964qi8g88stn8u5c04pcyc1lf4wcf9kpt511dwa748lkxhy.gmn3d6ctm5msuas7utal8_5h_we5y-oc_gq6fm6icwwjpo6haa481mjlacoy3_.k19.webtun.net

由于域名每段长度必须大于 0 小于 64 ,因此边界位置不能使用点号,只能使用剩余的 38 个字符,因此总体编码率略低于 Base39 。

当然这个域名不够短,本来还可以再多存储几个字节的信息。不过短域名比较贵,暂时不折腾。

另外 HTTPS 也是个麻烦事,目前只给一级域名用上证书,其他的仍然是 HTTP 。

1015 次点击
所在节点    分享创造
19 条回复
a1210968738
11 小时 26 分钟前
多级泛域名解析有哪个服务商支持呢? cloudflare 有吗?
totoro625
11 小时 14 分钟前
@a1210968738 #1 *.域名 默认匹配 *.*.*.域名

PS:我以为是域名的 txt 解析存储数据了
sc13
11 小时 9 分钟前
这个主要是用来解决什么问题
gaojiren
11 小时 7 分钟前
打不开,过了一会打卡了,不知道是不是解析问题
hefish
11 小时 3 分钟前
应该像三体人那样,找把尺,然后在尺子上某个地方划一刀。。。就把地球所有科技都包含了。。。
然后三体人带着这把尺,回到三体星, 找个一个精密的仪器一测,发现划的地方是 整个尺的 0.12331958i209483098089349800293078485040348u509345021989834798237409872181437809802347089123741098237409182734091872340985943653....

然后把小数点后面的数字 decode 一下, 发现原来是维基百科的离线版。。。。超方便。。。
rekulas
10 小时 31 分钟前
你都用域名了,为啥不用 url param, 能支持的长度远大于域名

这种还是有一些使用场景的(虽然不多) 例如你有个 5kb 的 zip 需要存储, 可以保存到不支持附件的任何文本笔记里,打开链接即可下载
meeop
10 小时 28 分钟前
是不是我理解不对,感觉逻辑有点像太阳能手电筒

1 既然我都能拿到完整 url 了,那我直接解码就行了,何必还要打开 url 呢?
http://eqh9ah1obms5ofl-v0r92s8-469-z53dbz1w3goa2zgnjmsupxkrnfn1r.eu2.7am27y1bferkctlc964qi8g88stn8u5c04pcyc1lf4wcf9kpt511dwa748lkxhy.gmn3d6ctm5msuas7utal8_5h_we5y-oc_gq6fm6icwwjpo6haa481mjlacoy3_.k19.webtun.net

2 编码的 base39 比原文长,那直接用原文作为域名不是更直白高效?
比如 你好呀.webtun.net
iqoo
10 小时 11 分钟前
@meeop 你好呀 => xn--6qqs2j68e
iqoo
10 小时 9 分钟前
@rekulas 纯属好玩而已,根本纯不了 5kb ,最多只有 160 多字节。不支持附件的论坛用 URL 最简单~
kenvix
9 小时 47 分钟前
不是,这个需求你为啥不用 TXT 记录啊。我一般就直接用 TXT 记录实现软件版本更新检测
jim9606
9 小时 46 分钟前
都有域名和服务器了,托管小数据不是什么难事。
想一毛不拔的方法其实也有。
yanyao233
9 小时 38 分钟前
@kenvix 用 txt 记录版本号这思路挺好,学到了~
ssh
9 小时 19 分钟前
然后再搞个返回 data via ipv6
基于 dns 服务器的数据传输?
a1210968738
9 小时 15 分钟前
@totoro625 试了下确实可以,不过 https 证书是不是只可以匹配*.域名,无法申请匹配 *.*.*.域名之类的多级泛域名证书?
我看你的例子里也是多级域名就用 HTTP 了…
Greatshu
8 小时 41 分钟前
像是搞黑产的,再配合 DGA 域名……
Lightbright
8 小时 30 分钟前
@Greatshu 哈哈,赞同
iqoo
8 小时 14 分钟前
@kenvix 浏览器环境,拿不到 TXT 返回值。这个方案最早是用于 web 端口敲门的,js 无状态给服务器发少量信息。
neilp
8 小时 7 分钟前
为啥要用子域名, 为啥不直接写在 path 里面: https://webrun.net/ieexilte62qr8gi_3y76

正如楼上所说, 这是个手电筒的问题. 既然我已经知道数据了, 为什么还要去访问? 这个意义是什么.
cdlnls
4 小时 3 分钟前
其实是有使用场景的。

当你需要秘密传输数据的时候,就可以利用这个方法。

首先自己建一个 dns 服务器,把域名的 NS 记录指向自建的服务器。

然后要发送数据的时候,把数据解析用你的方法解析成域名,然后程序执行 DNS 查询。

在经过各种 DNS 服务器层层递归转发之后,最终这个解析会被你的自建 DNS 捕捉到,这样就可以根据域名拿到数据。

就可以在神不知鬼不觉的情况下,偷偷的将信息传递出去

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1074168

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX