Browse Source

fix: proxyc test process

dev
dnomd343 2 years ago
parent
commit
842864501d
  1. 12
      Checker/Http.py
  2. 4
      Checker/__init__.py
  3. 22
      Utils/Check.py
  4. 2
      Utils/Logger.py
  5. 5
      main.py

12
Checker/Http.py

@ -3,27 +3,27 @@
import time import time
import requests import requests
from Basis.Logger import logging from Utils.Logger import logger
from Basis.Functions import hostFormat from Utils.Common import hostFormat
def httpPing(taskId: str, url: str, socksAddr: str, socksPort: int, timeout: int) -> float: def httpPing(taskId: str, url: str, socksAddr: str, socksPort: int, timeout: int) -> float:
try: try:
startTime = time.time_ns() # request start time startTime = time.time_ns() # request start time
socksProxy = 'socks5://%s:%i' % (hostFormat(socksAddr, v6Bracket = True), socksPort) socksProxy = 'socks5://%s:%i' % (hostFormat(socksAddr, v6Bracket = True), socksPort)
logging.debug('[%s] Http ping -> request %s via %s' % (taskId, url, socksProxy)) logger.debug('[%s] Http ping -> request %s via %s' % (taskId, url, socksProxy))
httpRequest = requests.get(url, proxies = { # send http request by socks5 proxy httpRequest = requests.get(url, proxies = { # send http request by socks5 proxy
'http': socksProxy, 'http': socksProxy,
'https': socksProxy, 'https': socksProxy,
}, timeout = timeout) }, timeout = timeout)
except: # something error on request process (timeout or proxy not working) except: # something error on request process (timeout or proxy not working)
logging.debug('[%s] Http ping -> request error' % taskId) logger.debug('[%s] Http ping -> request error' % taskId)
return -1 return -1
if httpRequest.status_code not in range(200, 300): # http code not 2xx if httpRequest.status_code not in range(200, 300): # http code not 2xx
logging.debug('[%s] Http ping -> status code %i not expected' % (taskId, httpRequest.status_code)) logger.debug('[%s] Http ping -> status code %i not expected' % (taskId, httpRequest.status_code))
return -1 return -1
delay = (time.time_ns() - startTime) / (10 ** 6) # ns -> ms delay = (time.time_ns() - startTime) / (10 ** 6) # ns -> ms
logging.debug('[%s] Http ping -> delay %f ms' % (taskId, delay)) logger.debug('[%s] Http ping -> delay %f ms' % (taskId, delay))
return round(delay, 2) # two decimal places return round(delay, 2) # two decimal places

4
Checker/__init__.py

@ -1,8 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging
from Checker import Http from Checker import Http
from Utils.Logger import logger
checkEntry = { checkEntry = {
'http': Http.check 'http': Http.check
@ -23,7 +23,7 @@ def formatCheck(rawInfo: list) -> dict:
def Checker(taskId: str, checkInfo: dict, socksInfo: dict) -> dict: def Checker(taskId: str, checkInfo: dict, socksInfo: dict) -> dict:
diffItems = {x for x in checkInfo} - {x for x in checkEntry} diffItems = {x for x in checkInfo} - {x for x in checkEntry}
if len(diffItems) != 0: # include unknown check items if len(diffItems) != 0: # include unknown check items
logging.error('[%s] Unknown check items -> %s' % (taskId, diffItems)) logger.error('[%s] Unknown check items -> %s' % (taskId, diffItems))
raise RuntimeError('Unknown check items') raise RuntimeError('Unknown check items')
result = {} result = {}
for checkItem, checkOptions in checkInfo.items(): for checkItem, checkOptions in checkInfo.items():

22
Basis/Check.py → Utils/Check.py

@ -4,10 +4,10 @@
import copy import copy
import time import time
from Checker import Checker from Checker import Checker
from Basis.Logger import logging from Utils.Logger import logger
from Utils.Common import isVacantPort
from Builder import Builder, clientEntry from Builder import Builder, clientEntry
from Basis.Exception import checkException from Utils.Exception import checkException
from Basis.Functions import checkPortStatus
def buildClient(taskId: str, taskInfo: dict) -> Builder: def buildClient(taskId: str, taskInfo: dict) -> Builder:
@ -19,36 +19,36 @@ def buildClient(taskId: str, taskInfo: dict) -> Builder:
taskId = taskId, taskId = taskId,
) )
except Exception as reason: except Exception as reason:
logging.error('[%s] Client build error -> %s' % (taskId, reason)) logger.error('[%s] Client build error -> %s' % (taskId, reason))
raise checkException('Client build error') raise checkException('Client build error')
def waitClient(taskId: str, client: Builder, times: int = 150, delay: int = 100): # wait until client port occupied def waitClient(taskId: str, client: Builder, times: int = 150, delay: int = 100): # wait until client port occupied
for i in range(times): for i in range(times):
if not checkPortStatus(client.socksPort): # port occupied if not isVacantPort(client.socksPort): # port occupied
break break
time.sleep(delay / 1000) # wait in default: 100ms * 150 => 15s time.sleep(delay / 1000) # wait in default: 100ms * 150 => 15s
time.sleep(1) # wait a short time before check process time.sleep(1) # wait a short time before check process
if not client.status(): # client unexpected exit if not client.status(): # client unexpected exit
logging.warning('[%s] Client unexpected exit' % taskId) logger.warning('[%s] Client unexpected exit' % taskId)
client.destroy() # remove file and kill sub process client.destroy() # remove file and kill sub process
logging.debug('[%s] Client output\n%s', (taskId, client.output)) logger.debug('[%s] Client output\n%s', (taskId, client.output))
raise checkException('Client unexpected exit') raise checkException('Client unexpected exit')
def Check(taskId: str, taskInfo: dict) -> dict: def Check(taskId: str, taskInfo: dict) -> dict:
logging.info('[%s] Start checking process -> %s' % (taskId, taskInfo)) logger.info('[%s] Start checking process -> %s' % (taskId, taskInfo))
if taskInfo['type'] not in clientEntry: # unknown proxy type if taskInfo['type'] not in clientEntry: # unknown proxy type
logging.error('[%s] Unknown proxy type %s' % (taskId, taskInfo['type'])) logger.error('[%s] Unknown proxy type %s' % (taskId, taskInfo['type']))
raise checkException('Unknown proxy type') raise checkException('Unknown proxy type')
client = buildClient(taskId, taskInfo) # build proxy client client = buildClient(taskId, taskInfo) # build proxy client
logging.info('[%s] Client loaded successfully' % taskId) logger.info('[%s] Client loaded successfully' % taskId)
waitClient(taskId, client) # wait for the client to start waitClient(taskId, client) # wait for the client to start
checkResult = Checker(taskId, taskInfo['check'], { # start check process checkResult = Checker(taskId, taskInfo['check'], { # start check process
'addr': client.socksAddr, 'addr': client.socksAddr,
'port': client.socksPort, 'port': client.socksPort,
}) })
logging.info('[%s] Client check result -> %s' % (taskId, checkResult)) logger.info('[%s] Client check result -> %s' % (taskId, checkResult))
client.destroy() # clean up client client.destroy() # clean up client
taskInfo = copy.deepcopy(taskInfo) taskInfo = copy.deepcopy(taskInfo)
taskInfo.pop('check') # remove check items taskInfo.pop('check') # remove check items

2
Utils/Logger.py

@ -42,7 +42,7 @@ stdHandler.setFormatter(colorlog.ColoredFormatter(
log_colors = logColor, log_colors = logColor,
stream = sys.stderr stream = sys.stderr
)) ))
stdHandler.setLevel(LogLevel) # custom level for stderr stdHandler.setLevel(logLevel) # custom level for stderr
logger = logging.getLogger() logger = logging.getLogger()
logger.addHandler(stdHandler) logger.addHandler(stdHandler)

5
main.py

@ -63,7 +63,8 @@ else:
from Tester import testEntry from Tester import testEntry
from Utils.Check import Check from Utils.Check import Check
from Utils import Api, DnsProxy # from Utils import Api, DnsProxy
from Utils import DnsProxy
from Utils.Logger import logger from Utils.Logger import logger
from Utils.Manager import Manager from Utils.Manager import Manager
from Utils.Test import Test, loadBind, loadCert from Utils.Test import Test, loadBind, loadCert
@ -137,4 +138,4 @@ logger.warning('ProxyC starts running (%s)' % Constant.Version)
_thread.start_new_thread(pythonCompile, ('/usr',)) # python compile (generate .pyc file) _thread.start_new_thread(pythonCompile, ('/usr',)) # python compile (generate .pyc file)
_thread.start_new_thread(DnsProxy.start, (Constant.DnsServer, 53)) # start dns server _thread.start_new_thread(DnsProxy.start, (Constant.DnsServer, 53)) # start dns server
_thread.start_new_thread(loop, (Constant.CheckThread, )) # start check loop _thread.start_new_thread(loop, (Constant.CheckThread, )) # start check loop
Api.startServer() # start api server # Api.startServer() # start api server

Loading…
Cancel
Save