Это мои настройки:
- Raspberry Pi 3 Model B Plus Rev 1.3
- Linux 4.19.66-v7 + (RaspbianGNU / Linux 9 (растянуть))
- Селен 3.141.0
- Browsermob-Proxy 2.1.4
- Хром 72.0.3626.121
- ChromeDriver 72.0.3626.121
- Python 3.5.3
Я хотел бы записать трафик сети c при посещении страницы 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'},
...
Я запускаю Raspberry Pi без головы. Это означает, что у меня есть доступ только через s sh и без x. Согласно странице github Browsermob-proxy , в мой браузер можно добавить сертификат . Согласно некоторым исследованиям inte rnet, это обычно работает в chrome через GUI.
. Проведя дополнительное исследование, я обнаружил следующее:
https://github.com/ThomasLeister/root-certificate-deployment
Я запустил linux -browser-import. sh, но, к сожалению, это не повлияло на это.
Где моя ошибка? У кого-нибудь есть решение моей проблемы? Как можно читать дешифрованные пакеты из ssl-соединения?
Есть ли другой способ, как я могу читать пакеты xhr?
Спасибо, Майк