【逆向工程】从源码分析网站反爬虫措施

       从事网页爬虫工作有两年了,从最开始的新闻,bbs论坛,论文网站,到现在的全国企业信用信息公示系统,无论是PC网页,到手机移动APP,还是现在的支付宝微信小程序一直采集别人家网站上的数据,也算得上也是身经百战。如今,领导安排我注意收集整理归纳一下反爬虫措施,好直接用到我们自家的网站上,以免辛辛苦苦得来的数据被人轻而易举的抓取了。

       1、浏览器Cookies中的JSESSIONID

       多年的经验告诉我,那些反爬虫比较厉害的网站一般都会校验cookies的,所以发送请求的时候一定要带上cookies,需要注意的是最好在这两处都要加上cookies。一个是直接请求带上cookies,cookies是以键值对的形式带上的;另一个是在headers中也要加上Cookies的,这里的Cookies的value是用“;”隔开的字符串。下面我们分析一下

package com.test.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SetJeSessionIdServlet extends HttpServlet{
    
    @Override
    protected void service(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException {
        //这里是获取请求JESESSIONID
        String JESESSIONID = request.getParameter("JSESSIONID");
        //在cookie中加入JESESSIONID
        Cookie cookie = new Cookie("JSESSIONID",JESESSIONID);
        response.addCookie(cookie);
    }
}

       从上面代码可以看出,每次webserver处理请求,返回时都会加上JESESSIONID进行校验处理,所以编写爬虫时要cookies中有JESESSIONID是必须要加上的,同样的cookie中的uuid,__jsluid也很重要,使用时注意观察不要遗漏了,这其中比较有意思的网站,如全国企业信用信息系统中使用了加速乐的反爬虫措施,就会校验以上参数。

       2、小程序中禁用WiFi代理服务器反爬虫

     在爬虫某小程序时,用Fiddler设置WiFi代理抓包查看请求,发现所有请求异常,没有返回。看一下后台业务逻辑归纳:

if(isWifiProxy){  

    //true,使用了wifi代理,不做访问操作

}else{     
            
    //flase,正常用户,未使用wifi代理,访问网页
}

Java的判断逻辑也不复杂嘛!展示一下具体的代码实现:


 //判断设备 是否使用代理上网
 
private boolean isWifiProxy(Context context) {
 
        final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
        String proxyAddress;
        int proxyPort;
        if (IS_ICS_OR_LATER) {
            proxyAddress = System.getProperty("http.proxyHost");
            String portStr = System.getProperty("http.proxyPort");
            proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
        } else {
            proxyAddress = android.net.Proxy.getHost(context);
            proxyPort = android.net.Proxy.getPort(context);
        }
        return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
    }

这么做确实一定程度上可以做到防止抓包,但是一刀切导致所有使用代理的用户无法访问小程序。那就不用WiFi代理访问小程序,在电脑上装个安卓模拟器用Fiddler再次抓包,仍然无法看到url,原来模拟器跟PC是“独立”的终端设备。但道高一尺魔高一丈,终于让我发现了个神器,手机抓包工具,即使不使用WiFi代理,我也可以在手机上直接进行抓包。如下,直接抓包成功,然后非常畅快的进行网络爬虫采集!

猜你喜欢

转载自blog.csdn.net/weixin_39128119/article/details/82858239