diff --git a/.screens/floodbl.png b/.screens/floodbl.png index 5731faf..5dc080d 100644 Binary files a/.screens/floodbl.png and b/.screens/floodbl.png differ diff --git a/floodbl.py b/floodbl.py index 929cd28..d64e39a 100644 --- a/floodbl.py +++ b/floodbl.py @@ -1,12 +1,6 @@ #!/usr/bin/env python # FloodBL - Developed by acidvegas in Python (https://git.acid.vegas/proxytools) -''' - -Test proxies against a set of Domain Name System-based Blackhole Lists (DNSBL) or Real-time Blackhole Lists (RBL) - -''' - ''' Notes for future improvement: @@ -23,7 +17,6 @@ To query an IPv6 address, you must expand it, then reverse it into "nibble" form port1 is the OR (onion router) port, port2 (if specified) is the DR (directory) port. Flags are defined as follows: - E Exit X Hidden Exit A Authority @@ -46,23 +39,84 @@ import os import re import socket -blackholes = ('dnsbl.dronebl.org','rbl.efnetrbl.org','torexit.dan.me.uk') -good = list() -proxies = list() -print_bad = True +try: + import dns.resolver +except ImportError: + raise SystemExit('error: missing required \'dnspython\' library (https://pypi.org/project/dnspython/)') + +# Globals +good = list() +bad = list() +unknown = list() +proxies = list() + +blackholes = { + 'dnsbl.dronebl.org': { + '2' : 'Sample', + '3' : 'IRC Drone', + '5' : 'Bottler', + '6' : 'Unknown spambot or drone', + '7' : 'DDOS Drone', + '8' : 'SOCKS Proxy', + '9' : 'HTTP Proxy', + '10' : 'ProxyChain', + '11' : 'Web Page Proxy', + '12' : 'Open DNS Resolver', + '13' : 'Brute force attackers', + '14' : 'Open Wingate Proxy', + '15' : 'Compromised router / gateway', + '16' : 'Autorooting worms', + '17' : 'Automatically determined botnet IPs (experimental)', + '18' : 'DNS/MX type' + }, +# 'rbl.efnetrbl.org': { # NOTE: Most IRC networks use DroneBL, un-comment this section to check the EFnetRBL +# '1' : "Open Proxy", +# '2' : "spamtrap666", +# '3' : "spamtrap50", +# '4' : "TOR", +# '5' : "Drones / Flooding" +# }, +# 'torexit.dan.me.uk': { # TODO: The require a TXT lookup, although IRC daemons do numeric replies...will look into this +# 'E' : 'Exit', +# 'X' : 'Hidden Exit', +# 'A' : 'Authority', +# 'B' : 'BadExit', +# 'C' : 'NoEdConsensus', +# 'D' : 'V2Dir', +# 'F' : 'Fast', +# 'G' : 'Guard', +# 'H' : 'HSDir', +# 'N' : 'Named', +# 'R' : 'Running', +# 'S' : 'Stable', +# 'U' : 'Unnamed', +# 'V' : 'Valid' +# } +} def check(proxy): - formatted_ip = '.'.join(proxy.split('.')[::-1]) + proxy_ip = proxy.split(':')[0] + formatted_ip = '.'.join(proxy_ip.split('.')[::-1]) for blackhole in blackholes: try: - socket.gethostbyname(f'{formatted_ip}.{blackhole}') - except socket.gaierror: - if print_bad: - print('\033[1;31mBAD\033[0m \033[30m|\033[0m ' + proxy.ljust(22) + f'\033[30m({blackhole})\033[0m') - break - else: - print('\033[1;32mGOOD\033[0m \033[30m|\033[0m ' + proxy) - good.append(proxy) + results = dns.resolver.resolve(f'{formatted_ip}.{blackhole}', 'A') + if results: + for result in results: + data = result.to_text() + reply = data.split('.')[-1:][0] + if reply in blackholes[blackhole]: + print(f'{proxy_ip.ljust(15)} \033[1;30m|\033[0m {blackhole.ljust(17)} \033[1;30m|\033[0m \033[1;31m{blackholes[blackhole][reply]}\033[0m') + bad.append(proxy) + else: + print(f'{proxy_ip.ljust(15)} \033[1;30m|\033[0m {blackhole.ljust(17)} \033[1;30m|\033[0m Unknown ({data})') + unknown.append(proxy) + else: + print(f'{proxy_ip.ljust(15)} \033[1;30m|\033[0m {blackhole.ljust(17)} \033[1;30m|\033[0m Error (No results)') + unkown.append(proxy) + except Exception as ex: + print(f'{proxy_ip.ljust(15)} \033[1;30m|\033[0m {blackhole.ljust(17)} \033[1;30m|\033[0m \033[1;32mGOOD\033[0m') + if proxy not in bad: + good.append(proxy) # Main print('#'*56) @@ -93,4 +147,3 @@ with open(args.output, 'w') as output_file: print('\033[34mTotal\033[0m : ' + format(len(proxies), ',d')) print('\033[34mGood\033[0m : ' + format(len(good), ',d')) print('\033[34mBad\033[0m : ' + format(len(proxies)-len(good), ',d')) -print('\033[34mDupe\033[0m : ' + format(initial-len(proxies), ',d')) diff --git a/sockhub.py b/sockhub.py index 7df34c5..c76f2ec 100644 --- a/sockhub.py +++ b/sockhub.py @@ -17,33 +17,63 @@ import urllib.request # The current list contains proxy sources that are updated frequently with new proxies # Almost all of the Github repos pull from the same place & contain duplicates (which are removed) urls = set(( - 'https://raw.githubusercontent.com/ALIILAPRO/Proxy/main/socks5.txt', - 'https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/SOCKS5.txt', - 'https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt', - 'https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks5.txt', - 'https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt', - 'https://raw.githubusercontent.com/manuGMG/proxy-365/main/SOCKS5.txt', - 'https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks5.txt', - 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks5.txt', - 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks5.txt', - 'https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/socks5.txt', - 'https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/socks5/socks5.txt', - 'https://raw.githubusercontent.com/prxchk/proxy-list/main/socks5.txt', - 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies/socks5.txt', - 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies_anonymous/socks5.txt', - 'https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt', - 'https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks5.txt', - 'https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks5.txt', - 'https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt', - 'https://raw.githubusercontent.com/UptimerBot/proxy-list/main/proxies/socks5.txt', - 'https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/socks5.txt', - 'https://raw.githubusercontent.com/zevtyardt/proxy-list/main/socks5.txt', + 'https://api.openproxylist.xyz/socks4.txt' 'https://api.openproxylist.xyz/socks5.txt', + 'https://api.proxyscrape.com/?request=displayproxies&proxytype=socks4', + 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks4', 'https://api.proxyscrape.com/?request=displayproxies&proxytype=socks5', 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks5', + 'https://proxy-list.download/api/v1/get?type=socks4', + 'https://proxy-list.download/api/v1/get?type=socks5', + 'https://proxyscan.io/download?type=socks4', 'https://proxyscan.io/download?type=socks5', + 'https://proxyspace.pro/socks4.txt', 'https://proxyspace.pro/socks5.txt', - 'https://spys.me/socks.txt' + 'https://raw.githubusercontent.com/ALIILAPRO/Proxy/main/socks4.txt', + 'https://raw.githubusercontent.com/ALIILAPRO/Proxy/main/socks5.txt', + 'https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/SOCKS4.txt', + 'https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/SOCKS5.txt', + 'https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt', + 'https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks4.txt', + 'https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks5.txt', + 'https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks4.txt', + 'https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt', + 'https://raw.githubusercontent.com/manuGMG/proxy-365/main/SOCKS4.txt', + 'https://raw.githubusercontent.com/manuGMG/proxy-365/main/SOCKS5.txt', + 'https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks4.txt', + 'https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks5.txt', + 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks4.txt', + 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks5.txt', + 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks4.txt', + 'https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks5.txt', + 'https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/socks4.txt', + 'https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/socks5.txt', + 'https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/socks5/socks4.txt', + 'https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/socks5/socks5.txt', + 'https://raw.githubusercontent.com/prxchk/proxy-list/main/socks4.txt', + 'https://raw.githubusercontent.com/prxchk/proxy-list/main/socks5.txt', + 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies/socks4.txt', + 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies/socks5.txt', + 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies_anonymous/socks4.txt', + 'https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies_anonymous/socks5.txt', + 'https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS4_RAW.txt', + 'https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt', + 'https://raw.githubusercontent.com/RX4096/proxy-list/main/online/socks4.txt', + 'https://raw.githubusercontent.com/RX4096/proxy-list/main/online/socks5.txt', + 'https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks4.txt', + 'https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks5.txt', + 'https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks4.txt', + 'https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks5.txt', + 'https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt', + 'https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt', + 'https://raw.githubusercontent.com/UptimerBot/proxy-list/main/proxies/socks4.txt', + 'https://raw.githubusercontent.com/UptimerBot/proxy-list/main/proxies/socks5.txt', + 'https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/socks4.txt', + 'https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/socks5.txt', + 'https://raw.githubusercontent.com/zevtyardt/proxy-list/main/socks4.txt', + 'https://raw.githubusercontent.com/zevtyardt/proxy-list/main/socks5.txt', + 'https://spys.me/socks.txt', + 'https://spys.one/en/socks-proxy-list/' )) def get_source(url): @@ -85,4 +115,4 @@ if proxies: proxies.sort() with open (proxy_file, 'w') as proxy__file: for proxy in proxies: - proxy__file.write(proxy + '\n') \ No newline at end of file + proxy__file.write(proxy + '\n')