|
@ -3,30 +3,31 @@ |
|
|
|
|
|
|
|
|
import time |
|
|
import time |
|
|
import subprocess |
|
|
import subprocess |
|
|
from Basis.Logger import logging |
|
|
from Utils.Logger import logger |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run(command: list) -> subprocess.Popen: |
|
|
def run(command: list) -> subprocess.Popen: |
|
|
logging.debug('Start dnsproxy -> %s' % command) |
|
|
logger.debug('Start dnsproxy -> %s' % command) |
|
|
return subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) |
|
|
return subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) # stdout and stderr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def daemon(process: subprocess.Popen, command: list, gap: int = 2) -> None: # daemon dnsproxy process |
|
|
def daemon(process: subprocess.Popen, command: list, gap: int = 3) -> None: # daemon dnsproxy process |
|
|
while True: # start daemon |
|
|
while True: # start daemon process |
|
|
time.sleep(gap) # check time gap |
|
|
time.sleep(gap) # check time gap (default 3s) |
|
|
if process.poll() is not None: # unexpected exit |
|
|
if process.poll() is not None: # unexpected exit |
|
|
logging.error('DnsProxy unexpected exit\n%s\n%s%s' % ( |
|
|
logger.error('DnsProxy unexpected exit\n%s\n%s%s' % ( |
|
|
'-' * 96, process.stdout.read().decode('utf-8'), '-' * 96) |
|
|
'-' * 96, process.stdout.read().decode(encoding = 'utf-8'), '-' * 96) |
|
|
) |
|
|
) |
|
|
process = run(command) |
|
|
process = run(command) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def start(servers: list or None, port: int = 53, cache: int = 4194304) -> None: # default cache size -> 4MiB |
|
|
def start(servers: str or list or None, port: int = 53, cache: int = 4194304) -> None: # default cache size -> 4MiB |
|
|
|
|
|
servers = [servers] if type(servers) == str else servers |
|
|
if servers is not None and type(servers) != list: # invalid server content |
|
|
if servers is not None and type(servers) != list: # invalid server content |
|
|
logging.error('Invalid DNS server -> %s' % servers) |
|
|
logger.error('Invalid DNS server -> %s' % servers) |
|
|
return |
|
|
return |
|
|
if servers is None or len(servers) == 0: # use origin dns server |
|
|
if servers is None or len(servers) == 0: # use origin dns server |
|
|
logging.info('Skip dnsproxy process') |
|
|
logger.info('Skip dnsproxy process') |
|
|
return |
|
|
return |
|
|
with open('/etc/resolv.conf', 'w') as dnsConfig: |
|
|
with open('/etc/resolv.conf', 'w') as dnsConfig: |
|
|
dnsConfig.write('nameserver 127.0.0.1\n') # system dns settings |
|
|
dnsConfig.write('nameserver 127.0.0.1\n') # system dns settings |
|
@ -37,5 +38,5 @@ def start(servers: list or None, port: int = 53, cache: int = 4194304) -> None: |
|
|
] |
|
|
] |
|
|
for server in servers: |
|
|
for server in servers: |
|
|
dnsCommand += ['--upstream', server] # upstream dns servers |
|
|
dnsCommand += ['--upstream', server] # upstream dns servers |
|
|
logging.warning('Start dnsproxy at port %i -> %s' % (port, servers)) |
|
|
logger.warning('Start dnsproxy at port %i -> %s' % (port, servers)) |
|
|
daemon(run(dnsCommand), dnsCommand) |
|
|
daemon(run(dnsCommand), dnsCommand) |