Una herramienta de reenvío de puertos asíncrono multiusuario basada en el protocolo CHAP , que proporciona una plataforma de monitoreo y administración del lado web, implementa la administración de cuotas según la duración y el tráfico, cuenta el uso del tráfico de los usuarios en tiempo real y genera pedidos detallados, que se muestran en la parte delantera en forma de gráficos.
Protocolo: protocolo CHAP mejorado
Interfaz: vue.js + vuex + vue-router + vue-cli + axios + element-ui + v-chart
Servidor: asyncio + sanic + sanic_cors + sanic_jwt + aiomysql
(back_end) root@iZ2zehx50rbasf3o9jdehaZ:~/pylcx/back_end# python main.py -h
usage: main.py [-h] {listen,slave} ...
async LCX with CHAP
positional arguments:
{listen,slave} choose a mode to run
listen run in listen mode
slave run in slave mode
optional arguments:
-h, --help show this help message and exit
(back_end) root@iZ2zehx50rbasf3o9jdehaZ:~/pylcx/back_end# python main.py listen -h
usage: main.py listen [-h] -p PORT [-a ADDR] [-v]
optional arguments:
-h, --help show this help message and exit
-p PORT Port listen for slave side
-a ADDR Address for a web server to manage users, default
0.0.0.0:8000
-v, --verbose verbose log (repeat for more verbose)
(back_end) root@iZ2zehx50rbasf3o9jdehaZ:~/pylcx/back_end# python main.py slave -h
usage: main.py slave [-h] [-b BIND] -l LOCAL -r REMOTE -u USER [-v]
optional arguments:
-h, --help show this help message and exit
-b BIND Open a bind port at remote listen, connected by remote
client, default 0 (random port)
-l LOCAL Local server address in format host:port
-r REMOTE Remote listen address in format host:port
-u USER User in format username:password
-v, --verbose verbose log (repeat for more verbose)
main.py
: entrada de programa, lectura de parámetros de línea de comando y configuración de registros
chap.py
: el módulo de lectura y escritura de datos en la parte inferior del protocolo.
listen.py
: módulo central de escucha remota
slave.py
: el módulo central del esclavo local.
server.py
: módulo central de la aplicación sanic
Las contraseñas de los usuarios se cifran y almacenan utilizando sal MD5, y el protocolo de enlace del protocolo utiliza factores aleatorios para evitar ataques de repetición.
El front-end y el back-end están separados. El back-end usa Sanic para proporcionar API RESTful y usa JWT para la autenticación entre dominios.
El protocolo y el reenvío de puertos bidireccional se implementan en base a asyncio, la base de datos usa aiomysql y todo el backend es asíncrono y sin bloqueo.