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

       从事网页爬虫工作有两年了,从最开始的新闻,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代理,我也可以在手机上直接进行抓包。如下,直接抓包成功,然后非常畅快的进行网络爬虫采集!

 

 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逆向工程(又名向工程,Reverse Engineering-RE)是对产品设计过程的一种描述。 通俗解释: 对于软件项目的逆向工程就如同盖楼一样,一栋大楼摆在面前,在不知道大楼图纸(图纸其实就是程序的架构)的前提下,仿照现有的大楼结构(发布好的项目结构)盖出相同的大楼。 1、在eclipse中建立maven项目(单击链接查看教程) 2、打开建立的该项目所在文件夹:项目右击->Properties 3、找到该文件夹所在位置,并找到src目录 4、还原webapp文件夹(前台页面内容)中的内容:将放在服务器tomcat中的webapps文件夹下的.war文件拷贝出来解压将解压的内容放到原webapp文件夹中 5、还原resources文件夹(配置文件信息)中的内容:依然在解压的.war文件中找:WEB-INF->classes中的内容(除了com该文件,这个文件其实是本项目命名的存放java类的文件;其它项目有可能不同) 6、还原java文件夹(项目中的类包)内容:将5中的com文件夹中的内容直接打开任意一个最下面的子文件,将其拖到我们之前下载好的编译软件中 7、通过eclipse重新加载该项目,将编译出来的每一个类按照相应的结构、命名在原项目中建立 8、引入相关的jar包:jar包文件在解压的.war文件中:WEB-INF->lib文件夹下;项目右击->build path->Configure build path->Libraries->Add External JARs.. 选择jar包所在的文件也就是上面的lib文件夹位置 9、更新项目,并在eclipse中添加tomcat(点击链接查看教程) 10、解决项目中的问题,小编遇到的最多的问题是因为继承关系用到了泛型,所以在编译的时候丢失了List或者set返回值类型,找到错误上面定义的地方,将对应的类型添加到上面就ok了! 11、appserver端代码搭建的时候,用到了hadoop技术,可能编译的时候会出现本地没有hadoop的错误(单击链接查看解决方法) 注:编译完成之后,在测试功能的时候,发现导出excel中的逻辑有所错误,这方面还没有搞懂是当时人为问题还是编译过程中的问题,不过最后跟了代码也解决了! 【总结】 以上是小编在研究完成之后属于教程性的东西,将其中小编实践以及思考的部分过程省略了。 活儿干完之后,得到经理和领导的大大赞扬是少不了的,另外吃肉也是少不了的。 但是更多的是,小编在解决这个大问题的时候的思考过程,其中困难部分: 1、研究生成war包之后,对应的文件的结构 2、研究java类的打包形式,对应的jar包的存放位置 3、对于该项目框架的梳理过程 4、整合过程,对于每一步操作细心的要求 5、整合完成,解决编译报错的过程 虽然活儿干完了,项目也跑了起来,但是对于里面的技术点自己还是得深入到代码中去研究,去感受,还有其中业务逻辑的梳理,以及设计思想的升华都需要去了解去学习。 只要相信自己,并付出与行动,终究会取得胜利的桂冠,加油O(∩_∩)O~

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值