Uma ferramenta de encaminhamento de porta assíncrona multiusuário baseada no protocolo CHAP , que fornece uma plataforma de gerenciamento e monitoramento do lado da web, implementa gerenciamento de cotas com base na duração e no tráfego, conta o uso do tráfego do usuário em tempo real e gera pedidos detalhados, que são exibidos em o front-end na forma de gráficos.
Protocolo: protocolo CHAP aprimorado
Front-end: vue.js + vuex + vue-router + vue-cli + axios + element-ui + v-chart
Back-end: assíncio + 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 do programa, leitura dos parâmetros da linha de comando e configuração dos logs
chap.py
: O módulo de leitura e gravação de dados na parte inferior do protocolo
listen.py
: módulo principal de escuta remota
slave.py
: o módulo principal do escravo local
server.py
: módulo principal do aplicativo sanic
As senhas dos usuários são criptografadas e armazenadas usando sal MD5, e o handshake do protocolo usa fatores aleatórios para evitar ataques de repetição.
O front-end e o back-end são separados. O back-end usa Sanic para fornecer API RESTful e usa JWT para autenticação entre domínios.
O protocolo e o encaminhamento de porta bidirecional são implementados com base em assíncrono, e o banco de dados usa aiomysql, e todo o back-end é assíncrono e sem bloqueio.