Skip to content

Instantly share code, notes, and snippets.

@yuchdev
Last active March 18, 2022 08:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuchdev/16bfa8d92722fb5cdb00fc4ee8a535bb to your computer and use it in GitHub Desktop.
Save yuchdev/16bfa8d92722fb5cdb00fc4ee8a535bb to your computer and use it in GitHub Desktop.
Choose random ProtonVPN server
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