python - Browsermob-Proxy - 通过 SSL 读取 XHR 的问题
问题描述
这是我的设置:
- 树莓派 3 B 型 Plus 修订版 1.3
- Linux 4.19.66-v7+ (RaspbianGNU/Linux 9 (stretch))
- 硒 3.141.0
- Browsermob-代理 2.1.4
- 铬 72.0.3626.121
- ChromeDriver 72.0.3626.121
- Python 3.5.3
我想在访问 https 页面时记录网络流量。到目前为止,它实际上工作得很好。问题是,browsermob 代理记录的包的内容是加密的。
这是我的代码
import pprint
import time
from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from browsermobproxy import Server
# Source: https://github.com/ArturSpirin/YouTube-WebDriver-Tutorials/blob/master/proxy/BmpProxy.py
class ProxyManger:
__BMP = "/usr/local/bin/browsermob-proxy-2.1.4/bin/browsermob-proxy"
def __init__(self):
self.__server = Server(ProxyManger.__BMP, options={'port': 8089})
self.__client = None
def start_server(self):
self.__server.start()
return self.__server
def start_client(self):
self.__client = self.__server.create_proxy(params={"trustAllServers": "true"})
return self.__client
@property
def client(self): return self.__client @property
def server(self):
return self.__server
# set virtual dispaly
display = Display(visible=0, size=(800, 600))
display.start()
# set browsermob-proxy
proxy = ProxyManger() server = proxy.start_server()
client = proxy.start_client()
client.new_har(url)
# set chrome options
opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server={}".format(client.proxy))
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--no-sandbox")
opts.add_argument("--ignore-certificate-errors")
browser = webdriver.Chrome(options=opts)
browser.get(url)
time.sleep(10)
pprint.pprint(client.har)
browser.quit()
server.stop()
display.stop()
到目前为止,该代码运行良好。我收到了我想要的包裹。
问题是加密的内容。我很清楚,browsermob-proxy 充当 MITM,由于端到端加密,无法读取这些包的内容。
...
'content': {'comment': '',
'encoding': 'base64',
'mimeType': 'application/json',
'size': 10493,
'text': 'IUQHACBHdln10z6SWSgCD9DkLZ0OUL9H9+NwllhRXLaI+7nOI023mVdkr5uCJV115AeolXUwyJUgklGU8z/0tYu/n/iuQCnAQJIG8JwmwaOcwRRLTheZ8abRSDFM/gQTqc6nP03QiSiJ/ZuxVZTkH/6SKKpir/SsMAt5+RMiPU+eJ3fN+U8JBjguGdWoNCGCrSqOw9gBeKORKcY4Ek014310aXl3BUqBnJ01VqPyeaJQasKY1hxRkkYTfFGAefuYQ5pbF1588ghm1VDPrdoKB1lERMVl/j0Y2HWEt+tbdHYe3t9fCrtSN+5Nq++ejmp/pg9UUuyVF8FlWvJiA6YB'},
...
我无头运行 Raspberry Pi。这意味着我只能通过 ssh 访问,而没有 x。根据Browsermob-proxy的 github 页面,可以在我的浏览器中添加证书。根据一些互联网研究,这通常通过 GUI 在 chrome 中工作。
在做了一些更多的研究之后,我发现了这个:
https://github.com/ThomasLeister/root-certificate-deployment
我跑了linux-browser-import.sh,但不幸的是这对此没有影响。
我的错误在哪里?有人可以解决我的问题吗?如何读取从 ssl 连接解密的包?
有没有其他已知的方法可以读取 xhr 包?
谢谢,迈克
解决方案
推荐阅读
- clojure - Clojure 无法解析 repl 中的符号
- javafx - 无法在 javafx 中的 tableview 中添加新行
- excel - 使用 selenium 在 excel 中实现浏览器(Chrome)自动化
- r - 在 RShiny 中上传 excel 文件
- java - Java JDBC 语法中的“连接”一词的含义
- uac - Win 10 1909 UAC 请求允许在提升的程序时间表上运行 Schtask
- python - 通过调用函数python3初始化静态变量
- spring - Spring Boot + MongoDB+创建集合
- python - 在python中,有没有办法删除分隔符的最后一个实例之后的所有文本?
- azure-data-factory - 如何在通过管道从 CSV 文件映射数据流派生列中传递列模式匹配的数组?