Just copy the code and run.
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
import traceback
import urllib
import psutil
import shelve
import requests
import random
import re
# Enter some websites. Make sure you can see the website in your
# country without any secured connection.
servers = ['http://ip.cn/',
'http://ip.42.pl/raw',
'http://jsonip.com',
'http://httpbin.org/ip',
'https://api.ipify.org/?format=json']
def get_ip():
try:
page = requests.get(random.choice(servers), timeout=5).text
ip = re.search('(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)', page)
except:
ip = None
if ip is not None and ip.group is not None:
return ip.group(0)
else:
return "nothing"
def main():
try:
gateway = sys.argv[1]
subnets = sys.argv[2:]
except Exception:
print (traceback.format_exc())
usage()
orn_ip = get_ip()
command = 'sshuttle -r %s %s' % (gateway, ' '.join(subnets))
print ('-' * 10, command)
proc = subprocess.Popen(['/bin/bash', '-c', command])
crn_ip = get_ip()
wc = 0
while True:
time0 = time.time()
net_rcv0 = psutil.net_io_counters()[1]
time.sleep(1)
time1 = time.time()
net_rcv1 = psutil.net_io_counters()[1]
net_spd = ((net_rcv1 - net_rcv0) * 0.001) / (time1 - time0)
print ("---- Download speed: %d Kb/s" %(net_spd))
print ("---- Your ip is: " + crn_ip)
if wc % 5 == 0:
if crn_ip == orn_ip:
crn_ip = get_ip()
if net_spd < 1 and proc is not None:
crn_ip = get_ip()
if crn_ip == "nothing":
print ("---- Killed the sshuttle for restart.")
proc.kill()
proc = None
if proc is not None:
if proc.returncode is not None:
print ("---- Killed the sshuttle for restart.")
proc.kill()
proc = None
else:
crn_ip = get_ip()
if crn_ip == "nothing":
print ("---- Waiting for Internet.")
elif crn_ip == orn_ip:
print ("---- Restarting the sshuttle.")
proc = subprocess.Popen(['/bin/bash', '-c', command])
wc = wc + 1
if wc >= 65532:
wc = 0
def usage():
print ("""
./sshuttle-ar.py ...
""")
if __name__ == "__main__":
main()
Have fun; be free!