文章目录
简介-参考
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文件
windows
双击mitmproxy-ca.p12
安装到“受信任的根证书颁发机构”即可
mac
双击mitmproxy-ca-cert.pem
选择 “始终信任”
android and ios
- 把
mitmproxy-ca-cert.pem
证书发送到手机上,安装证书 - 选择与pc端相同的wifi进行连接,配置pc端的ip选择和8080端口即可
web安装
- cmd:
mitmdump --mode reverse:http://mitm.it/ -p 8080
- 打开浏览器输入localhost:8080 下载对应的安装包即可
操作命令
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')
效果如下