Un outil de redirection de port asynchrone multi-utilisateurs basé sur le protocole CHAP , qui fournit une plate-forme de gestion et de surveillance côté Web, met en œuvre une gestion des quotas basée sur la durée et le trafic, compte l'utilisation du trafic des utilisateurs en temps réel et génère des commandes détaillées, qui sont affichées sur le front-end sous forme de graphiques.
Protocole : protocole CHAP amélioré
Front-end : vue.js + vuex + vue-router + vue-cli + axios + element-ui + v-chart
Backend : 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
: entrée du programme, lecture des paramètres de ligne de commande et configuration des journaux
chap.py
: Le module de lecture et d'écriture de données en bas du protocole
listen.py
: module de base de l'écoute à distance
slave.py
: le module de base de l'esclave local
server.py
: module principal de l'application sanic
Les mots de passe des utilisateurs sont cryptés et stockés à l'aide du sel MD5, et la poignée de main du protocole utilise des facteurs aléatoires pour empêcher les attaques par relecture.
Le front-end et le back-end sont séparés. Le back-end utilise Sanic pour fournir l'API RESTful et utilise JWT pour l'authentification inter-domaines.
Le protocole et la redirection de port bidirectionnel sont implémentés sur la base d'asyncio, et la base de données utilise aiomysql, et l'ensemble du backend est asynchrone et non bloquant.