HackerNCoder
6d81897b9d
This checks for if the relay is running a tor version considered EOL (non 0.3.5, 0.4.5, 0.4.6 and 0.4.7) and will therefore be rejected soon after it comes online
49 lines
2.3 KiB
Python
49 lines
2.3 KiB
Python
import requests
|
|
import re
|
|
import os
|
|
import datetime
|
|
import json
|
|
import smtplib
|
|
|
|
url = "https://onionoo.torproject.org/details"
|
|
r = requests.get(url)
|
|
relays = json.loads(r.content)["relays"]
|
|
|
|
relayWatchEmail = "From: relay status <relaystatus@encryptionin.space>\nTo: relaywatch@lists.encryptionin.space\nSubject: Relay Status " + datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H') + "\n\n"
|
|
relayStatus = ""
|
|
|
|
exitWatchEmail = "From: relay status <relaystatus@encryptionin.space>\nTo: exitwatch@lists.encryptionin.space\nSubject: Exit Status " + datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H') + "\n\n"
|
|
exitStatus = ""
|
|
|
|
newVersions = 0
|
|
|
|
for new_relay in relays:
|
|
if datetime.datetime.strptime(new_relay["first_seen"], "%Y-%m-%d %H:%M:%S") > (datetime.datetime.utcnow() - datetime.timedelta(hours=1)):
|
|
exit = "no"
|
|
eol = "no"
|
|
if not re.search("0.3.5|0.4.5|0.4.6|0.4.7", new_relay["platform"), re.IGNORECASE):
|
|
eol = "yes"
|
|
if new_relay["exit_policy"][0] != "reject *:*":
|
|
exit = "yes"
|
|
exitStatus += "New exit: \"" + new_relay["nickname"] + "\", fingerprint: " + new_relay["fingerprint"] + ", EOL: " + eol + ", effective family size: " + str(len(new_relay["effective_family"])-1) + "; https://metrics.torproject.org/rs.html#search/" + new_relay["fingerprint"] + "\n"
|
|
relayStatus += "New relay: \"" + new_relay["nickname"] + "\", fingerprint: " + new_relay["fingerprint"] + ", potential exit: " + exit + ", EOL: " + eol + ", effective family size: " + str(len(new_relay["effective_family"])-1) + "; https://metrics.torproject.org/rs.html#search/" + new_relay["fingerprint"] + "\n"
|
|
|
|
if re.search("0.3.5.17|0.4.5.11", new_relay["platform"], re.IGNORECASE):
|
|
newVersions += 1
|
|
|
|
if relayStatus:
|
|
relayWatchEmail += relayStatus + "\nTotal new versions: " + str(newVersions) + "\n"
|
|
try:
|
|
smtp = smtplib.SMTP('localhost')
|
|
smtp.sendmail('relaystatus@encryptionin.space', ['relaywatch@lists.encryptionin.space'], relayWatchEmail)
|
|
except:
|
|
print("couldn't send")
|
|
|
|
if exitStatus:
|
|
exitWatchEmail += exitStatus
|
|
try:
|
|
smtp = smtplib.SMTP('localhost')
|
|
smtp.sendmail('relaystatus@encryptionin.space', ['exitwatch@lists.encryptionin.space'], exitWatchEmail)
|
|
except:
|
|
print("couldn't send")
|