You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

68 lines
1.8 KiB

import glob
import logging
import os
import unittest
import subprocess
import requests
import dotenv
import time
import itertools
dotenv.load_dotenv()
def get_ip(version=None):
"""provider = 'https://%swtfismyip.com/text'
prefix = {
None: '',
4: 'ipv4.',
6: 'ipv6.'
}[version]"""
provider = 'https://%sipify.org'
prefix = {
None: 'api64.',
4: 'api4.',
6: 'api6.'
}[version]
result = requests.Session().get(provider % prefix).text.strip()
return result
def get_tool_path():
default = glob.glob(os.path.join(os.path.dirname(__file__), '..', 'target', '*', 'tun2proxy'))
default = default[0] if len(default) > 0 else 'tun2proxy'
return os.environ.get('TOOL_PATH', default)
def start_process(*args):
pass
class Tun2ProxyTest(unittest.TestCase):
@staticmethod
def _test(ip_version, dns, proxy_var):
ip_noproxy = get_ip(ip_version)
print(ip_noproxy)
additional = ['-6'] if ip_version == 6 else []
p = subprocess.Popen([get_tool_path(), "--proxy", os.getenv(proxy_var), '--setup', '-v', 'trace', '--dns', dns, *additional])
try:
time.sleep(1)
ip_withproxy = get_ip(ip_version)
print(ip_withproxy)
assert ip_noproxy != ip_withproxy
except Exception as e:
raise e
finally:
p.terminate()
p.wait()
@classmethod
def add_tests(cls):
for ip_version, dns, proxy_var in itertools.product([None, 4, 6], ['virtual', 'over-tcp'], ['SOCKS5_PROXY', 'HTTP_PROXY']):
setattr(cls, 'test_ipv%s_dns%s_proxy%s' % (ip_version, dns, proxy_var), lambda self: cls._test(ip_version, dns, proxy_var))
if __name__ == '__main__':
Tun2ProxyTest.add_tests()
unittest.main()