===== Crear fácilmente un chat multiusuario cifrado (SSL) en terminal con NCat ===== [[https://nmap.org/ncat/ |NCat]] es una utilidad de red repleta de funcionalidades que lee y escribe datos a través de la red desde la terminal. Pertenece al proyecto Nmap y es una reimplementación mejorada de del venerable Netcat. Utiliza TCP y UDP para la comunicación y permite entre otras cosas SSL / STCP para cifrar conexiones. Para crear un chat cifrado que pueden utilizar varios usuarios desde la terminal, ya sea de forma local, en remoto o en ambos a la vez, se debe hacer lo siguiente. **Servidor**. Su única función es servir y no recibe mensajes de clientes, pero si se escribe en la terminal, todos los clientes reciben sus notificaciones / mensajes como ""). ncat --listen --chat --ssl 192.168.178.50 8000 **Cliente 1**: host remoto que accede a través del nombre de dominio / ip pública del servidor (). ncat --ssl 222.111.222.111 8000 37.35.174.11 is connected as . already connected: nobody. **Cliente 2**: usuario local del sistema que hace de servidor. ncat --ssl 192.168.178.50 8000 Ejemplo de conversación visto desde la terminal del cliente número 1 () ncat --ssl busindrewu.mooo.com 8000 32.15.154.11 is connected as . already connected: nobody. 192.168.178.50 is connected as . already connected: 32.15.154.11 as . Hola user5, eres el creador del server? No, me lo dejó un compi puesto esta mañana. ***** Hoy se reinicia el servidor a las 21:32 ***** Yo solo tengo un usuario en el host, me llamo Sara. y estás solita en casa ahora? (u_U) NO,... ?! me salgo, eres un baboso. is disconnected. **Script para facilitar sintaxis y colorear el chat de forma básica**. #!/bin/bash # Script: http://hacktracking.blogspot.de/2013/09/chatroom-encrypted-conversations-using.html basename=`which basename` cat=`which cat` nc=`which ncat` tput=`which tput` function client { $nc --ssl $ip $port > >(while read line; do prompt=`echo $line | awk '{print $1}'` message=`echo $line | sed "s/$prompt//"` if [ "$prompt" == "" ] || [ "$prompt" == "" ]; then echo -e "\e[35m\e[0m\e[90m$message\e[0m" else echo -e "\e[32m$prompt\e[0m\e[36m$message\e[0m" fi $tput setaf 3 done) echo -e "\e[35m\e[0m \e[90moperator closes the chatroom.\e[0m" reset } function reset { $tput sgr0; } function server { $nc --listen --chat --ssl $ip $port } function usage { $cat << eof Usage: `$basename $0` [-h] {-m c|s} {-i ip} {-p port} Options: -m: Mode c: Client s: Server -i: IP -p: Port eof } conns='' ip='' port='' while getopts "hm:i:p:" option; do case $option in h) usage && exit ;; m) mode=$OPTARG ;; i) ip=$OPTARG ;; p) port=$OPTARG ;; esac done if [ -z $ip ] || [ -z $port ] ; then usage && exit fi trap reset SIGINT case $mode in c) client ;; s) server ;; *) usage && exit esac Forma de utilizar el script. Servidor. chatroom -m s -i 192.168.1.55 -p 1234 Clientes. chatroom -m c -i 192.168.1.55 -p 1234