diff options
author | jakob <jakob@jakobstendahl.no> | 2022-09-24 14:44:07 +0000 |
---|---|---|
committer | jakob <jakob@jakobstendahl.no> | 2022-09-24 14:44:07 +0000 |
commit | 5569f3620b3479a8817928711e1dc744e6702067 (patch) | |
tree | 23bb728312a8c42aa1c1ad29863c2a4d3c11fb2e | |
parent | 60f5e7148bfe6815eb295e09a6f778b1f53b01eb (diff) | |
download | tor-site-tester-5569f3620b3479a8817928711e1dc744e6702067.tar.gz tor-site-tester-5569f3620b3479a8817928711e1dc744e6702067.zip |
flake
-rw-r--r-- | res.csv | 12 | ||||
-rw-r--r-- | res1.csv | 12 | ||||
-rw-r--r-- | sites.txt | 12 | ||||
-rw-r--r-- | term.py | 16 | ||||
-rw-r--r-- | tor-site-tester.py | 52 |
5 files changed, 72 insertions, 32 deletions
@@ -0,0 +1,12 @@ +site, gb, ch, us, ru +https://kode24.no, 200, 200, 200, 200 +https://disneyplus.com, 200, 200, 200, 200 +https://nrk.no, 200, 200, 200, 200 +https://unixmen.com, 403, 403, 403, 403 +https://facebook.com, 200, 200, 200, 200 +https://airbnb.com, 403, 403, 403, 403 +https://hotels.com, 403, 403, 403, 403 +https://sas.no, 200, 403, 200, 200 +https://sas.com, 200, 200, 200, 200 +https://overleaf.com, 200, 200, 200, 200 +https://ifinavet.no, 200, 200, 200, 200 diff --git a/res1.csv b/res1.csv new file mode 100644 index 0000000..e807c91 --- /dev/null +++ b/res1.csv @@ -0,0 +1,12 @@ +site, , time, cn, cn time, no, no time, gb, gb time, de, de time, us, us time, ru, ru time, lu, lu time +https://kode24.no, 200, 0.10212, , , , , , , , , , , , , , +https://disneyplus.com, 200, 1.14407, , , , , , , , , , , , , , +https://nrk.no, 200, 0.36484, , , , , , , , , , , , , , +https://unixmen.com, 200, 1.47243, , , , , , , , , , , , , , +https://facebook.com, 200, 0.34020, , , , , , , , , , , , , , +https://airbnb.com, 200, 1.11953, , , , , , , , , , , , , , +https://hotels.com, 200, 1.55315, , , , , , , , , , , , , , +https://sas.no, 200, 0.44785, , , , , , , , , , , , , , +https://sas.com, 200, 2.08292, , , , , , , , , , , , , , +https://overleaf.com, 200, 0.37511, , , , , , , , , , , , , , +https://ifinavet.no, 200, 2.45585, , , , , , , , , , , , , , diff --git a/sites.txt b/sites.txt new file mode 100644 index 0000000..2a07054 --- /dev/null +++ b/sites.txt @@ -0,0 +1,12 @@ +https://kode24.no +https://disneyplus.com +https://nrk.no +https://unixmen.com +https://facebook.com +https://airbnb.com +https://hotels.com +https://sas.no +https://sas.com +https://overleaf.com +https://ifinavet.no + @@ -1,8 +1,8 @@ -from threading import Thread, Lock -from time import sleep -from datetime import datetime -from queue import Queue import sys +from datetime import datetime +from threading import Lock, Thread +from time import sleep + class Term: spinner = ["/", "-", "\\", "|", "/", "-", "\\", "|"] @@ -37,7 +37,7 @@ class Term: Term.write(f"] {Term._process_name}") if Term._process_state is not None: Term.write(f"\u001b[35m - {Term._process_state}") - + Term.write("\u001b[0m") Term.flush() @@ -48,7 +48,7 @@ class Term: def write(s: str): Term.term.write(s) @staticmethod - def mov_ls(): Term.write(f"\u001b[2K\r") + def mov_ls(): Term.write("\u001b[2K\r") @staticmethod def newln(): Term.write("\n") @@ -65,7 +65,7 @@ class Term: Term.write(logmsg) Term.newln() Term.flush() - + @staticmethod def proc_start(procname: str, spin: bool = False): with Term._print_lock: @@ -88,7 +88,7 @@ class Term: Term.log(f"State for unknown process: {state}") @staticmethod - def proc_end(msg = None, result=0): + def proc_end(msg=None, result=0): """ Result 0=success, 1=error, 2=warning. """ colour = ["\u001b[32m", "\u001b[31m", "\u001b[33m"] with Term._print_lock: diff --git a/tor-site-tester.py b/tor-site-tester.py index 912117d..7ce28ed 100644 --- a/tor-site-tester.py +++ b/tor-site-tester.py @@ -1,12 +1,13 @@ -import requests -from stem import Signal, StreamStatus -from stem.control import Controller, EventType -import stem.process -from dataclasses import dataclass -from typing import Any -from argparse import ArgumentParser import functools +from argparse import ArgumentParser +from dataclasses import dataclass from time import perf_counter, sleep +from typing import Any + +import requests +import stem.process +from stem import StreamStatus +from stem.control import Controller, EventType from term import Term @@ -26,20 +27,21 @@ class TORProc: def __post_init__(self): self.last_exit_node = None self.controller = Controller.from_port(port=self.port + 2000) - self.controller.connect() + self.controller.connect() self.controller.authenticate() self.stream_listener = functools.partial(self.stream_event, self.controller) self.controller.add_event_listener(self.stream_listener, EventType.STREAM) def stream_event(self, controller, event): - if event.status == StreamStatus.SUCCEEDED:# and (event.circ_id == 1): + if event.status == StreamStatus.SUCCEEDED: # and (event.circ_id == 1): try: circ = controller.get_circuit(event.circ_id) exit_fingerprint = circ.path[-1][0] exit_relay = controller.get_network_status(exit_fingerprint) locale = controller.get_info("ip-to-country/%s" % exit_relay.address, 'unknown') self.last_exit_node = (locale, exit_relay.address, exit_relay.fingerprint, exit_relay.nickname) - except Exception as e: Term.log(e) + except Exception as e: + Term.log(e) @property def proxies(self): @@ -66,44 +68,42 @@ class TORProc: *self.last_exit_node ) status = 1 - if remote_info[1] and local_info[1]: status = 0 - elif (remote_info[1] is None) and local_info[1]: status = 2 + if remote_info[1] and local_info[1]: + status = 0 + elif (remote_info[1] is None) and local_info[1]: + status = 2 return status, remote_info, local_info class TORConnections: - - def __init__(self, start_port = 7000): + def __init__(self, start_port=7000): self._tor_procs = [] self._start_port = start_port self._cport = self._start_port - def start_tor_proc(self, exit_node): port = self._cport self._cport += 1 torproc = stem.process.launch_tor_with_config( - config = { + config={ "ControlPort": str(port + 2000), "SocksPort": str(port), "ExitNodes": "{" + exit_node + "}", "DataDirectory": "tordata/tor" + str(port) }, - init_msg_handler = Term.proc_state, - take_ownership = True + init_msg_handler=Term.proc_state, + take_ownership=True ) Term.proc_state("Attaching controller to TOR process") torproc = TORProc(torproc, port, exit_node) self._tor_procs.append(torproc) return torproc - def close_tor_procs(self): for proc in self._tor_procs: proc.torproc.kill() - def get_country_proc(self, exit_node): for proc in self._tor_procs: if proc.exit_node == exit_node: @@ -114,10 +114,13 @@ class TORConnections: del self._tor_procs[self._tor_procs.index(torproc)] -def do_request(url, proxies = None): +def do_request(url, proxies=None): t1 = perf_counter() + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:104.0) Gecko/20100101 Firefox/104.0", + } try: - res = requests.get(url, proxies=proxies) + res = requests.get(url, proxies=proxies, headers=headers) return (res.status_code, perf_counter() - t1) except requests.ConnectionError as e: return (e, perf_counter() - t1) @@ -144,7 +147,7 @@ def test_sites(tor: TORConnections, sites: list[str], countries: list[str]): Term.proc_end() tor.remove_tor_proc(torproc) - + Term.proc_start("Test sites without proxy", spin=True) for i, site in enumerate(sites): Term.proc_state(f"Site {i}/{len(sites)}") @@ -153,7 +156,7 @@ def test_sites(tor: TORConnections, sites: list[str], countries: list[str]): return results -def pp_results(countries: list[str], results: dict[str, dict[str, Any]], fn = None): +def pp_results(countries: list[str], results: dict[str, dict[str, Any]], fn=None): countries.insert(0, "") tbl = [["site"]] for country in countries: @@ -195,6 +198,7 @@ def table(tbl): tablestr += divider Term.log(tablestr) + if __name__ == "__main__": parser = ArgumentParser() parser.add_argument("--port-start", type=int, default=7000) |