aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsmill <smill@cuckoo.sh>2016-09-05 10:49:39 +0000
committersmill <smill@cuckoo.sh>2016-09-05 10:49:39 +0000
commit2ecd89fc51676a98c25a80857584923aae9248a1 (patch)
tree377bf4b51642fb112d07ec18604eb9e80501462c
parente278ce6455b63eb9da61f0e92d7f25cbdf881d8b (diff)
downloadmitmproxy-2ecd89fc51676a98c25a80857584923aae9248a1.tar.gz
mitmproxy-2ecd89fc51676a98c25a80857584923aae9248a1.tar.bz2
mitmproxy-2ecd89fc51676a98c25a80857584923aae9248a1.zip
Made it possible to modify the server_conn.connection attribute,
using the serverconnect stub.
-rw-r--r--mitmproxy/models/connections.py2
-rw-r--r--netlib/tcp.py9
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)