Last active
March 18, 2022 08:03
-
-
Save yuchdev/16bfa8d92722fb5cdb00fc4ee8a535bb to your computer and use it in GitHub Desktop.
Choose random ProtonVPN server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import sys | |
import time | |
import random | |
import argparse | |
# Key is country code, value is the number of servers to use | |
SERVER_LIST = { | |
"AR": [*range(1, 8)], | |
"AU": [*range(13, 44)], | |
"AT": [*range(1, 16)], | |
"BE": [*range(1, 16)], | |
"BR": [*range(9, 16), *range(21, 28), *range(41, 45)], | |
"KH": [*range(1, 8)], | |
"BG": [*range(5, 12)], | |
"CA": [*range(1, 8), *range(17, 60)], | |
"CL": [*range(1, 16)], | |
"CO": [*range(1, 16)], | |
"CR": [*range(1, 4)], | |
"CY": [*range(1, 4)], | |
"CZ": [*range(1, 4), *range(13, 20)], | |
"DK": [*range(1, 4), *range(13, 24)], | |
"EG": [*range(1, 8)], | |
"EE": [*range(1, 8)], | |
"FI": [*range(1, 12)], | |
"FR": [*range(9, 12), *range(24, 84)], | |
"GE": [*range(1, 6)], | |
"DE": [*range(13, 20), *range(33, 36), *range(58, 125)], | |
"GR": [*range(1, 8)], | |
"HK": [*range(1, 4), *range(6, 27)], | |
"HU": [*range(1, 12)], | |
"IS": [3, 4, 7, 8], | |
"IN": [*range(1, 18)], | |
"IE": [*range(1, 12)], | |
"IL": [*range(1, 12)], | |
"IT": [*range(1, 16)], | |
"JP-FREE": [*range(1, 7)], | |
"JP": [*range(43, 44), *range(51, 53), *range(59, 62)], | |
"LV": [*range(1, 8)], | |
"LT": [*range(1, 8)], | |
"LU": [*range(5, 16)], | |
"MY": [*range(1, 8)], | |
"MX": [*range(1, 8)], | |
"MD": [*range(1, 8)], | |
"NL": [*range(3, 8), *range(14, 60), *range(70, 72), *range(82, 96), *range(220, 238)], | |
"NL-FREE": [*range(1, 38)], | |
"NZ": [*range(4, 20)], | |
"NG": [*range(1, 5)], | |
"NO": [*range(1, 20)], | |
"PE": [*range(1, 16)], | |
"PH": [*range(1, 8)], | |
"PL": [*range(1, 4), *range(13, 24)], | |
"PT": [*range(5, 12)], | |
"PR": [*range(1, 8)], | |
"RO": [*range(9, 18)], | |
"RU": [*range(1, 16)], | |
"RS": [*range(1, 8)], | |
"SG": [*range(21, 52), *range(58, 68)], | |
"SK": [*range(1, 8)], | |
"SI": [*range(1, 8)], | |
"ZA": [*range(13, 24)], | |
"KR": [*range(13, 20)], | |
"ES": [*range(9, 29)], | |
"SE": [*range(1, 8), *range(17, 30)], | |
"CH": [*range(5, 8), *range(12, 17)], | |
"TW": [*range(13, 28)], | |
"TH": [*range(1, 8)], | |
"TR": [*range(17, 24)], | |
"UA": [*range(9, 16)], | |
"AE": [*range(9, 20)], | |
"UK": [*range(17, 76)], | |
"US-AZ": [*range(9, 20)], | |
"US-CA": [*range(17, 27), *range(32, 60), *range(62, 65), *range(68, 72), *range(77, 100), 141], | |
"US-CO": [*range(1, 8), *range(9, 20)], | |
"US-FL": [*range(1, 52)], | |
"US-GA": [*range(13, 24), *range(109, 120)], | |
"US-IL": [*range(45, 80)], | |
"US-NJ": [*range(9, 12)], | |
"US-NY": [*range(5, 8), *range(13, 44), *range(46, 56), *range(61, 72), *range(126, 137)], | |
"US-TX": [*range(9, 40)], | |
"US-UT": [*range(25, 36)], | |
"US-VA": [*range(14, 37)], | |
"US-WA": [*range(21, 44)], | |
"US-FREE": [*range(1, 38)], | |
"VN": [*range(1, 8)], | |
} | |
# Sleep time in seconds | |
SLEEP_TIME = 600 | |
def random_server(): | |
""" | |
Get random server from random country | |
:return: server name, e.g. "AU#1" | |
""" | |
country_code = random.choice(list(SERVER_LIST.keys())) | |
servers = SERVER_LIST[country_code] | |
server_number = random.choice(servers) | |
return "{}#{}".format(country_code, server_number) | |
def random_from_country(country_code): | |
""" | |
Run random server from specific country | |
:param country_code: e.g. "AU" | |
:return: server name, e.g. "AU#1" | |
""" | |
servers = SERVER_LIST[country_code] | |
server_number = random.choice(servers) | |
return "{}#{}".format(country_code, server_number) | |
def run_server(server_number): | |
""" | |
:return: system code | |
""" | |
return os.system("protonvpn-cli c {}".format(server_number)) | |
def main(): | |
""" | |
:return: System return code | |
""" | |
parser = argparse.ArgumentParser(description='Command-line params') | |
parser.add_argument('--random-country', | |
help='Random server from random country', | |
action='store_true', | |
required=False) | |
parser.add_argument('--random-server', | |
help='Random server from specific country, e.g. "AU"', | |
default="", | |
required=False) | |
parser.add_argument('--run-server', | |
help='Run specific server, e.g. "AU#13"', | |
default="", | |
required=False) | |
parser.add_argument('--random-country-loop', | |
help='Run random servers from random country in loop', | |
action='store_true', | |
required=False) | |
parser.add_argument('--random-server-loop', | |
help='Run random servers from specific country in loop, e.g. "AU"', | |
default="", | |
required=False) | |
args = parser.parse_args() | |
if args.random_country: | |
print("Run random server from random country") | |
server = random_server() | |
print("Server: {}".format(server)) | |
return run_server(server) | |
elif len(args.random_server): | |
print("Random server from {}".format(args.random_server)) | |
server = random_from_country(args.random_server) | |
print("Server: {}".format(server)) | |
return run_server(server) | |
elif len(args.run_server): | |
print("Run specific server {}".format(args.run_server)) | |
server = args.run_server | |
print("Server: {}".format(server)) | |
return run_server(server) | |
elif args.random_country_loop: | |
print("Run random servers from random country in loop") | |
while True: | |
server = random_server() | |
print("Server: {}".format(server)) | |
run_server(server) | |
time.sleep(SLEEP_TIME) | |
elif len(args.random_server_loop): | |
print("Run random servers from specific country in loop, e.g. \"AU\"") | |
while True: | |
server = random_from_country(args.random_server_loop) | |
print("Server: {}".format(server)) | |
run_server(server) | |
time.sleep(SLEEP_TIME) | |
return 0 | |
########################################################################### | |
if __name__ == '__main__': | |
sys.exit(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment