mitmproxy 通过路径更改服务器主机
mitmproxy change server host by path
我试图根据路径更改连接主机,context
中的问题,虽然它是在流创建时创建的,但它在请求之间共享。所以我在这里迷路了,这就是我尝试过的
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");
重要提示:
我不需要在 http 请求 headers 中更改 HOST:
。
我自己找到了原因和解决办法,
原因是保持活动状态,切换主机时需要关闭连接,否则您将无法进入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");
我试图根据路径更改连接主机,context
中的问题,虽然它是在流创建时创建的,但它在请求之间共享。所以我在这里迷路了,这就是我尝试过的
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");
重要提示:
我不需要在 http 请求 headers 中更改 HOST:
。
我自己找到了原因和解决办法,
原因是保持活动状态,切换主机时需要关闭连接,否则您将无法进入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");