1. 程式人生 > 其它 >暴力遍歷還沒註冊的雙拼域名

暴力遍歷還沒註冊的雙拼域名

最近突然發現雙拼域名越來越少,價格也在不斷上漲。想註冊一個有趣的雙拼域名玩玩,於是動手寫了一個暴力查詢雙拼域名的工具。

思路比較簡單,首先找到域名查詢的介面,這些介面一般都會做策略防止暴力查詢,這邊我使用了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;
        }