1 from requests import get
2 from hashlib import sha256
10 "activitypub-troll.cf",
16 "user-agent": "Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0"
20 def get_hash(domain: str) -> str:
21 return sha256(domain.encode("utf-8")).hexdigest()
24 def get_peers(domain: str) -> str:
26 res = get(f"https://{domain}/api/v1/instance/peers", headers=headers, timeout=5)
31 peerlist = get_peers(domain)
33 def get_type(instdomain: str) -> str:
35 res = get(f"https://{instdomain}/nodeinfo/2.1.json", headers=headers, timeout=5)
36 if res.status_code == 404:
37 res = get(f"https://{instdomain}/nodeinfo/2.0", headers=headers, timeout=5)
38 if res.status_code == 404:
39 res = get(f"https://{instdomain}/nodeinfo/2.0.json", headers=headers, timeout=5)
40 if res.ok and "text/html" in res.headers["content-type"]:
41 res = get(f"https://{instdomain}/nodeinfo/2.1", headers=headers, timeout=5)
43 if res.json()["software"]["name"] in ["akkoma", "rebased"]:
45 elif res.json()["software"]["name"] in ["hometown", "ecko"]:
47 elif res.json()["software"]["name"] in ["calckey", "groundpolis", "foundkey", "cherrypick"]:
50 return res.json()["software"]["name"]
51 elif res.status_code == 404:
52 res = get(f"https://{instdomain}/api/v1/instance", headers=headers, timeout=5)
59 conn = sqlite3.connect("blocks.db")
63 "select domain from instances where 1"
66 for instance in peerlist:
67 instance = instance.lower()
70 for domain in blacklist:
71 if domain in instance:
80 "select domain from instances where domain = ?", (instance,)
82 if c.fetchone() == None:
84 "insert into instances select ?, ?, ?",
85 (instance, get_hash(instance), get_type(instance)),
88 except Exception as e:
89 print("error:", e, instance)