aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/platform/pf.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/platform/pf.py')
-rw-r--r--mitmproxy/libmproxy/platform/pf.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/platform/pf.py b/mitmproxy/libmproxy/platform/pf.py
new file mode 100644
index 00000000..97a4c192
--- /dev/null
+++ b/mitmproxy/libmproxy/platform/pf.py
@@ -0,0 +1,24 @@
+import sys
+
+
+def lookup(address, port, s):
+ """
+ Parse the pfctl state output s, to look up the destination host
+ matching the client (address, port).
+
+ Returns an (address, port) tuple, or None.
+ """
+ spec = "%s:%s" % (address, port)
+ for i in s.split("\n"):
+ if "ESTABLISHED:ESTABLISHED" in i and spec in i:
+ s = i.split()
+ if len(s) > 4:
+ if sys.platform.startswith("freebsd"):
+ # strip parentheses for FreeBSD pfctl
+ s = s[3][1:-1].split(":")
+ else:
+ s = s[4].split(":")
+
+ if len(s) == 2:
+ return s[0], int(s[1])
+ raise RuntimeError("Could not resolve original destination.")