抓取异常信息: socket 读写错误 - 狸窝

登录站点

用户名

密码

问答 问答首页 - 解决方案 - 〖狸窝宝典

收藏 · 复制 · 保存到桌面

服务器防火墙打开后百度抓取失败

卉子 2016-09-06 11:45 | 阅读: 460 | 分类: 硬件 | 电子相册制作软件 所有教程

  正 文:
 
    现在有些IDC为了服务器的稳定运行,会给服务器安装金盾防火墙来防止CC/DDOS攻击等,这本来是一件好事,可以有效的阻止这些非法攻击,但是由于开启了金盾防火墙,所有的网址后面会出现随机符:?jdfwkey=jkd3k类似这样的。

    jdfwkey 含义解读:j(金)d(盾)f(火-fire)w(墙-wall)key(验证码)=hj67l9(随机码)。

    当开启了金盾防火墙后,根据策略不同,一般有两种情况发生:

    (一)可能所有的网址后面都会自动添加 jdfwkey 验证码;
    (二)也有可能每个新IP第一次访问网站时出现 jdfwkey 验证码,在接下来的一段时间内(一般为24小时内)不再出现 jdfwkey,但是超过一定的时间后(如24小时),又会自动出现 jdfwkey 验证码。

    开启金盾防火墙的好处就是可以防止ddos之类攻击,但是今天飘易要说的不是它的好处,而是它的严重弊端!

    虽然开启金盾后,用户通过浏览器(默认支持javascript)可以正常浏览网站内容,真正的流程是:

    打开网页 --> 获取一段跳转的JS代码(搜索引擎会卡在这里) --> 真正的网页。

    大家都知道,搜索引擎在抓取网站页面的时候,是不支持javascript代码的,更不会执行任何js代码。开启金盾防火墙后,搜索引擎在抓取网页的时候,只能抓取到下面的这段提示“访问本页面,您的浏览器需要支持JavaScript”的源码:

<html><body><script>function ca(da,ea,fa){var cb,ab=new Array(),bb="\xb4Dh\xe7\r\xaf\xdc\x05R\x9b\xc8x\x9aG\x8b\xad\xd5l/vCx\x1b\xbd^w\xa0\xc3\xe5\x11G\xe9\x18\xa0\xcfx\xa1\xf07\xfa\x9b\x01)w\xbe\xc3\xf2\x14\xc2\xa0A\x88\x9a";for(cb=0;cb<bb.length;cb++)ab[cb]=bb.charCodeAt(cb);cb=4;for(;cb<=50;){ab[cb]=((ab[cb]-ab[cb+1])&0xff)^ab[0];cb++;}cb=2;do{ab[cb]=(ab[cb]-189)&0xff;ab[cb]=(-((ab[cb]+22)&0xff))&0xff;}while(++cb<=51);cb=51;for(;;cb--){if(cb<1)break;ab[cb]=(((ab[cb]+250)&0xff)+236)&0xff;ab[cb]=(ab[cb]>>7)|((ab[cb]<<1)&0xff);}bb="";for(cb=1;cb<ab.length-1;cb++)if(cb%8)bb+=String.fromCharCode(ab[cb]^da);eval(bb);}ca(35,"","");</script><br><br><br><center><h3><p>访问本页面,您的浏览器需要支持JavaScript</p><p>The browser needs JavaScript to continue</p></h3></center></body></html>

    这根本不是网页原始代码,搜索引擎自然会认为你的网站出现了严重问题,因为所有的页面都返回了这样的毫无意义的js代码。结果可想而知,时间一长,搜索引擎接下来就是要降权、K站。

    【解决方法:】
    如果我们设计的winform程序,用户定时发出请求,这类请求完全正常,只是防火墙误杀了。我们可以在winform里放置一个webbrowser,当检测到出现上述特征代码时,启用webbrowser访问网页一次后,再次使用HttpWebRequest 获取网页源码即可。原理就是利用了 webbrowser 可以执行javascript代码的特点。

string html = getHtml(g_url, "utf-8"); //利用HttpWebRequest获取网页源码
                if (html.ToLower().Contains("needs javascript to continue"))
                {
                    string jdfwkey = "检测到服务器启用了防火墙!  时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n";
                    StreamWriter sw = File.AppendText("error.txt");
                    sw.Write(jdfwkey);
                    sw.Close(); sw.Dispose();
                    webBrowser3.Navigate(g_url); //启用浏览器访问一次
                    //* ---------------------
                    int i = 0;
                    while (i < 20) { Application.DoEvents(); Thread.Sleep(100); i++; }
                    while (i < 100)
                    { //延时
                        Application.DoEvents(); Thread.Sleep(100); i++;
                        if (webBrowser3.ReadyState == WebBrowserReadyState.Complete && (webBrowser3.StatusText == "完成" || webBrowser3.StatusText == "Done")) break;
                    }
                    //* ---------------------
                    goto endthis;
                }

亲,或许有关 ---
"服务器防火墙打开后百度抓取失败"
     教程及解决方案到这里 -->>  〖狸窝宝典〗有答案!如没有,请反馈给客服qq876292449


㊣狸窝- 为用户提供解决方案! 如需客服(QQ876292449)人工协助解决问题请升级vip,这里升级:
http://www.leawo.cn/do.php?ac=rg
成为vip后有什么好处?
http://www.leawo.cn/space-1-do-thread-id-28884.html