aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakob <jakob@jakobstendahl.no>2022-09-24 14:44:07 +0000
committerjakob <jakob@jakobstendahl.no>2022-09-24 14:44:07 +0000
commit5569f3620b3479a8817928711e1dc744e6702067 (patch)
tree23bb728312a8c42aa1c1ad29863c2a4d3c11fb2e
parent60f5e7148bfe6815eb295e09a6f778b1f53b01eb (diff)
downloadtor-site-tester-5569f3620b3479a8817928711e1dc744e6702067.tar.gz
tor-site-tester-5569f3620b3479a8817928711e1dc744e6702067.zip
flake
-rw-r--r--res.csv12
-rw-r--r--res1.csv12
-rw-r--r--sites.txt12
-rw-r--r--term.py16
-rw-r--r--tor-site-tester.py52
5 files changed, 72 insertions, 32 deletions
diff --git a/res.csv b/res.csv
new file mode 100644
index 0000000..18c6dd8
--- /dev/null
+++ b/res.csv
@@ -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
+
diff --git a/term.py b/term.py
index 59c02c7..ceb07fa 100644
--- a/term.py
+++ b/term.py
@@ -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)