diff options
Diffstat (limited to 'libmproxy')
-rw-r--r-- | libmproxy/flow.py | 14 | ||||
-rw-r--r-- | libmproxy/proxy.py | 9 | ||||
-rw-r--r-- | libmproxy/version.py | 2 |
3 files changed, 19 insertions, 6 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 96103ddb..44dc57ae 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -288,7 +288,9 @@ class Request(HTTPMsg): (or None, if request didn't results SSL setup) """ - def __init__(self, client_conn, httpversion, host, port, scheme, method, path, headers, content, timestamp_start=None, timestamp_end=None, tcp_setup_timestamp=None, ssl_setup_timestamp=None): + def __init__( + self, client_conn, httpversion, host, port, scheme, method, path, headers, content, timestamp_start=None, + timestamp_end=None, tcp_setup_timestamp=None, ssl_setup_timestamp=None, ip=None): assert isinstance(headers, ODictCaseless) self.client_conn = client_conn self.httpversion = httpversion @@ -299,6 +301,7 @@ class Request(HTTPMsg): self.close = False self.tcp_setup_timestamp = tcp_setup_timestamp self.ssl_setup_timestamp = ssl_setup_timestamp + self.ip = ip # Have this request's cookies been modified by sticky cookies or auth? self.stickycookie = False @@ -364,6 +367,7 @@ class Request(HTTPMsg): self.timestamp_end = state["timestamp_end"] self.tcp_setup_timestamp = state["tcp_setup_timestamp"] self.ssl_setup_timestamp = state["ssl_setup_timestamp"] + self.ip = state["ip"] def _get_state(self): return dict( @@ -379,7 +383,8 @@ class Request(HTTPMsg): timestamp_start = self.timestamp_start, timestamp_end = self.timestamp_end, tcp_setup_timestamp = self.tcp_setup_timestamp, - ssl_setup_timestamp = self.ssl_setup_timestamp + ssl_setup_timestamp = self.ssl_setup_timestamp, + ip = self.ip ) @classmethod @@ -397,7 +402,8 @@ class Request(HTTPMsg): state["timestamp_start"], state["timestamp_end"], state["tcp_setup_timestamp"], - state["ssl_setup_timestamp"] + state["ssl_setup_timestamp"], + state["ip"] ) def __hash__(self): @@ -729,6 +735,8 @@ class Response(HTTPMsg): ) if self.content: headers["Content-Length"] = [str(len(self.content))] + elif 'Transfer-Encoding' in self.headers: + headers["Content-Length"] = ["0"] proto = "HTTP/%s.%s %s %s"%(self.httpversion[0], self.httpversion[1], self.code, str(self.msg)) data = (proto, str(headers)) return FMT%data diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index 6114922e..3098aff4 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -231,6 +231,9 @@ class ProxyHandler(tcp.BaseHandler): sc.rfile.reset_timestamps() try: tsstart = utils.timestamp() + peername = sc.connection.getpeername() + if peername: + request.ip = peername[0] httpversion, code, msg, headers, content = http.read_response( sc.rfile, request.method, @@ -302,13 +305,15 @@ class ProxyHandler(tcp.BaseHandler): def find_cert(self, cc, host, port, sni): if self.config.certfile: - return certutils.SSLCert.from_pem(file(self.config.certfile, "r").read()) + with open(self.config.certfile, "rb") as f: + return certutils.SSLCert.from_pem(f.read()) else: sans = [] if not self.config.no_upstream_cert: conn = self.get_server_connection(cc, "https", host, port, sni) sans = conn.cert.altnames - host = conn.cert.cn.decode("utf8").encode("idna") + if conn.cert.cn: + host = conn.cert.cn.decode("utf8").encode("idna") ret = self.config.certstore.get_cert(host, sans, self.config.cacert) if not ret: raise ProxyError(502, "Unable to generate dummy cert.") diff --git a/libmproxy/version.py b/libmproxy/version.py index 02d68411..3140e03a 100644 --- a/libmproxy/version.py +++ b/libmproxy/version.py @@ -1,4 +1,4 @@ -IVERSION = (0, 9, 2) +IVERSION = (0, 10) VERSION = ".".join(str(i) for i in IVERSION) NAME = "mitmproxy" NAMEVERSION = NAME + " " + VERSION |