暴力遍历还没注册的双拼域名

最近突然发现双拼域名越来越少,价格也在不断上涨。想注册一个有趣的双拼域名玩玩,于是动手写了一个暴力查询双拼域名的工具。

思路比较简单,首先找到域名查询的接口,这些接口一般都会做策略防止暴力查询,这边我使用了2个接口作为容错。

aaw8:http://www.aaw8.com/Api/DomainApi.aspx?domain=chenrensong.com

{
    StateID: 0,
    DomainName: null,
    Result: null
}

返回第一个参数为域名查询状态: 0 表示查询接口出错 1 表示网络异常 200 表示接口返回成功 210 表示域名可以注册 211 表示域名已经注册 212 表示域名参数传输错误 213 查询超时

万网:http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=chenrensong.com

<?xml version="1.0" encoding="gb2312"?>
<property>
<returncode>200</returncode>
<key>datiancun.com</key>
<original>211 : Domain name is not available</original>
</property>

返回 XML 结果说明: returncode=200 表示接口返回成功 key=***.com表示当前check的域名 original=210 : Domain name is available 表示域名可以注册 original=211 : Domain name is not available 表示域名已经注册 original=212 : Domain name is invalid 表示域名参数传输错误 original=213 : Time out 查询超时

有了接口之后一切都比较好办了,这时候需要一个拼音的单词表

 private static string CONST = @"a,ai,an,ang,ao,ba,bai,ban,bang,bao,bei,ben,beng,bi,bian,biao,bie,bin,bing,bo,bu,ca,cai,can,cang,cao,ce,cen,ceng,cha,chai,chan,chang,chao,che,chen,cheng,chi,chong,chou,chu,chuan,chuang,chui,chun,chuo,ci,cong,cou,cu,cuan,cui,cun,cuo,da,dai,dan,dang,dao,de,deng,di,dia,dian,diao,die,ding,diu,dong,dou,du,duan,dui,dun,duo,e,en,er,fa,fan,fang,fei,fen,feng,fo,fou,fu,ga,gai,gan,gang,gao,ge,gei,gen,geng,gong,gou,gu,gua,guai,guan,guang,gui,gun,guo,ha,hai,han,hang,hao,he,hei,hen,heng,hong,hou,hu,hua,huai,huan,huang,hui,hun,huo,ji,jia,jian,jiang,jiao,jie,jin,jing,jiong,jiu,ju,juan,jue,ka,kai,kan,kang,kao,ke,ken,keng,kong,kou,ku,kua,kuai,kuan,kuang,kui,kun,kuo,la,lai,lan,lang,lao,le,lei,leng,li,lia,lian,liang,liao,lie,lin,ling,liu,lo,long,lou,lu,luan,lun,luo,lv,ma,mai,man,mang,mao,me,mei,men,meng,mi,mian,miao,mie,min,ming,miu,mo,mou,mu,na,nai,nan,nang,nao,ne,nei,nen,neng,ni,nian,niang,niao,nie,nin,ning,niu,nong,nou,nu,nuan,nuo,nv,o,ou,pa,pai,pan,pang,pao,pei,pen,peng,pi,pian,piao,pie,pin,ping,po,pou,pu,qi,qia,qian,qiang,qiao,qie,qin,qing,qiong,qiu,qu,quan,que,qun,ran,rang,rao,re,ren,reng,ri,rong,rou,ru,ruan,rui,run,ruo,sa,sai,san,sang,sao,se,sen,seng,sha,shai,shan,shang,shao,she,shen,sheng,shi,shou,shu,shua,shuai,shuan,shuang,shui,shun,shuo,si,song,sou,su,suan,sui,sun,suo,ta,tai,tan,tang,tao,te,teng,ti,tian,tiao,tie,ting,tong,tou,tu,tuan,tui,tun,tuo,wa,wai,wan,wang,wei,wen,weng,wo,wu,xi,xia,xian,xiang,xiao,xie,xin,xing,xiong,xiu,xu,xuan,xue,xun,ya,yan,yang,yao,ye,yi,yin,ying,yo,yong,you,yu,yuan,yue,yun,za,zai,zan,zang,zao,ze,zei,zen,zeng,zha,zhai,zhan,zhang,zhao,zhe,zhen,zheng,zhi,zhong,zhou,zhu,zhua,zhuai,zhuan,zhuang,zhui,zhun,zhuo,zi,zong,zou,zu,zuan,zui,zun,zuo";

通过遍历单词表来查询双拼域名,再请求相应的服务即可

HttpClient client = new HttpClient();
var response = await client.GetAsync(url);
var result = await response.Content.ReadAsStringAsync();
result = resolve(result);

需要说明的是aaw8的接口比较挫,返回的是html 包装的json…

需要正则把body里面的部分给截取出来

        private static string ReadHtmlToEditHtml(string htmlContent1)
        {
 
            Regex reg = new Regex("(?is)<body[^>]*>(?<body>.*?)</body>");
            string bodyHtml = "";
            bodyHtml = reg.Match(htmlContent1).Groups["body"].Value;
            return bodyHtml;
        }

剩下来的就是写个返回数据解析了,为了防止查询过的域名再查询一遍浪费时间,我简单做了下本地cache,完整的代码如下

        private async Task<ResultModel> FindDomain(string entity)
        {
            String filePath = "D:\\cache\\" + md5(url) + "_com.txt";
            string fileContents = "";
 
            if (File.Exists(filePath))
            {
                fileContents = File.ReadAllText(filePath);
            }
            else
            {
                HttpClient client = new HttpClient()
                var response = await client.GetAsync(url);
                var result = await response.Content.ReadAsStringAsync();
                result = resolve(result);
                fileContents = result;
                bool flag = true;
                try
                {
                    JsonConvert.DeserializeObject(fileContents);
                    flag = true;
                    File.WriteAllText(filePath, fileContents);
                }
                catch (Exception ex)
                {
                    flag = false;
                }
            }
            var obj = (ResultModel)Newtonsoft.Json.JsonConvert.DeserializeObject(fileContents, typeof(ResultModel));
            return obj;
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏岑玉海

sqoop 兼容性问题

--direct 只支持mysql 5.0 + 和postgresql 8.3+(只是import) jdbc的jar包需要放在$SQOOP_HOME/lib目...

43260
来自专栏Laoqi's Linux运维专列

每日shell练习题

1.9K30
来自专栏hbbliyong

初识SqlLite ---.net连接数据库

  Sqlite 是一款轻量级的关系型数据库,以小巧和嵌入式闻名。以前只是听说,现在终于忍不住要尝试下.本文的初衷是为.net平台的使用者提供帮助。 Sqlit...

40180
来自专栏更流畅、简洁的软件开发方式

Step By Step 一步一步写网站[1] —— 帧间压缩,表单控件

记得在大学的时候,学习多媒体遇到了一个概念:帧内压缩和帧间压缩。我感觉我的第一篇里里面提到的我的那个方法有一点像帧间压缩,那么是不是把代码减少到极致了呢? 单看...

184100
来自专栏Java学习123

powerdesigner 15 如何导出sql schema

30350
来自专栏乐沙弥的世界

使用优化器性能视图获取SQL语句执行环境

    Oracle SQL语句的运行环境分为多个不同的层次,主要包括实例级别,会话级别,语句级别,其优先级依次递增。即语句级别的执行环境具 有最高的优先权,...

9020
来自专栏乐沙弥的世界

delete archivelog all 无法彻底删除归档日志?

    最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢?

10010
来自专栏乐沙弥的世界

Linux/Unix shell 监控Oracle实例(monitor instance)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,A...

9910
来自专栏乐沙弥的世界

SQL server 数据导入导出BCP工具使用详解

    数据的导入导出是数据库管理员常见的工作任务之一,尤其是平面文件的导入导出。BCP 工具则为这些任务提供了强有力的支持,它是基于DB-Library,尤其...

21320
来自专栏MasiMaro 的技术博文

自己写的驱动用CreateFile打开时错误码返回1的问题

就像题目上说的,今天在写一个例子代码时遇到了这个问题,下面是当时驱动层和应用层的代码:

26850

扫码关注云+社区

领取腾讯云代金券