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
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()
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
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 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()
def __init__(self, use_tor=False): self.use_tor = use_tor if use_tor: self._tor = TorClient() self.new()