Изменение пакета ответа HTTPS на лету с помощью mitmproxy

Я пытаюсь реализовать дополнительный скрипт mitmproxy, чтобы подделать определенные данные пакета https, которые, кстати, расшифровываются на лету с помощью инъекции сертификата mitmproxy.

Я следую этому ответу о переполнении стека на довольно похожий вопрос, а также this tutorial из документации mitmproxy, но пока безуспешно.

Пакет, на который я нацелен, исходит от https://api.example.com/api/v1/user/info.
Вот весь скрипт python, который я написал, чтобы подделать эти пакетные данные, на основе вышеупомянутых источников:

from mitmproxy import ctx

class RespModif:
    def _init_(self):
        self.num = 0

    def response(self, flow):
        ctx.log.info("RespModif triggered")

        if flow.request.url == "https://api.example.com/api/v1/user/info":
            ctx.log.info("RespModif triggered -- In the if statement")   
            self.num = self.num + 1
            ctx.log.info("RespModif -- Proceeded to %d response modifications "
                         "of the targetted URLs" % self.num)

addons = [
    RespModif()
]

Просматривая журнал событий, я вижу, что первая информация журнала («RespModif triggered») передается в журнал, но две другие данные журнала (выполняемые из инструкции if ) никогда не сообщаются, а это означает, что я думаю, что инструкция if никогда не выполняется.

Что-то не так с моим кодом?
Как добиться успешного выполнения инструкции if?

PS: целевой URL определенно правильный, к тому же я использую его с зарегистрированной учетной записью из клиентского приложения, которое прослушивается с помощью mitmproxy.


person programmersn    schedule 14.08.2018    source источник


Ответы (1)


Вы пробовали использовать атрибут pretty_url?
Примерно так:

if flow.request.pretty_url == "https://api.example.com/api/v1/user/info":
    ....

Атрибут pretty_url обрабатывает полное доменное имя, тогда как url работает только с соответствующим IP-адресом.
Также регистрация содержимого pretty_url должна позволить увидеть, какой именно URL-адрес проходит, и дать больше наглядности того, что на самом деле делает код.

person tanaydin    schedule 15.08.2018
comment
Да, я только что попробовал, но, к сожалению, тоже не работает ... Я пробовал и с другими действующими URL-адресами, и оператор if с ними тоже не работает! Как такое возможно ?? - person programmersn; 15.08.2018
comment
вы можете отладить его, напечатав flow.request.url или flow.request. pretty_url, чтобы увидеть точный URL. - person tanaydin; 15.08.2018
comment
Ваш совет, сэр, заставил меня наконец это осуществить !! Большое спасибо, но, пожалуйста, добавьте свой комментарий к ответу и объясните также, как pretty_url обрабатывает доменное имя, а не url, который имеет дело только с IP-адресом, поэтому я могу принять ответ! - person programmersn; 15.08.2018
comment
Глубоко не знаю :) Просто поискал немного и дал небольшой совет ... - person tanaydin; 15.08.2018