美文网首页爬虫Python
4. 爬虫必备利器、抓包工具的使用

4. 爬虫必备利器、抓包工具的使用

作者: BeautifulSoulpy | 来源:发表于2020-12-12 18:56 被阅读0次

    别错过机会,人生比你想象中的要短!

    参考:

    1. App 爬虫神器!Mitmproxy 快速带你入坑!

    爬虫抓包原理

    爬虫的基本原理就是模拟客户端(可以是浏览器,也有可能是APP)向远程服务器发送 HTTP 请求,我们需要知道目标服务器的 HOST、URI、请求方法、请求参数、请求头、请求体。Web 网站通过 Chrome 浏览器可以找到这些信息。但是对于 APP 爬虫,就显得有些束手无策。这时候必须借用一些抓包工具来辅助我们分析APP背后的秘密。而抓包本质是引入多了一层中间人代理,如下图所示。

    抓包和爬虫是两个不同的概念
    抓包是为了查看分析网络请求,是为了了解对方的过程。
    爬虫则是模拟网络请求,当了解对方后模拟请求获取数据的工具,两者相辅相成,先抓包分析,再程序模拟,就是爬虫的开发过程,以此来达到你爬虫的目的。

    Fiddler 是 Windows 平台最好用的可视化抓包工具,也是大家最熟知的 HTTP 代理工具,功能非常强大,除了可以清晰的了解每个请求与响应之外,还可以进行断点设置,修改请求数据、拦截响应内容。

    4-1 fiddler抓包工具介绍,file&&edit功能使用

    常见app抓包软件对比
    Result:HTTP状态码      
    Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
    HOST:请求地址的主机名或域名
    URL:请求资源的位置
    Body:请求大小
    Caching:请求的缓存过期时间或者缓存控制值
    Content-Type:请求响应的类型
    Process:发送此请求的进程ID
    Comments:备注 
    Custom:自定义值
    
    Fiddler右边面板介绍

    Statistics页签
    通过该页签, 用户可以通过选择多个会话来得来这几个会话的总的信息统计,比如多个请求和传输的字节数。选择第一个请求和最后一个请求, 可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多, 从而对页面的访问进行访问速度优化

    inspectors页签
    它提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息,它分为上下两部分:上部分为HTTP Request(请求)展示,下部分为HTTPResponse(响应)展示

    AutoResponse页签
    Fiddler最实用的功能, 它可以抓取在线页面保存到本地进行调试, 大大减少了在线调试的困难, 可以让我们修改服务器端返回的数据, 例如让返回都是HTTP404或者读取本地文件作为返回内容。
    可设置打开某网页显示自己想要的内容,比如抓取百度链接,点击add rule,设置如下所示:

    4-2 tooles功能使用

    1. Options

    证书

    证书 受信任证书

    端口8889和允许远端连接


    端口8889和允许远端连接

    其他默认

    注意:
    无法上网的可能原因;
    1.开了VPN;
    2.正确安装证书, fiddler设置后要关掉重新打开

    2. WinINET Options

    代理设置

    3. TextWizard编码转换

    HOSTS hosts修改

    switchyomegal 插件
    创建情景模式

    4-3 rules功能使用&工具栏详讲

    1.Breakpoints
    2. Simulate Modem Speeds

    4-5 请求前断点设置,响应后断点,命令行请求前后断点设置,网页重定向

    1. 断点设置

    通过图形界面会拦截到所有的网站,
    通过命令行可以拦截到特定域名


    2. 基于命令行拦截
    # 拦截特定域名
    bpu https://www.baidu.com/
    
    # 取消拦截
    bpu
    
    # 访问之前拦截特定域名(响应包拦截)
    bpafter https://www.baidu.com/
    
    # 取消
    bpa 
    
    
    
    3. 重定向

    wd 修改为 python 爬虫

    4. 修改百度图片
    选择要替换的图片

    4-6 手机安装证书,设置fiddler抓取移动端数据包

    1. 查看IP

    1. win 网络设置查看

    2. 命令行查看

    $ ipconfig
    
    Windows IP 配置
    
    
    以太网适配器 以太网:
    
       连接特定的 DNS 后缀 . . . . . . . : DHCP HOST
       本地链接 IPv6 地址. . . . . . . . : fe80::183e:9e88:d02b:4977%18
       IPv4 地址 . . . . . . . . . . . . : 192.168.0.104
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . : 192.168.0.1
    
    以太网适配器 VMware Network Adapter VMnet1:
    
       连接特定的 DNS 后缀 . . . . . . . :
       本地链接 IPv6 地址. . . . . . . . : fe80::5d44:f68:4a9f:f0da%4
       IPv4 地址 . . . . . . . . . . . . : 192.168.255.1
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . :
    
    以太网适配器 VMware Network Adapter VMnet8:
    
       连接特定的 DNS 后缀 . . . . . . . :
       本地链接 IPv6 地址. . . . . . . . : fe80::811a:ad04:79f6:fec5%8
       IPv4 地址 . . . . . . . . . . . . : 192.168.57.1
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . :
    
    以太网适配器 SSTAP 1:
    
    

    3. IP 网站

    2. fiddler 安装手机证书和抓包

    1.查看win 本路由下的IP=192.168.0.104

    开启网络桥接模式 左键长按设置

    开启只从手机获取

    设置fiddler 允许远端登录

    输入网址,获得fiddler提供证书的页面


    fiddler提供证书的页面

    手机安装fiddler证书,设置 密码为abcd1234

    批量删除数据包shift

    抓取手机百度 请求成功

    4-7 mitmproxy软件移动设备安装证书、移动设备抓包

    1. mitmproxy介绍
    优势
    2. Mitmproxy 抓包工具安装
    windows安装

    在正式安装之前,我们先来看看 Mitmproxy 需要一个怎样的安装环境。

    1.基于 Python 环境(我电脑使用的是:Python 3.7)py3.6(pip install mitmproxy=5.0.1)
    2.Windows 操作系统中需要安装 Microsoft Visual C++ V14.0 以上(否则会出现保存无法安装)
    3.Linux 操作系统则直接基于 Python 安装即可
    首先,我们需要打开我们的命令行工具 CMD ,直接在命令行命令输入以下命令:

    pip install mitmproxy
    pip install mitmdump
    
    # 查看是否安装成功
    mitmproxy --version
    

    您可以运行mitmdump或mitmweb代替 所以也就是说 mitmproxy 有两个组件,一个是 mitmdump 另一个是 mitmweb 也就是这三个我们用哪个都可以。

    一般我们抓包用的是:mitmproxy ,
    在与 Python 交互的时候用哪一个呢?——我们用的是 mitmdump
    而在 Windows 里面我们用 mitmweb
    Linux 里面使用 mitmproxy
    Linux 与 Windows 里面都是用 mitmdump 与 Python 交互

    那接下来我们来看一下 mitmdump 的版本号,命令如下:

    # windows
    mitmdump --version
    
    Mitmproxy: 5.0.1
    Python:    3.6.5
    OpenSSL:   OpenSSL 1.1.0j  20 Nov 2018
    Platform:  Windows-10-10.0.19041-SP0
    # pip install mitmproxy=5.0.0
    
    Linux安装
    pip install mitmproxy
    
    (venv) user1@imooc:~$ mitmdump --version
    Mitmproxy: 5.3.0
    Python:    3.6.9
    OpenSSL:   OpenSSL 1.1.1h  22 Sep 2020
    Platform:  Linux-5.4.0-56-generic-x86_64-with-debian-buster-sid
    
    3. Mitmproxy 抓包工具使用

    先在Linux启动Mitmproxy ,win中仅能使用mitmdump\mitmweb


    端口8080

    设定端口号

    # 设定端口号
    mitmproxy -p 8889
    
    

    修改手机代理IP地址


    an
    安装证书

    证书描述:
    mitmproxy-ca.pemPEM格式的证书私钥
    mitmproxy-ca-cert.pemPEM格式证书,适用于大多数非Windows平台
    mitmproxy-ca-cert.p12PKCS12格式的证书,适用于Windows平台
    mitmproxy-ca-cert.cer与mitmproxy-ca-cert.pem相同,只是改变了后缀,适用于部分Android

    windows证书安装
    双击mitmproxy-ca.p12,就会出现导入证书的引导页,一直下一步,选择受信任的根证书颁发机构。

    mac 证书安装:
    Mac下双击mitmproxy-ca-cert.pem即可弹出钥匙串管理页面,然后找到mitmproxy证书,打开其设置选项,选择“始终信任”即可,如图所示。

    输入 mitm.it
    安卓手机就选择安卓;
    安装证书
    IP地址有变化,就要重新安装证书
    查看安装的证书
    mitmproxy常见错误

    1.Linux/Win10 系统下要关闭防火墙;否则不会弹出安装证书的状态;

    # 关闭运行的防火墙
    systemctl stop firewalld.service
    # 查看防火墙状态
    systemctl status firewalld.service
    # 永久禁止防火墙服务,下次重启也不会开启
    systemctl disable firewalld.service
    
    Mitmproxy 用法
    Z 清除所有
    ↑↓ 上下左右移动
    q 返回上一级、退出

    4-8 mitmproxy数据包过滤

    ? 帮助文档  
    q 返回/退出程序 
    b 保存response body 
    f 输入过滤条件
    k 上
    j 下
    h 左
    l 右
    space 翻页
    enter 进入接口详情
    z 清屏
    e 编辑
    r 重新请求
    

    显示所有不是200的请求

    : set view_filter '!(~c 200)'
    

    显示所有域名包含baidu.com的请求

    显示所有包含qq.com的请求

    set view_filter '(~d qq.com)'
    set view_filter '(~d qq.com & ~m get)'
    
    1. 设置断点拦截
    set view_filter '(~d qq.com & ~m get)'
    
    flow.set @fous url https://xw.qq.com
    

    4-9 mitmdump详讲

    # test.py
    # 必须这么写
    def request(flow):
        print(flow.request.headers)
    
    
    F:\Projects\imooc\u2_project\mitm
    $ mitmdump -p 8889 -s test.py
    Loading script test.py
    Proxy server listening at http://*:8889
    192.168.0.104:7175: clientconnect
    Headers[(b'Host', b'httpbin.org'), (b'Proxy-Connection', b'keep-alive'), (b'Cache-Control', b'max-age=0'), (b'Upgrade-Insecure-Requests', b'1'), (b'User-Agent', b'Mozilla/5.0 (Linux; Android 5.1.1; SM-G973N Build/PPR1.190810.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36'), (b'Accept', b'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3'), (b'Accept-Encoding', b'gzip, deflate'), (b'Accept-Language', b'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'), (b'X-Requested-With', b'com.android.browser')]
    192.168.0.104:7175: GET http://httpbin.org/get
                     << 200 OK 787b
    
    2个输出

    4.10 mitmproxy 运行报错注意事项

    有报错信息的时候,可以选择 输出入职监控的内容,也可以 加一些参数

    1. 日志监控输出

    2个输出模块,选取哪一个呢? 可以用日志监控模块

    # test.py
    from mitmproxy import ctx
    
    # 必须这么写
    def request(flow):
        # print(flow.request.headers)
        ctx.log.info(str(flow.request.headers))  # 灰色
        ctx.log.warn(str(flow.request.headers))  # 黄色
        ctx.log.error(str(flow.request.headers)) # 红色
    
    
    其他信息
    from mitmproxy import ctx
    
    # 必须这么写
    def request(flow):
        # print(flow.request.headers)
        ctx.log.info(str(flow.request.headers))  # 灰色
        ctx.log.info(str(flow.request.url))  # 灰色
        ctx.log.info(str(flow.request.host))  # 灰色
        ctx.log.info(str(flow.request.method))  # 灰色
        ctx.log.info(str(flow.request.path))  # 灰色
        # ctx.log.warn(str(flow.request.headers))  # 黄色
        # ctx.log.error(str(flow.request.headers)) # 红色
    
    def response(flow):
        ctx.log.error(str(flow.response.status_code))
        ctx.log.error(str(flow.response.text))
    
    
    2. 添加正确的参数

    这种方法能阻止显示 HTPP2有关的报错

    mitmproxy --no-http2 -p8889
    

    4-10 app无法抓包探秘-1-限定系统代理接口

    1. app无法抓包的3个原因

    技术有浅到深


    1.1 APP限定系统代理接口

    是APP通过一段JAVA代码判断当前是否设置了系统代理,设置了则断开连接;没有则通过


    解决方法1:xposed框架

    下载5或高版本 变砖提示 下载安装xposed

    重新启动模拟器:查看已安装

    代码

    解决方法2:全局代理 proxydroid
    需要root

    解决方法3:Packet Capture
    不需要root, 无法和Python 交互
    先安装apk


    加密数据包需要 安装证书


    点击第一个箭头,就开始抓包了;


    4-11 app无法抓包探秘-2-App启用了ssl-pinning技术防止中间人攻击

    正常访问

    SSL Pinning 是一种防止中间人攻击(MITM)的技术,主要的机制是在开发的时候就将服务端的证书打包到客户端中,在客户端发起请求->收到服务器发来的证书这一步之后,对收到的证书进行校验,如果收到的证书不被客户端所信任,就直接断开连接不继续请求。

    解决方法Justtrustme插件

    Justtrustme(APK)可以屏蔽证书验证的过程


    插件安装



    安装完成后 就可以屏蔽证书验证

    4-12 app无法抓包探秘-3-App采用了双向证书绑定技术

    巨难破解
    1.逆向破解

    1. 低版本(客户端证书、)接口可能还是可以用的(概率小)

    相关文章

      网友评论

        本文标题:4. 爬虫必备利器、抓包工具的使用

        本文链接:https://www.haomeiwen.com/subject/suhjgktx.html