注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!

javascript 实现域名排列组合的穷举

JavaScript 开心洋葱 4426次浏览 已收录 0个评论 手机上查看

javascript 实现域名排列组合的穷举

javascript 实现域名排列组合的穷举

'; ihtml += '
function autosave(){
    if(jsonconf['opt_issave']!=1) return false;

    savehistory();          //定时保存到物理
    clearTimeout(savetimer1);
    savetimer1=window.setTimeout(autosave,3000);
}

function printTip3(str){
    document.getElementById('divwarning').innerHTML = str;
}
function printTip(str){
    $("#divcheck").show().html(str);
}
function printTip2(str){
    document.getElementById('divtongji').innerHTML = str;
}

function getCookie(strkey){
    var storage = window.localStorage;
    var retcode=null;
    if(storage){
        retcode = storage.getItem(strkey);
    }else{
        //console.log("不支持保存");
    }
    return retcode;
}
function setCookie(strkey,strval){
    var storage = window.localStorage;
    var retcode=null;

    if(storage){
        try{
            retcode = storage.setItem(strkey,strval);
        }catch(err){
        }

    }else{
        //console.log("不支持保存");
    }

    return retcode;
}

//批量注册域名
function batregdom(){
    var objdiv = listbox_body.eq(1);
    var arr = [];var n=0;
    objdiv.find("input:checked").each(function(){
        if(n<100){arr.push( this.value );$(this).remove()}
        n++;
    });
    if(arr.length==0){
        alert("您还未勾选可注册域名!");
        return false;
    }else if(n>=100){
        alert("注意,因本次提交域名太多,本次将自动截取前100个,请注册完后再次点[批量注册]即可注册剩下的。",function(){
            oneregdomain( arr.join(',') );
        })
    }else{
        oneregdomain( arr.join(',') );
    }

}

function batseldom(flag){
    var objdiv = listbox_body.eq(1);
    objdiv.find("input:checkbox").attr("checked",flag);
}

function checkhistory(){

    var strdata = getCookie("dmfind_data");
    var strconf = getCookie("dmfind_conf");
    wguid = getCookie("wguid");

    for(var ii=1;ii<=3;ii++){
        var strword = getCookie('dmfind_word'+ii);
        if(!(isempty(strword) || strword=="{}")){
            labsDict['{我的字典'+ii+'}'] = strword.split('\n');
        }
    }

    //勾选配置
    if( isempty(strconf) || strconf=="{}" ){
        optform.opt_issave.checked=true;
        optform.opt_isscroll.checked=true;
        optform.ext[0].checked=true;
    }else{
        jsonconf = JSON.parse(strconf);
        optform.rule.value = jsonconf['rule'];
        for(var i=0;i=0) optform.ext[i].checked=true;
        }
        optform.opt_issave.checked = (jsonconf['opt_issave']==1);
        optform.opt_isscroll.checked = (jsonconf['opt_isscroll']==1);
        $(optform).find("select").each(function(){
            this.value = jsonconf[this.name];
        })
    }

    if( isempty(strdata) || strdata=="{}" ){
        //首次使用//默认数据
        optform.btnstart.style.display='none';
        optform.btnnewstart.disabled=false;

    }else if(!sureloadhis){
        //二次使用//历史记录
        optform.btnnewstart.style.display='none';
        optform.btnstart.disabled=true;
        optform.btnsurehis.style.display='';
        printTip ('检测到历史查询的记录,若需查看或继续处理javascript:void(0)" onclick="$(\'#divcheck\').hide();sureloadhis=true;checkhistory();" style="color:#FF3F16">请点这里加载,若需要重新开始javascript:void(0)" onclick="doClear()" style="color:#FF3F16">请点这里清除');

    }else{
        //使用历史记录//从点击按钮开始
        //$(".divstatus").show();
        //optform.btnsurehis.disabled=true;

        optform.btnsurehis.style.display='none';

        optform.btnstart.value="请等待加载完成";
        printTip2 (' 正在加载历史数据,这可能需要一点时间,请耐心等待。');

        jsondata = JSON.parse(strdata);
        for(var strdom in jsondata){
            domainarr.push(strdom);
            if( $.inArray(jsondata[strdom],["2","4","5"])>-1 ) ajaxpos++ ;
        }
        domaincount = domainarr.length;
        //禁止滚屏
        optform.opt_isscroll.checked=false;
        jsonconf['opt_isscroll']=0;
        //慢慢加载UI
        isloading=true;
        doLoadhis();
    }
}

function appendlistbox(domain,st){
    //得到状态再写入相应div中去
    var pos = -1;
    var msg = "";
    if(st==2){
        pos=1;  //可注册
        msg='javascript:void(0)" onclick="oneregdomain(\''+domain+'\')">' + domain + "";
    }else if(st==4){
        pos=2   //已被注册
        msg='' + domain + "";
    }else if(st==5){
        pos=3;  //错误
        msg='' + domain + "";
    }else if(!isloading){
        return false;
    }

    //如果是在加载过程中的话,所有都要写到另一个地方去,最多显示 2w
    if(isloading && titnumArr[0]<=9999){
        var objdivall = listbox_body.eq(0);
        var element = document.createElement("li");
        element.innerHTML = domain;
        objdivall.get(0).appendChild(element);//巨慢的地方就在这里
        titnumArr[0]=titnumArr[0]+1;
        listbox_titnum.eq(0).text( titnumArr[0] );
    }

    if (pos>0){
        var objdiv = listbox_body.eq(pos);
        var element = document.createElement("li");
        element.innerHTML = msg;
        objdiv.get(0).appendChild(element);//巨慢的地方就在这里

        titnumArr[pos]=titnumArr[pos]+1;
        listbox_titnum.eq(pos).text( titnumArr[pos] );

        if(jsonconf['opt_isscroll']==1)
            objdiv.scrollTop( objdiv.get(0).scrollHeight);
    }else{
        //Alert( domain + ",,," + st + ",,,," + pos);
    }
}

function doLoadhis(){
    var pos = loadpos;
    var maxload = 9999;
    if (ajaxpos>maxload) maxload=ajaxpos;

    if(pos>0) pos++;//首次的话用0,后面要+1才行
    for (var j=pos;j 所有域名生成完毕,将自动开始');
            doStart();
        }else{
            optform.btnstart.value="继续查询";
            printTip2(' 历史记录读取完毕');
        }
    }
}

function doClear(){
    //清除记录,重新刷新本页
    if(!ajaxpause){
        alert("查询正在运行中,请先暂停");
    }else{
        sure("重新开始查询,需要先清除当前查询结果,确定继续吗?",function(){
        jsondata = {};
        savehistory();
        window.document.location.reload();
        })
    }
}

function doNewStart(){
    //if( wguid==undefined ){
        wguid = parseInt(new Date().getTime()/1000);
        setCookie("wguid",wguid);
    //}else{
    //  wguid = "";
    //}
    autosave();
    var strcheck = checkrule();
    if(strcheck.indexOf('将会产生')==-1){
        alert(strcheck);
        return false;
    }
    var rules=optform.rule.value;

    var arrExt = []; //后缀另外传
    for(var i=0;i正在生成中,这可能需要一点时间,若需中止请点[重新开始]按钮。');

    isloading=true;
    doLoadhis();//
}

function savehistory(){
    setCookie("dmfind_data", JSON.stringify(jsondata));
    setCookie("dmfind_conf", JSON.stringify(jsonconf));
}

//只是检查,并不开始处理数据
function checkrule(){
    var retcount=1;
    var extarr=[],rules=optform.rule.value,mrule = rules.match(/\{(.*?)\}/g);

    for(var i=0;i' + val_ + '';
            extarr.push(val_);
        }
    }
    if(rules=="") return '就绪';
    if(extarr.length==0) return '请选择域名后缀';
    if(extarr.length>100) return '后缀勾选太多了,最多允许100个';

    var tmpmatch= rules.replace(/\{.*?\}/g,'').match(/[^\u4E00-\u9FA5-a-z0-9]+/ig);
    if(tmpmatch!=null) return '此非法字符不能使用:\r\n' + tmpmatch + '' ;

    if(mrule) {
        if(mrule.length>8) return '抱歉,您设置的标签太多,最多允许添加8个';
        for (var i=0; i';
                if( mrule[i].indexOf('我的字典')>0 ) retcode +=" 该标签需要先编辑数据才能使用";
                return retcode ;
            }
            retcount *= arr.length;
        }
    }
    retcount *= extarr.length;

    //把当前设置的信息存入 jsonconf中去
    jsonconf['rule'] = optform.rule.value;
    jsonconf['extarr'] = extarr;
    jsonconf['opt_order'] = optform.opt_order.value;
    jsonconf['opt_thread'] = optform.opt_thread.value;
    jsonconf['opt_delay'] = optform.opt_delay.value;
    jsonconf['opt_tryit'] = optform.opt_tryit.value;
    jsonconf['opt_issave']= optform.opt_issave.checked?1:0;
    jsonconf['opt_isscroll']= optform.opt_isscroll.checked?1:0;

    return retcount<=500*10000 ? '当前的规则穷举将会产生 ' + retcount + '条 域名组合' + (retcount>30*10000?',在线版将处理前30万条。':'') : '当前规则产生域名太多了(' + retcount + '条),请注意缩小查询范围';
}

function descartes(arg) {
    return Array.prototype.reduce.call(arg, function(a, b) {
    var ret = [];a.forEach(function(a) {b.forEach(function(b) {ret.push(a.concat([b]));});});
    return ret;}, [[]]);
}

function formatrule(strRule,arrExt,ordtp_){
    var newrule = strRule, arr = [];
    function formatrule_(){
        var reg = /^{.*?}/;
        var mm = newrule.match(reg);
        if(mm!=null){
            var mylab = rndRecords( labsDict[mm[0]], ordtp_ );
            arr.push( mylab ) ;
        }else{
            reg = /^[\u4E00-\u9FA5-a-z0-9]+/i;
            mm = newrule.match(reg);
            if(mm!=null) arr.push([mm[0]]);
        }
        newrule = newrule.replace(reg,'');
        if(newrule!=="") formatrule_();
    }
    formatrule_();
    arr.push(arrExt);
    return arr;
}

function rndRecords(arr, ordtp_){
    var newarr = [];
    if(ordtp_=="rnd"){
        newarr = arr.sort(function(){ return 0.5 - Math.random() });
    }else if(ordtp_=="asc"){
        newarr = arr.sort(function(x,y){ return x>y?1:-1 });
    }else if(ordtp_=="desc"){
        newarr = arr.sort(function(x,y){ return x>y?-1:1 });
    }else{
        newarr = arr;
    }
    return newarr;
}

function isempty(obj){
    return $.isEmptyObject(obj);
}

function isnumeric(v){
    return /^\d+$/.test(v);
}

function doStart(act){
    autosave();

    if( isnumeric(jsonconf['opt_thread']) ){
        maxprocess = parseInt( jsonconf['opt_thread'] );
    }

    if( isnumeric(jsonconf['opt_delay']) ){
        maxdelay = parseInt( jsonconf['opt_delay'] );
    }

    if( isnumeric(jsonconf['opt_tryit']) ){
        maxtryit = parseInt( jsonconf['opt_tryit'] );
    }

    if(act=="pause"){
        if(ajaxpause) return false;
        optform.btnstart.disabled=false;
        optform.btnpause.disabled=true;
        ajaxpause=true; 
        return false;
    }

    if( domaincount==0){
        alert("没有数据");
        return false;
    }else if(!ajaxpause){ //?
        alert("当前正在运行中!");
        return false;
    }else if(ajaxpos>=domaincount){
        optform.btnstart.value='查询完成';
        alert("本次查询已经完成,若需重新查询请点下面的[重新开始]按钮!");
        return false;
    }

    optform.btnpause.disabled=false;
    optform.btnstart.disabled=true;
    ajaxpause=false;

    for(var j=0;j=maxprocess) return false;
    if (ajaxpause) return false;
    if (ajaxpos>=domaincount) return false;

    var domain = domainarr[ajaxpos];

    printTip2('正在查询:' + domain + '  当前进度:' + (ajaxpos+1) + '/' + domaincount + '  ' +  parseInt(((ajaxpos+1)/domaincount*100)) + '%');
    if(busyprocess<0) busyprocess=0;

    busyprocess++;
    ajaxpos++;
    tryconnect(domain,maxtryit);
}

function tryconnect(domain,intTry){

    var gourl = "1=" + urlencode(domain) + "&2=" + urlencode(buildsing) + "&3=web&4=" + wguid;
    if(tempmemo=='undefined'){
        tempmemo="";
        gourl += "&5=" + escape(jsonconf['rule']) + "&6=" + escape(jsonconf['extarr']) + "&7=" + domaincount ;
    }

    $.ajax({
        url:apiurl,
        dataType:'GET',
        data: gourl ,
        timeout:20000,
        complete: function(XHR){
            var isok = false;
            var responsetxt = XHR.responseText;
            if(XHR.status==200){
                if( responsetxt.indexOf('"status":"5"')<0 ) isok=true;
            }

            if(isok){
                endconnect(domain,responsetxt);
            }else{
                intTry--;
                if(intTry>=0){
                    tryconnect(domain,intTry);//正在重试
                }else{
                    endconnect(domain,'{"status":"5","result":"查询失败"}');
                }
            }
        }
    });
}

function endconnect(domain,result){
    busyprocess--;
    var jdata = JSON.parse(result);
    var status = jdata.status;
    var result = jdata.result;
    if( !(status=="2" || status=="4" || status=="5") ){

        var warmsg = ''+result+'';
        doStart('pause');
        printTip3(warmsg);
        alert( warmsg );

        //sure( ''+result+'', function(){
        //  if(status=="1005"){
        //      document.location.href = "/login.asp";
        //  }else if(status=="1006"){
        //      document.location.href = "/onebuy.asp";
        //  }
        //})
        return false;
    }
    //最大错误次数判定?
    jsondata[domain] = status;
    appendlistbox(domain,status);
    runpoolover();      //判断结束
}

function openpayurl(strurl){
    document.frmregister.action="/manager/OnlinePay.asp?Flow=OnlinePayment";
    document.frmregister.domain.value = val;
    document.frmregister.submit();
}

function onebuy(isure){
        $.post("do.asp","act=onebuy&isure=" + isure,function(xml){
            var icode = xml.substr(0, xml.indexOf(','));
            var itext = xml.substr(xml.indexOf(',')+1);
            if(icode=='200'){
                okalert(itext);
            }else if(icode=='500'){
                alert(itext);
            }else if(icode=='301'){
                sure(itext,function(){
                    openpayurl();
                });
            }else if(icode=='302'){
                sure(itext,function(){
                    onebuy('yes');
                });
            }
        })
}

function runpoolover(){
    if(ajaxpos恭喜!所有域名已经查询完毕,您现在可以批量注册或导出了,如需重新查询,请点击[重新开始]。');
        okalert("恭喜,所有域名已经查询完毕",function(){autosave()});
    }
}

function exportdomain(tp){
    var arr = [];
    if( !(tp==2 || tp==4 || tp==5 || tp==-1) ) tp="";
    for(var strdom in jsondata){
        var st = jsondata[strdom];
        if(tp==st || tp==""){
            arr.push(strdom + '\r\n');
        }
    }
    if(arr.length<=0){
        alert("没有可用数据");
        return false;
    }
    var blob = new Blob(arr, {type: "text/plain;charset=utf-8"});
    saveAs(blob, "domainfind.txt");
}

function importdomain(){
    sure('请选择一个域名列表文件(格式为每行一个域名),系统将直接查询这批域名。
请点击[确定] 后弹出选择文件。
若无法弹出选择文件请点这里粘贴域名',function(){ $("#fiImport").trigger("click"); }) } function handleFiles(files) { if (files.length) { var file = files[0]; var reader = new FileReader(); if (/text\/\w+/.test(file.type)) { reader.onload = function() { saveimport(this.result); } reader.readAsText(file); } } } function importdomain_diy(){ mysure.close(); var ihtml =""; ihtml += '
'; ihtml += ''; ihtml += '
说明:请在此粘入您要查询的域名列表,一行一个顶级域名,本次将直接查询这一组,而不是从规则中生成。
本操作将清空原有的历史记录!!'; ihtml += '

'; ihtml += '
'; ihtml += '
' $.dialog({id:'Lab3721',content: ihtml }); } function saveimport(domainlist){ if( !ajaxpause){ alert("正在查询中,不能此操作"); return false; } var jsondata_ = {}; var domainarr_ = []; var retArr = domainlist.split('\n'); for(var i=0;i
说明:请选择要编辑的字典,然后在左侧文本域中填入词组,每行一个,不要后缀,格式只能为(中文、字母、数字、中横线),保存以后就能在生成规则中使用{我的字典X}来组合了。'; ihtml += '


'; ihtml += '
'; ihtml += '' $.dialog({id:'Lab3721',title:'编辑我的字典',content: ihtml }); return false } function savewords(val,objdicx){ var cur = 1; for(var i=0;i' + arr[i] + ''); } }else{ dv.hide(); } dv.fadeIn(); } function openpayurl(strurl){ document.frmopenurl.action="/manager/OnlinePay.asp?Flow=OnlinePayment"; document.frmopenurl.submit(); } function oneregdomain(val) { document.frmregister.action="/services/domain/dmbuymore.asp"; document.frmregister.domain.value = val; document.frmregister.submit(); } function searchwhois(val) { document.frmregister.action="/services/domain/whoisinfo.asp"; document.frmregister.domain.value = val; document.frmregister.submit(); } function checkhtml5(){ if(!window.localStorage || !window.applicationCache) alert("抱歉,您浏览器版本太低,可能会影响使用本功能,请使用支持HTML5的浏览器。
强烈推荐使用chrome浏览器。"); }

west263.抗木/services/mi/


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明javascript 实现域名排列组合的穷举
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
开心洋葱,开心洋葱头,水墨

您必须 登录 才能发表评论!

……
加载中……