Blogger是一个由Google提供的(收购的公司)免费博客平台,旨在使个人博客创建变得容易。用户可以使用Blogger创建自己的博客并将其托管在Google的服务器上。它不需要任何费用,并提供简单易用的编辑器和主题来帮助用户轻松地创建博客。Blogger具有强大的社交媒体集成功能,使用户可以方便地与读者分享博客内容,并在Google搜索引擎中得到更好的排名。尽管Blogger比WordPress缺少一些高级功能,但它仍然是许多用户创建博客的首选平台之一。
Blogger的个人子域名可以抢注,其格式是*.blogspot.com。其中*由数字和字母组成,长度任意,先到先得,但由于Blogger早在1999年就退出了,这么多年下来用户数量极多,短域名几乎被抢注干净了(域名越短越珍贵),而且每个Google账号可以注册多个域名,肯定有很多人独占多个短域名,所以如果现在还想手动寻找新的短域名,几乎是不可能的了,只能通过程序来寻找。首先,单字符和双字符域名不用考虑了,已经一干二净了,只能寻找三字符域名:字母+数字总共36种字符,三字域名的数量为:36*36*36=46656个【能找到1个新域名就谢天谢地了】。我们做个3层循环就可以遍历这么多个域名了,但问题是,怎么判断当前域名是新的呢?经过研究,新域名打开后的界面如下:
我们访问了一个无人使用的新域名idle-domain.blogspot.com,页面中显示标题“Blog not found”,然后提示:抱歉,您访问的博客不存在,但是域名idle-domain可以注册!然后下面有个注册按钮。其中<h1>Blog not found</h1>能够与别的域名页面区分开来,因此只要在每个主页的HTML中能搜索到这串文字,就能确定它是一个新域名!下面开始写代码,首选在浏览器console里执行脚本,因为这是最方便的,为了允许跨域访问,我们需要给chrome.exe增加--disable-web-security启动项,启动后在任意网页的console控制台中键入如下代码:
这里先是定义了一个完整的字母+数字的字符串_【qwertyuioplkjhgfdsazxcvbnm0123456789】,长度36,然后3级循环它,每级的变量是i、j、k,然后在循环体中:先拼接三字符的子域名【`https://${_[i] + _[j] + _[k]}.blogspot.com/`】,最后fetch它并获取到该主页的HTML字符串,再通过includes函数判断它是否包含<h1>Blog not found</h1>。如果包含,则成功找到新域名!然后用console.warn给予醒目的黄色,不包含的话,代表已有主的域名,则打印一个false就好,由于绝大多数都是false,最好将重复的打印折叠起来看,console设置如下:
关键的一点是,要使用异步顺序执行,前一个域名请求完毕再请求下一个域名,如果一下子全请求的话显然会崩溃,所以在for循环中使用await等待。整个循环体还要被try{}catch{}包围,防止网络异常中断了循环。在实践中(需要梯子),大概1s完成一次请求,全部46656次请求需要花费一整天时间,期间做好记录以便断点续传,最终还真让我找到了仅剩的几十个空闲的三字符域名(还都是数字开头)。最后总结一下,任何域名都没有永恒的占有,Blogger网站也有生命周期,届时服务器也会解散,Blogger也会择期清理一些“钉子户”来解放更多的域名,所以一般的平台方也不会太防范域名抢注,也没有多少用户喜欢抢注域名,本次实验也是以学习为主。