/TCP_MultiChat_Server

Multi-chat and Multi-Rooms TCP chat server implementation. Inspired in IRC protocol

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

CE5320 - TÓPICOS AVANÇADOS DE REDES DE COMPUTADORES - CENTRO UNIVERSITÁRIO FEI

 _____  _____ ______   _____  _____  _____  _   __ _____  _____   _____  _   _   ___  _____ 
|_   _|/  __ \| ___ \ /  ___||  _  |/  __ \| | / /|  ___||_   _| /  __ \| | | | / _ \|_   _|
  | |  | /  \/| |_/ / \ `--. | | | || /  \/| |/ / | |__    | |   | /  \/| |_| |/ /_\ \ | |  
  | |  | |    |  __/   `--. \| | | || |    |    \ |  __|   | |   | |    |  _  ||  _  | | |  
  | |  | \__/\| |     /\__/ /\ \_/ /| \__/\| |\  \| |___   | |   | \__/\| | | || | | | | |  
  \_/   \____/\_|     \____/  \___/  \____/\_| \_/\____/   \_/    \____/\_| |_/\_| |_/ \_/                      

Python Sockets Sucess


1. Introdução 📘

O projeto tem por objetivo a implementação de um servidor de chat baseado no protocolo TCP e imitando o protocolo IRC (Internet Relay Chat). O servidor deve ser capaz de interpretar alguns comandos recebidos através de solicitações via linha de comando(telnet), ter suporte á conexão de múltiplos usuários, diversas salas de bate-papo, autenticação, entre outras funções . O servidor deve ser capaz de responder a essas solicitações corretamente.

Durante a implementação das funcionalidades, a RFC do protocolo IRC(https://datatracker.ietf.org/doc/html/rfc1459) foi utilizada como base para esclarecimentos. A linguagem Python foi utilizada para a implementação, valendo apenas do módulo “sockets” e “threading” como base. O projeto foi desenvolvido em um ambiente da família “unix-like”, portanto, para evitar possíveis inconsistências, execute o projeto em um ambiente linux, utilizando o terminal de sua preferência.

As senhas são armazenadas de forma encriptada em uma lista, através da criptografia SHA-256, aumentando a segurança. Ao conectar-se ao servidor, o usuário é automaticamente adicionado à sala “Lobby”, a sala principal do servidor.

Importante: Para executar os comandos /ban, /unban e /kick uma senha de administrador é requerida, a senha é exibida apenas ao operador do servidor. Para facilitar a usabilidade, a senha padrão foi definida como: “adminpassword”. Além disso, para cada comando executado no servidor uma mensagem é exibida no terminal do operador do servidor.


2. Rodando localmente 🏠

Clone o projeto

  git clone https://github.com/akajhon/TCP_MultiChat_Server

Entre no diretório do projeto

   cd TCP_Multichat_Server

Instale as dependências do projeto

   pip install requirements.txt

Inicie o servidor

  phyton3 Multichat_server.py

Para entrar no servidor digite:

  telnet localhost 8000

3. Requisição via TELNET 👨‍💻

Após a conexão via telnet ser realizada, a tela inicial do servidor é exibida solicitando nome, nickname e senha.

Telnet

Os comandos implementados foram:

  • /CREATE

    Este comando tem a função de criar uma nova sala de chat no servidor. Por padrão, é perguntado ao usuário qual o nome da sala que será criada e por fim, em que sala o usuário deseja entrar.

  • /JOIN

    O comando /join têm por função principal inserir o usuário em uma sala. Se o comando for executado com o usuário estando em outra sala, este é retirado da lista da sala original e adicionado na sala em que deseja entrar.

  • /DELETE

    Este comando tem por função deletar alguma sala de chat criada no servidor. Se houver usuários na sala, eles serão movidos para a sala “Lobby” e a sala será excluída.

  • /LIST

    Este comando tem por função principal listar as salas de chat disponíveis no servidor e a quantidade de usuários em cada uma.

  • /LISTUSERS

    Através deste comando é possível visualizar quais usuários estão conectados ao servidor através dos nicknames.

  • /LISTBANNED

    Através deste comando é possível visualizar todos os usuários que foram banidos do servidor. Todos os nomes exibidos estão presentes no arquivo “bans.txt”.

  • /BAN

    Este comando tem a função de banir permanentemente um usuário de conectar-se ao servidor. Para utilizá-lo é necessário informar a senha “adminpassword”, por tratar-se de uma ação de usuário administrador. O usuário banido é então adicionado ao arquivo “bans.txt” e não consegue conectar-se ao servidor enquanto seu nickname estiver na lista de banimento.

  • /UNBAN

    O comando /unban tem por finalidade desbanir um usuário do servidor, fazendo com que o nickname seja retirado da lista de banimento e o usuário consiga conectar-se novamente ao servidor. Assim como no comando para realizar o banimento, a senha de administrador é requerida para executar o comando.

  • /LEAVE

    O comando /leave tem por função fazer com que o usuário que o inseriu saia da sala em que está no momento e seja automaticamente adicionado à sala “Lobby”, a sala principal.

  • /EXIT

    Este comando tem a função de encerrar a conexão do usuário com o servidor. Para executá-lo, uma confirmação é solicitada(sim/nao) e a senha do usuário é necessária para confirmar a ação. Após a conexão ser encerrada, as informações do usuário são excluídas do servidor.

  • /KICK

    Este comando tem por função principal “kickar” um usuário da sala em que ele está. Para sua execução, a senha de administrador é necessária.

  • /TIME

    Este comando tem por função principal exibir o horário no momento em que é executado.

  • /HELP

    Através deste comando o menu com todos é exibido na tela do usuário.


4. Autores 🤖

Murilo Joao Vitor Guilherme
Murilo Gomes Munhoz João Pedro Rosa Cezarino Vitor Martins Oliveira Guilherme Brigagão Cabelo
R.A: 22.120.035-5 R.A: 22.120.021-5 R.A: 22.120.067-8 R.A: 22.120.071-0