2016-07-08 5 views
1

パスに応じて接続ホストを変更しようとしていますが、contextの問題は、フロー作成時に作成されますがリクエスト間で共有されます。私はHTTPリクエストヘッダにHOST:を変更しないようにする必要がありmitmproxyサーバホストを経路別に変更する

:だから私は、これは私が

import re 
import os 
os.environ['PAGER'] = 'cat' 
from libmproxy.models import HTTPResponse 
from netlib.http import Headers 
from netlib.tcp import Address 
def request(context, flow): 
# flow.request.path 
     context.log("server %s " % repr(flow.server_conn) ,"info"); 
     if flow.request.host.endswith("google.com"): 
       if re.match(flow.request.path, "/"): 
         context.address = "10.0.0.15"; 
       else: 
         context.address = "google.com" 

def serverconnect(context, server_conn): 
     if hasattr(context, 'address'): 
       context.log("server changed from %s" % (repr(server_conn)) ,"info"); 
       server_conn.address = Address(address=(context.address, server_conn.address.port)) 
       context.log("server changed to %s" % (repr(server_conn)) ,"info"); 
     else: 
       context.log("server NOT changed %s" % repr(server_conn),"info"); 

重要な注意をしようとしたもので、ここでは失われました。

答えて

1

そうでなければ、serverconnectルーチンに行き、最後に接続したホストを使用されることはありませんので、私は

理由はキープアライブで、その理由と解決策自分自身を発見した、あなたは、あなたがホストを切り替えたときに接続をクローズする必要があります。

import re 
import os 
os.environ['PAGER'] = 'cat' 
from libmproxy.models import HTTPResponse 
from netlib.http import Headers 
from netlib.tcp import Address 
def request(context, flow): 
# flow.request.path 
     context.log("server %s " % repr(flow.server_conn) ,"info"); 
     if flow.request.host.endswith("google.com"): 
       if re.match(flow.request.path, "/"): 
         context.address = "10.0.0.15"; 
       else: 
         context.address = "google.com" 
#here is solution 
       if repr(server_conn.get_state().get('timestamp_start')) != 'None': 
         print(server_conn.get_state().get('timestamp_start')) 
         server_conn.close() 


def serverconnect(context, server_conn): 
     if hasattr(context, 'address'): 
       context.log("server changed from %s" % (repr(server_conn)) ,"info"); 
       server_conn.address = Address(address=(context.address, server_conn.address.port)) 
       context.log("server changed to %s" % (repr(server_conn)) ,"info"); 
     else: 
       context.log("server NOT changed %s" % repr(server_conn),"info"); 
関連する問題