Mitmproxy详细教程及二级代理

简介-参考

windows不支持mitmproxy的控制台的接口输出,但是可以使用mitmdump和mitmweb

在这里插入图片描述

- 版本参考 -

安装

Linux下的安装

  • 下载之后,需要解压并将其配置环境变量中:
  • tar -zxvf mitmproxy.....-linux.tar.gz 解压
  • sodu mv mitmproxy mitmdump mitmweb /user/bin 配置环境
  • 这样就可以将3个可执行文件移动了/usr/bin目录。而一般情况下,/usr/bin目录的已经配置在环境变量下,就可以直接调用这3个工具

Mac下的安装

  • 直接使用 brew install mitmproxy

安装数字证书

运行mitdump命令即可 注意:在当前目录生成.mimtproxy文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAXyyQda-1587985997338)(1483FF23990B41E9BAE1A41FE61C6B4A)]

windows

双击mitmproxy-ca.p12安装到“受信任的根证书颁发机构”即可

mac

双击mitmproxy-ca-cert.pem选择 “始终信任”

android and ios

  • mitmproxy-ca-cert.pem证书发送到手机上,安装证书
  • 选择与pc端相同的wifi进行连接,配置pc端的ip选择和8080端口即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KSfKJe6-1587985997339)(9963B582E91E4A868DFA587FA571A184)]

web安装

  • cmd:mitmdump --mode reverse:http://mitm.it/ -p 8080
  • 打开浏览器输入localhost:8080 下载对应的安装包即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TDXz5qSJ-1587985997340)(5335AEBBC1D44B59A4452984393F6B5D)]

操作命令

pip install mitmproxy

启动

  • 启动命令mitmporxy 默认在8080端口开启 windows不支持
  • 启动视图监听命令 mitmweb
  • 启动监听命令mimtdump默认在8080端口开启

参数

  • -s 在当前目录下启动文件 例mitmdump -s script.py
  • -p 修改默认端口 例mitmweb -p 8888
  • -w 把截获的数据保存到文件 例mitmdump -w file_name

拦截pc请求设置

方式一 【推荐】:
给本地计算机设置代理即可,这样就可以监听整个电脑请求

方式二 【拦截本地浏览器】:
cmd:"C:\Users\zsjw_pachong01\AppData\Local\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
这里把谷歌的路径替换一下就可以

方式三 【拦截本地浏览器】:
在谷歌商店下载Proxy SwitchyOmega插件,并进行设置即可(如下图)

在这里插入图片描述

示例代码

拦截文件 scripy.py

def request(flow):
    flow.request.headers['User-Agent'] = 'MitmProxy'
    print(flow.request.headers)

启动拦截文件
mitmdump -s script.py -p 8888

爬虫文件 spider.py

# -*- coding: utf-8 -*-

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument(r'--proxy-server=http://localhost:8888')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://httpbin.org/get')

效果如下

配置二级代理

由于平台限制,软件看图吧

方法一

修改X2yyy配置文件

采用的X2yyy,命令行启动代理

在这里插入图片描述
修改config文件,注意查看下面的参数:
这里请求的类型可以是socks或者是http,如果不能fq说明请求类型不对,自己试试哪个可行用哪个!

在这里插入图片描述

双击运行X2yyy.exe即可,测试google成功

在这里插入图片描述

拦截文件

import mitmproxy.http
from mitmproxy import ctx


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow):
        # if flow.request.method == "CONNECT":
        #     # If the decision is done by domain, one could also modify the server address here.
        #     # We do it after CONNECT here to have the request data available as well.
        #     return
        address = ('localhost', 10808)
        if flow.live:
            flow.live.change_upstream_proxy_server(address)  # type: ignore



addons = [
    Counter()
]

启动参数:mitmdump --mode upstream:http://localhost:10808/ -s xxxx.py
注意:
拦截文件的参数:address = (‘localhost’, 10808) 必须跟X2yyy的运行端口一致
启动参数:upstream:http://localhost:10808 必须也为X2yyy的运行端口

启动文件

# -*- coding: utf-8 -*-
'''
@author: pylemon
@time: 2019/12/2 18:20
'''

from selenium import webdriver

# 添加 mitmporxy 拦截端口
options = webdriver.ChromeOptions()
options.add_argument(r'--proxy-server=http://127.0.0.1:8080')
driver = webdriver.Chrome(chrome_options=options)

driver.get('https://www.google.com')

注意:
这里代理的端口必须为mitmproxy的端口proxy-server=http://127.0.0.1:8080

在这里插入图片描述

方法二

这里使用Sxx软件实现二级代理

mitmdump 启动文件
注意
这里import socks 可能会报错 需要手动导入包源文件
方式一:官网 下载地址
方式二:源文件下载(记得看源文件说明)
文件保存路径:python\Lib\site-packages

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "localhost", 1080)
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "localhost", 1080)
socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, "localhost", 1080)

socket.socket = socks.socksocket
def request(flow):
    # proxy = ('localhost', 1080)
    # flow.live.change_upstream_proxy_server(proxy)
    pass

测试代码文件
test_proxy.py

# -*- coding: utf-8 -*-
from selenium import webdriver

options = webdriver.ChromeOptions()
# options.add_argument('--proxy-server={}'.format('http://default-upstream-proxy.local:8080'))
options.add_argument('--proxy-server={}'.format('http://127.0.0.1:8080'))
driver = webdriver.Chrome(chrome_options=options)

driver.get('https://httpbin.org/get')

效果如下

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pylemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值