python爬虫Mitmproxy安装使用学习笔记

目录
  • 一、简介和安装
    • 1.1、概念和作用
      • 概念
      • 作用
    • 1.2、安装
    • 1.3、工具介绍
  • 二、设置代理
    • 2.1、PC端设置代理
    • 2.2、PC端安装证书
    • 2.3、移动端设置代理
  • 三、 mitmdump
    • 3.1、插件使用
    • 3.2、常用事件
      • 3.2.1、request事件
      • 3.2.2、response事件
    • 3.3、下载图片

一、简介和安装

1.1、概念和作用

概念

Mitmproxy是一个免费的开源交互式的HTTPS代理。MITM即中间人攻击(Man-in-the-Middle Attack)。

作用

代理的作用,转发请求,保障服务端与客户端的通信

查看,记录,修改数据,引发服务端或客户端的特定行为

补充:Mitmproxy与Fiddler、Charles异同
相同点: a、都是用来捕获 HTTP,HTTPS 请求的(其他协议比如 TCP,UDP,IP,ICMP 等就用Wireshark)
     b、抓包、断点调试、请求替换、构造请求、模拟弱网等

不同点:a、Fiddler只能运行在Windows系统;Mitmproxy、Charles是跨平台的,可运行在Windows、Mac或Linux系统等。
    b、Fiddler、Mitmproxy开源免费、Charles是收费的(可破解)。
    c、Mitmproxy支持命令行交互模式、GUI界面,Fiddler、Charles仅支持GUI界面
(Fiddler底部有个命令行工具叫做 QuickExec)

1.2、安装

pip  install  mitmproxy

pip install -i https://pypi.douban.com/simple  mitmproxy

如果直接安装的速度太慢了,可以在命令行中添加国内的镜像源加快速度,就是第二条命令。注意:python 版本不低于3.6

检查是否安装成功:命令行中输入命令查看mitmdump --version

安装成功后在Python安装路径Script路径下可以找到 mitmdump.exemitmproxy.exemitmweb.exe 这三个可执行文件。

1.3、工具介绍

mitmproxy:命令行界面,允许交互式检查和修改http数据流,不支持windows

mitmweb: Web界面,用户可以实时看到发生的请求,过滤请求,查看请求数据

mitmdump: 一个命令行工具,没有界面,不能交互,但是可以通过启动参数并结合自定义脚本进行定制化功能的实现,是我们运行的环境

这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同;

mitmproxy,mitmweb主要用来做调试,部署项目时使用mitmdump。

二、设置代理

2.1、PC端设置代理

开启代理时需要把其他的代理都关掉

开启代理

注:这时我们刚开启代理,还未安装证书,如果访问其他网址会出现报错,如下图所示:

2.2、PC端安装证书

在代理状态下,访问http://mitm.it/,PC端与移动端操作相同。

(注意:设置完成后,浏览器打开网页发现都是未连接网络,需要先启动mitmweb.exe或者mitmdump.exe程序才能打开链接)

根据自己的系统环境下载对应的证书安装

后面点击下载的证书按步骤导入就可以了

2.3、移动端设置代理

以夜神模拟器为例(注意保证手机和电脑在同局域网下)

设置完代理,打开浏览器访问http://mitm.it/

下载安装证书


三、 mitmdump

官方文档:https://docs.mitmproxy.org/stable/addons-overview/

3.1、插件使用

  • 插件的本质就是一个脚本文件,在Python中就是一个类的实例对象。
  • 此处插件是Counter实例对象,request方法是一个事件
  • 对于request事件,它的参数是一个mitmproxy.http.HTTPFlow的对象。

如:(官方文档例子)

"""
Basic skeleton of a mitmproxy addon.
Run as follows: mitmproxy -s anatomy.py
"""
from mitmproxy import ctx
class Counter:
    def __init__(self):
        self.num = 0
    def request(self, flow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)
addons = [
    Counter()
]

上面是一个简单的插件,用于跟踪我们已经看到的流(或更具体的HTTP请求)数量。每次看到新的流量时,它都会使用mitmproxy的内部日志记录机制来宣布其提示。可以在交互式工具的事件日志中或mitmdump的控制台中找到输出。

可以使用mitmdump -s ./anatomy.py运行插件(anatomy.py是创建的文件名)。


3.2、常用事件

def request(self, flow: mitmproxy.http.HTTPFlow):
​ """
​ The full HTTP request has been read.
​ """
def response(self, flow: mitmproxy.http.HTTPFlow):
​ """
​ The full HTTP response has been read.
​ """

3.2.1、request事件

(注意:记得在代理状态下执行,命令:mitmdump -s ./xxx.py

from mitmproxy import http
def request(flow:http.HTTPFlow):  #注意函数名request不能写错
    #获取请求头信息
    print('请求头',flow.request.headers)
    #完整请求地址
    print('请求url',flow.request.url)
    #域名
    print('域名',flow.request.host)
    #请求路径  url除域名之外的内容
    print('请求路径',flow.request.path)
    #返回MultiDictView类型的数据,URL的键值参数
    print('url的键值参数',flow.request.query)
    #请求方法
    print('请求方法',flow.request.method)
    #请求类型
    print('请求类型',flow.request.scheme)
    #获取请求内容
    '''
    print('请求内容',flow.request.get_text)
    print('请求内容类型',type(flow.request.get_text))
    print('请求内容bytes',flow.request.raw_content)
    print('请求内容bytes',flow.request.get_content)
    '''
    if 'https://www.baidu.com' in flow.request.url:
        #取得请求参数wd的值
        print(flow.request.query.get('wd'))
        #取得所有请求参数
        print(list(flow.request.query.keys()))
        #修改请求参数
        flow.request.query.set_all('wd',['python'])
        #打印修改过后的参数
        print(flow.request.query.get('wd'))

3.2.2、response事件

(注意:记得在代理状态下执行,命令:mitmdump -s ./xxx.py

from mitmproxy import http
def response(flow:http.HTTPFlow):  #注意函数名response不能写错
    #状态码
    print('状态码',flow.response.status_code)
    #返回内容,已解码
    print('返回内容',flow.response.text)
    #返回内容, bytes类型
    print('返回内容bytes类型',flow.response.content)
    #取得响应的文本
    print('应的文本',flow.response.get_text)
    #修改响应 的文本
    flow.response.set_text('你的响应内容被修改了!')

3.3、下载图片

(注意:记得在代理状态下执行,命令:mitmdump -q -s ./xxx.py 加-q会使打印更清晰可观)

import os
index = 0
def response(flow):
    global index
    print('===========下载==============')
    print(flow.request.url)
    if flow.request.url[-3:] == 'jpg':
        dir = 'images'
        if not os.path.exists(dir):
            os.mkdir(dir)
        filename = dir+'/'+str(index)+'.jpg'
        with open(filename,'wb') as f:
            f.write(flow.response.get_content())
            index+=1

以上就是python爬虫Mitmproxy安装使用学习笔记的详细内容,更多关于python爬虫Mitmproxy的资料请关注我们其它相关文章!

(0)

相关推荐

  • python代理工具mitmproxy使用指南

    前言 mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,可以用来拦截.修改.保存 HTTP/HTTPS 请求.以命令行终端形式呈现,操作上类似于Vim,同时提供了 mitmweb 插件,是类似于 Chrome 浏览器开发者模式的可视化工具. 它是基于Python开发的开源工具,最重要的是它提供了Python API,你完全可以通过Python代码来控制请求和响应,这是其它工具所不能做到的,这点也是我喜欢这个工具的原因之一. 安装 sudo pip

  • Python3爬虫mitmproxy的安装步骤

    mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接Python脚本,实现监听后的处理:另一个是mitmweb,它是一个Web程序,通过它以清楚地观察到mitmproxy捕获的请求. 本节中,我们就来了解一下mitmproxy.mitmdump和mitmweb的安装方式. 1. 相关链接 GitHub

  • python如何利用Mitmproxy抓包

    一.使用 安装 pip install mitmproxy mitmproxy 是具有控制台界面的交互式,支持SSL的拦截代理 mitmdump是mitmproxy的命令行版本.想想tcpdump为HTTP mitmweb 是一个基于web的界面,适用于mitmproxy mitmproxy(mac).mitmdump.mitmweb(win) 这三个命令中的任意一个即可 mitmweb -s mitm.py 命令行启动默认端口8080 mitmweb -p 8888 -s mitm.py 指定

  • 详解安装mitmproxy以及遇到的坑和简单用法

    mitmproxy 是一款工具,也可以说是 python 的一个包,在命令行操作的工具. MITM 即中间人攻击(Man-in-the-middle attack) 使用这个工具可以在命令行上进行抓包,还可以对所抓到的包进行脚本处理,非常有用. 安装 mitmproxy 安装这个我们必须先安装了 pip. pip 在安装了 python之后自带的,如果你安装了 python 就可以忽略了,如何安装这里就不说了,只说安装 mitmproxy 打开命令行,输入 pip install mitmpro

  • Python抓包程序mitmproxy安装和使用过程图解

    一.介绍说明 mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler.Charles的功能,只不过它是一个控制台的形式操作. mitmproxy还有两个关联组件.一个是mitmdump,它是mitmproxy的命令行接口,利用它我们可以对接Python脚本,用Python实现监听后的处理.另一个是mitmweb,它是一个Web程序,通过它我们可以清楚观察mitmproxy捕获的请求. mitmproxy的功能: 1.拦截HTTP和HTTPS请求和响应 2.保存HTTP会

  • python爬虫Mitmproxy安装使用学习笔记

    目录 一.简介和安装 1.1.概念和作用 概念 作用 1.2.安装 1.3.工具介绍 二.设置代理 2.1.PC端设置代理 2.2.PC端安装证书 2.3.移动端设置代理 三. mitmdump 3.1.插件使用 3.2.常用事件 3.2.1.request事件 3.2.2.response事件 3.3.下载图片 一.简介和安装 1.1.概念和作用 概念 Mitmproxy是一个免费的开源交互式的HTTPS代理.MITM即中间人攻击(Man-in-the-Middle Attack). 作用 代

  • Python测试框架:pytest学习笔记

     python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest. pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试.接口自动化测试(pytest+requests) pytest具有很多第三方插件,并且可以自定义扩展

  • python中关于数据类型的学习笔记

    数据类型是每种编程语言必备属性,只有给数据赋予明确的数据类型,计算机才能对数据进行处理运算,因此,正确使用数据类型是十分必要的,不同的语言,数据类型类似,但具体表示方法有所不同,以下是Python编程常用的数据类型: 1. 数字类型 Python数字类型主要包括int(整型).long(长整型)和float(浮点型),但是在Python3中就不再有long类型了. int(整型) 在32位机器上,整数的位数是32位,取值范围是-231~231-1,即-2147483648~214748364:在

  • python爬虫 execjs安装配置及使用

    模块安装 参考官方文档安装 pip install PyExecJS 配置 该模块需要JS运行时环境 以下JS runtime经过官方测试认可,建议采用 PyV8:一个调用Google V8引擎的Python模块 Node.js 本文采用该运行时 PhantomJS Nashorn 以下JS runtime也支持但未经过官方测试 Apple JavaScriptCore - Included with Mac OS X JScript :windows自带JS解释器,IE浏览器 SlimerJS

  • python入门之基础语法学习笔记

    Python 中文编码 Python 文件中如果未指定编码,在执行过程会出现报错: Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错. 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了. Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中

  • Python的面向对象编程方式学习笔记

    类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. 下面的示例展示了如何创建一个类: class MyNewObjectType(bases): ''' 创建 MyNewObjectType 类''' class_suite 关键字是 class,紧接着一个类名.随后是定义类的类代码.这里通常由各种各样的定义和声明组成.新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类,参数 bases 可以是一个(单继承)或多个(

  • Python中的自定义函数学习笔记

    定义一个什么都不做的函数 复制代码 代码如下: >>> def a(): ... pass ... >>> def printHello(): ... print("hello") ... >>> printHello() hello >>> callable(printHello) True 顾名思义,callable函数用于判断函数是否可以调用: 有书上说,callable在Python3.0中已经不再使用,而

  • Python中shutil模块的学习笔记教程

    介绍 shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来记忆模块的名称.该模块拥有许多文件(夹)操作的功能,包括复制.移动.重命名.删除等等 一.chutil.copy(source, destination) shutil.copy() 函数实现文件复制功能,将 source 文件复制到 destination 文件夹中,两个参数都是字符串格式.如果 destination 是一个文件名称,那么它会被用来当作复制后的文

  • Python的装饰器用法学习笔记

    在python中常看到在定义函数是使用@func. 这就是装饰器, 装饰器是把一个函数作为参数的函数,常常用于扩展已有函数,即不改变当前函数状态下增加功能. def run(): print "I'm run." 我有这么一个函数, 我想知道这个函数什么时候开始什么时候结束. 我应该这么写 def run(): print time.ctime() print "I'm run." print time.ctime() 但是如果不允许修改函数的话就需要装饰器了 de

  • 快速入门python学习笔记

    本篇不是教给大家如何去学习python,有需要详细深入学习的朋友可以参阅:Python基础语言学习笔记总结(精华)本文通过一周快速学习python入门知识总计了学习笔记和心得,分享给大家. ##一:语法元素 ###1.注释,变量,空格的使用 注释 单行注释以#开头,多行注释以''开头和结尾 变量 变量前面不需要声明数据类型,但是必须赋值 变量命名可以使用大小写字母,数字和下划线的组合,但是首字母只能是大小写字母或者下划线,不能使用空格 中文等非字母符号也可以作为名字 空格的使用 表示缩进关系的空

随机推荐