Beispiel #1
0
class TorRequests:
    def __init__(self, hops_count=3, headers=None, auth_data=None):
        self._hops_count = hops_count
        self._headers = dict(headers) if headers else {}
        self._auth_data = dict(auth_data) if auth_data else auth_data

    def __enter__(self):
        """Create TorClient and connect to guard node."""
        self._tor = TorClient(auth_data=self._auth_data)
        self._guard = self._tor.get_guard()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """Close guard connection."""
        self._guard.close()
        self._tor.close()

    def send(self, method, url, data=None, **kwargs):
        with self.get_session() as s:
            r = Request(method, url, data, **kwargs)
            return s.send(r.prepare())

    @contextmanager
    def get_session(self, retries=0):
        adapter = TorHttpAdapter(self._guard,
                                 self._hops_count,
                                 retries=retries)
        with Session() as s:
            s.headers.update(self._headers)
            s.mount('http://', adapter)
            s.mount('https://', adapter)
            yield s
Beispiel #2
0
def main():
    parser = ArgumentParser(description=__doc__,
                            prog=os.path.basename(__file__))
    parser.add_argument('-i',
                        '--ip',
                        default='127.0.0.1',
                        help='ip address to bind to')
    parser.add_argument('-p',
                        '--port',
                        default=1050,
                        type=int,
                        help='bind port')
    parser.add_argument('--hops', default=3, help='hops count', type=int)
    parser.add_argument('-v',
                        '--verbose',
                        help='enable verbose output',
                        action='store_true')
    args = parser.parse_args()

    register_logger(args.verbose)

    tor = TorClient()
    with tor.create_circuit(args.hops) as circuit, \
            SocksServer(circuit, args.ip, args.port) as socks_serv:
        socks_serv.start()
Beispiel #3
0
class Dark_Session(object):
    def __init__(self, use_tor=False):
        self.use_tor = use_tor
        if use_tor:
            self._tor = TorClient()
        self.new()

    def new(self):
        if self.use_tor:
            self._guard = self._tor.get_guard()
            adapter = TorHttpAdapter(self._guard, 3, retries=0)
            self.session = Session()
            self.session.mount('http://', adapter)
            self.session.mount('https://', adapter)
        else:
            self.session = Session()

    def get_ip(self):
        return self.session.get("http://httpbin.org/ip").json()["origin"]

    def post(self, *args, **kwargs):
        return self.session.post(*args, **kwargs)

    def get(self, *args, **kwargs):
        return self.session.get(*args, **kwargs)

    def close(self):
        self.session.close()
        if self.use_tor:
            self._guard.close()
        self.session = None
        self._guard = None
Beispiel #4
0
 def __enter__(self):
     """Create TorClient and connect to guard node."""
     self._tor = TorClient(auth_data=self._auth_data)
     self._guard = self._tor.get_guard()
     return self
Beispiel #5
0
 def run(self):
     client = TorClient()
     with client.create_circuit(self.hops) as circuit:
         with SocksServer(circuit, self.ip, self.port) as socks_serv:
             socks_serv.start()
Beispiel #6
0
 def __init__(self, use_tor=False):
     self.use_tor = use_tor
     if use_tor:
         self._tor = TorClient()
     self.new()