6

i'、スクリプト mitm プロキシ ( http://mitmproxy.org/index.html ) を使用して、HTTP および HTTPS 要求と応答を IP に従ってファイルに書き込みます (その後、各クライアントは自身の要求\応答にアクセスできます)。モバイル。

今のところわかる限り、フィドラーで取得するように、str(Flow.request) または repr(Flow.request) を使用して応答 \ 要求の「生の」出力を取得することはできません。それを再構築する必要があります。 Request オブジェクトと Response オブジェクトの内部データから。

誰もがより良い方法を知っていますか? 私は使用しています:

def response(ScriptContext, Flow):
    Flow.request....
    Flow.response....

傍受されたリクエストまたはレスポンスにアクセスするために、私は何も変更せず、観察するだけです。今のところ、プロキシは 8080 にあり、後で 80 と 443 で透過プロキシになります。以前に誰かがそれを行ったことがあれば、情報を共有できれば幸いです。

4

2 に答える 2

3

いくつかのこと。まず、str(flow.request.headers) や request.httpversion などを使用して生の応答を自分で作成できます。ただし、 _assemble() と _assembly_headers() はうまく機能しているようです。

だから基本的に:

def request(context, flow):
req = flow.request;
try:
    print("Request: -----------------");
    print(req._assemble());
    print("--------------------------");
except Exception as ee:
    print(str(ee));

def response(context, flow):
    res = flow.response;
    try:
        print("Response: -----------------");
    print(res._assemble());

    if res.content:
        size = len(res.content);
        size  = min(size, 20);
        if res.content[0:size] != res.get_decoded_content()[0:size]:
            print("\n\n");
            print(res.get_decoded_content());
    print("--------------------------");
except Exception as ee:
    print(str(ee));

デコードされた本文がデコードされていないものと似ていないかどうかを見ることができるように (ただし、gzip コンテンツ タイプを確認できます)、デコードされたメッセージも出力しています。これは現在の日付に従ってファイルに保存する必要があり、各ファイルは request\response.client_conn オブジェクトから取得したクライアント IP に基づいて名前が付けられます。これで私の問題はほとんど解決しました。フィドラーでいくつかチェックすると、リクエストが後で再現可能であることがわかります。これはまさに私が必要としていたものです。

于 2014-02-09T20:26:02.983 に答える