Пример #1
0
 def original_addr(self, csock):
     peer = csock.getpeername()
     try:
         stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
     except subprocess.CalledProcessError:
         return None
     return pf.lookup(peer[0], peer[1], stxt)
Пример #2
0
 def original_addr(self, csock):
     peer = csock.getpeername()
     try:
         stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
     except subprocess.CalledProcessError:
         return None
     return pf.lookup(peer[0], peer[1], stxt)
Пример #3
0
 def original_addr(self, csock):
     peer = csock.getpeername()
     stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
     if "sudo: a password is required" in stxt:
         raise RuntimeError("Insufficient privileges to access pfctl. "
                            "See http://mitmproxy.org/doc/transparent/osx.html for details.")
     return pf.lookup(peer[0], peer[1], stxt)
Пример #4
0
 def original_addr(self, csock):
     peer = csock.getpeername()
     stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
     if "sudo: a password is required" in stxt:
         raise RuntimeError(
             "Insufficient privileges to access pfctl. "
             "See http://mitmproxy.org/doc/transparent/osx.html for details.")
     return pf.lookup(peer[0], peer[1], stxt)
Пример #5
0
    def original_addr(self, csock):
        peer = csock.getpeername()
        try:
            stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError as e:
            if "sudo: a password is required" in e.output:
                insufficient_priv = True
            else:
                raise RuntimeError("Error getting pfctl state: " + repr(e))
        else:
            insufficient_priv = "sudo: a password is required" in stxt

        if insufficient_priv:
            raise RuntimeError(
                "Insufficient privileges to access pfctl. "
                "See http://mitmproxy.org/doc/transparent/osx.html for details.")
        return pf.lookup(peer[0], peer[1], stxt)
Пример #6
0
    def original_addr(self, csock):
        peer = csock.getpeername()
        try:
            stxt = subprocess.check_output(self.STATECMD,
                                           stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError as e:
            if "sudo: a password is required" in e.output:
                insufficient_priv = True
            else:
                raise RuntimeError("Error getting pfctl state: " + repr(e))
        else:
            insufficient_priv = "sudo: a password is required" in stxt

        if insufficient_priv:
            raise RuntimeError(
                "Insufficient privileges to access pfctl. "
                "See http://docs.mitmproxy.org/en/latest/transparent/osx.html for details."
            )
        return pf.lookup(peer[0], peer[1], stxt)
Пример #7
0
    structures returned, and compiling userspace tools to test and work with
    this turns out to be a pain in the ass. Parsing pfctl output is short,
    simple, and works.

    Note: Also Tested with FreeBSD 10 pkgng Python 2.7.x.
    Should work almost exactly as on Mac OS X and except with some changes to
    the output processing of pfctl (see pf.py).
"""


class Resolver(object):
    STATECMD = ("sudo", "-n", "/sbin/pfctl", "-s", "state")

    def original_addr(self, csock):
        peer = csock.getpeername()
        try:
            stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError, e:
            if "sudo: a password is required" in e.output:
                insufficient_priv = True
            else:
                raise RuntimeError("Error getting pfctl state: " + repr(e))
        else:
            insufficient_priv = "sudo: a password is required" in stxt

        if insufficient_priv:
            raise RuntimeError(
                "Insufficient privileges to access pfctl. "
                "See http://mitmproxy.org/doc/transparent/osx.html for details.")
        return pf.lookup(peer[0], peer[1], stxt)