From 2ecd89fc51676a98c25a80857584923aae9248a1 Mon Sep 17 00:00:00 2001 From: smill Date: Mon, 5 Sep 2016 10:49:39 +0000 Subject: [PATCH] Made it possible to modify the server_conn.connection attribute, using the serverconnect stub. --- mitmproxy/models/connections.py | 2 +- netlib/tcp.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mitmproxy/models/connections.py b/mitmproxy/models/connections.py index 2cab6e4af..a98711a15 100644 --- a/mitmproxy/models/connections.py +++ b/mitmproxy/models/connections.py @@ -112,7 +112,7 @@ class ServerConnection(tcp.TCPClient, stateobject.StateObject): Attributes: address: Remote address. Can be both a domain or an IP address. ip_address: Resolved remote IP address. - source_address: Local IP address + source_address: Local IP address or client's source IP address. ssl_established: True if TLS is established, False otherwise cert: The certificate presented by the remote during the TLS handshake sni: Server Name Indication sent by the proxy during the TLS handshake diff --git a/netlib/tcp.py b/netlib/tcp.py index 1fd0164fb..c3b8a4076 100644 --- a/netlib/tcp.py +++ b/netlib/tcp.py @@ -729,10 +729,15 @@ class TCPClient(_Connection): def connect(self): try: - connection = socket.socket(self.address.family, socket.SOCK_STREAM) + if not self.connection: + connection = socket.socket(self.address.family, socket.SOCK_STREAM) + else: + connection = self.connection + if self.spoof_source_address: try: - connection.setsockopt(socket.SOL_IP, 19, 1) + if not connection.getsockopt(socket.SOL_IP, 19): + connection.setsockopt(socket.SOL_IP, 19, 1) except socket.error as e: raise exceptions.ProtocolException( "Failed to spoof the source address: " + e.strerror)