about summary refs log tree commit diff stats
path: root/src/instances/get_instances.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/instances/get_instances.py')
-rw-r--r--src/instances/get_instances.py51
1 files changed, 38 insertions, 13 deletions
diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py
index a94b63d9..e8e1952f 100644
--- a/src/instances/get_instances.py
+++ b/src/instances/get_instances.py
@@ -12,6 +12,7 @@ import subprocess
 
 mightyList = {}
 
+
 def filterLastSlash(urlList):
     tmp = []
     for i in urlList:
@@ -22,22 +23,48 @@ def filterLastSlash(urlList):
             tmp.append(i)
     return tmp
 
-cloudflare_ips = []
-with open('./src/instances/cloudflare_ips.json', 'r') as file:
-    cloudflare_ips = json.load(file)
+
+def ip2bin(ip): return "".join(
+    map(
+        str,
+        [
+            "{0:08b}".format(int(x)) for x in ip.split(".")
+        ]
+    )
+)
+
+
+def get_cloudflare_ips():
+    r = requests.get('https://www.cloudflare.com/ips-v4')
+    return r.text.split('\n')
+
+
+cloudflare_ips = get_cloudflare_ips()
+
 
 def is_cloudflare(url):
-    href = urlparse(url)
-    ip = ''
+    instance_ip = None
     try:
-        ip = socket.gethostbyname(href.hostname)
+        instance_ip = socket.gethostbyname(urlparse(url).hostname)
+        if instance_ip is None:
+            return False
     except:
         return False
+    instance_bin = ip2bin(instance_ip)
 
-    if ip in cloudflare_ips:
-        return True
-    else:
-        return False
+    for cloudflare_ip_mask in cloudflare_ips:
+        cloudflare_ip = cloudflare_ip_mask.split('/')[0]
+        cloudflare_bin = ip2bin(cloudflare_ip)
+
+        mask = int(cloudflare_ip_mask.split('/')[1])
+
+        cloudflare_bin_masked = cloudflare_bin[:mask]
+        instance_bin_masked = instance_bin[:mask]
+
+        if cloudflare_bin_masked == instance_bin_masked:
+            print(url + ' is ' + Fore.RED + 'cloudflare' + Style.RESET_ALL)
+            return True
+    return False
 
 
 # Invidious
@@ -313,9 +340,8 @@ for k1, v1 in mightyList.items():
                     mightyList[k1][k2].remove(instance)
                     print("removed " + instance)
                 else:
-                    if (is_cloudflare(instance)):
+                    if not instance.endswith('.onion') and not instance.endswith('.i2p') and is_cloudflare(instance):
                         cloudflareMightyList.append(instance)
-                        
 
 
 # Writing to file
@@ -330,4 +356,3 @@ with open('./src/instances/cloudflare.json', 'w') as outfile:
 print(Fore.BLUE + 'wrote ' + Style.RESET_ALL + 'instances/cloudflare.json')
 
 # print(json_object)
-