aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/flow.py14
-rw-r--r--libmproxy/proxy.py9
-rw-r--r--libmproxy/version.py2
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