From 2ecd89fc51676a98c25a80857584923aae9248a1 Mon Sep 17 00:00:00 2001 From: smill Date: Mon, 5 Sep 2016 10:49:39 +0000 Subject: 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 2cab6e4a..a98711a1 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 1fd0164f..c3b8a407 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) -- cgit v1.2.3