通过SSL读取XHR的BrowsermobProxy问题

2024-04-26 01:06:40 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的设置:

  • Raspberry Pi 3 B型及1.3版
  • Linux 4.19.66-v7+(RaspbianGNU/Linux 9(扩展))
  • 硒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代理充当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'},
...

我无头经营覆盆子皮。这意味着我只能通过ssh和no x访问。根据Browsermob-proxy的github页面,可以将certificate添加到我的浏览器中。 根据一些互联网研究,这通常通过GUI在chrome中工作

经过进一步研究,我发现:

https://github.com/ThomasLeister/root-certificate-deployment

我运行了linux-browser-import.sh,但不幸的是,这对这没有任何影响

我的错在哪里?有人能解决我的问题吗?如何读取从ssl连接解密的包

是否有其他已知的方法可以读取xhr包

谢谢, 迈克


Tags: fromimportselfbrowserclientaddreturnserver