aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/platform
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2012-06-26 20:49:34 +1200
committerAldo Cortesi <aldo@nullcube.com>2012-06-26 20:49:34 +1200
commite6cdbefb3b741e0123ef76273566a5aaadc706b8 (patch)
tree1cfc97521ce9bcbea95ac94a5c9b0555968809b3 /libmproxy/platform
parentad893ad134cdc03f9152548e39a1dbce896cbee4 (diff)
downloadmitmproxy-e6cdbefb3b741e0123ef76273566a5aaadc706b8.tar.gz
mitmproxy-e6cdbefb3b741e0123ef76273566a5aaadc706b8.tar.bz2
mitmproxy-e6cdbefb3b741e0123ef76273566a5aaadc706b8.zip
Add transparent mode platform module for Linux.
Diffstat (limited to 'libmproxy/platform')
-rw-r--r--libmproxy/platform/__init__.py7
-rw-r--r--libmproxy/platform/linux.py11
2 files changed, 18 insertions, 0 deletions
diff --git a/libmproxy/platform/__init__.py b/libmproxy/platform/__init__.py
new file mode 100644
index 00000000..93423e91
--- /dev/null
+++ b/libmproxy/platform/__init__.py
@@ -0,0 +1,7 @@
+import sys
+
+resolver = None
+if sys.platform == "linux2":
+ import linux
+ resolver = linux.Resolver()
+
diff --git a/libmproxy/platform/linux.py b/libmproxy/platform/linux.py
new file mode 100644
index 00000000..d37f0fe8
--- /dev/null
+++ b/libmproxy/platform/linux.py
@@ -0,0 +1,11 @@
+import socket, struct
+
+# Python socket module does not have this constant
+SO_ORIGINAL_DST = 80
+
+class Resolver:
+ def original_addr(self, csock):
+ odestdata = csock.getsockopt(socket.SOL_IP, SO_ORIGINAL_DST, 16)
+ _, port, a1, a2, a3, a4 = struct.unpack("!HHBBBBxxxxxxxx", odestdata)
+ address = "%d.%d.%d.%d" % (a1, a2, a3, a4)
+ return address, port