mIRC32 - Curso de Scripting: Uso de los Sockets en mIRC. Fecha creación: 12/4/99 - Última revisión: 12/4/99

Introducción a los Sockets 

En muchos aspectos la opciones de los sockets en mIRC se quedan muy cortas, pero son muy utiles. Los sockets sirven para mandar información a un usuari determinado por un puerto determinado, también puedes recibir información. Con los sockets podras incluir en tu script cosas como un scan de puertos, detectores de accesos a tus puertos, a mesura que vaya explicando el uso de los sockets pondre los ejemplos de un detector de conexiones y de un scan de back orifice.

Para poder entender el uso de los sockets debes ser un experto escribiendo alias, popups y scripts de los remotes. Has de saber que los sockets es un recurso que se agota, cada vez que hayas terminado de usar un socket debes cerrar la conexion para poder usar más conexiones.
 
 
Identificadores de los sockets 
 
Estos identificadores que os presento son los básicos que se han de saber para poder trabajar con los sockets. Ya te digo ahora que hay más identificadores, supongo que todos aparecen el la ayuda del mIRC, pero no tienen una explicación tan extensa.
 
$sock(nombre,numero) [.propiedad]
Retorna información referente a una conexión con sockets que has creado usando los comandos de socket. Si en "numero" no se especifica nada y se deja con el valor "N", mIRC asumira que es 1. Aqui tienes todas las propiedades, con la explicación de cada uno:

.name el nombre de la conexión que utilizas para identificarla.
.sent el numero de bytes mandados despues que la conexión se haya terminado.
.rcvd el numero de bytes recibidos despues que la conexión se haya terminado.
.sq/.rq el numero de bytes de la cola para mandar y recivir buffers respectivamente.
.ls/.lr el numero de segundos desde el ultimo envio y recibo de información de la conexión.
.mark el area maxima de almacenamiento del usuario, 512 bytes.
.type el tipo de conexion socket, TCP o UDP
.saddr la direccion y el puerto de origen del ultimo paquete UDP.
.sport exactamente lo mismo que la propiedad anterior (.saddr).

$sockname
Es el nombre que le has dado a una conexion para identificarla. Este identificador puede ser usado en los eventos para saber con que conexion se trabaja.
 
$sockerr
Sirve para comprovar si se ha realizado la conexión correctamente sin fallos. Si resulta haber algun fallo en la conexión, este identificador devolvera el valor > 1. Si todo esta normal no devolvera ningun valor.
 
$portfree(Puerto)
Sirve para comprobar si un puerto esta siendo utilizado o no. Devolvera $true si el puerto esta libre o $false si esta siendo usado ya.
 
 
Detectando conexiones con los sockets 
 
En este apartado aprenderas a poner a la escucha un puerto determinado, en definitiva para detectar conexiones entrantes, pero primero vamos a ver los comandos y los eventos que vamos a utilizar:
 
/socklisten <nombre> [puerto]
Sirve para escuchar un puerto determinado, se ha de indicar un nombre para poder identificar esta conexion.
 
on 1:socklisten:nombre:comandos
Este evento es llamado cuando cualquier usuario intenta conectar por el puerto que tu estas escuchando. Si tu quieres aceptar esta conexion has de usar el comando /sockaccept, sino la conexion sera cerrada.
 
/sockaccept <nombre>
Este comando acepta la conexion actual que tu estan escuchando y asigna un nombre para identificarla.
 
/sockrename <nombre> <nuevo_nombre>
Este comando asigna un nuevo nombre a una conexion existente.
 
/sockclose <nombre>
Cierra la conexion especificada, si no se especifica ninguna conexion se cierran todas.
 
Vamos a poner un ejemplo y a analizarlo para que lo puedas entender mejor. Este ejemplo sirve para detectar si un usuario intenta conectar por el puerto 12345, Netßus. Y cuando lo intente te avise el mIRC.
 
Aliases o popups:
/socklisten Netbus 12345 // ponemos a eschuchar el puerto 12345, con el nombre Netbus

Events, en remotes:
on 1:socklisten:NETBUS:{ // este evento se ejecutara cuando intentan conectar con la conexion Netbus
/sockaccept Netbus69 // acepta la conexion y le pone el nombre de Netbus69
beep // mIRC producira un pequeño pitido para avisarte
echo -a detectado una conexion por parte de $sock($sockname,1).ip // te informa de la IP del usuario
/sockclose Netbus69 } « cerrara la conexion con el usuario que ha intentado conectar

A partir de aqui se puede crear un script para resolver el nick del usuario haciendo un who con la IP, se ha de mejorar mucho en definitiva. Esto prueba que sirve de utilidad los sockets.


 
Abriendo y cerrando conexiones 
 
Los sockets nos permiten abrir conexiones con otros usuarios, para comprovar si tienen los puertos abiertos, hacer algun tipo de acto IRCwar,etc. Vamos a ver los comandos y los eventos que hemos de saber antes de hacer nada:
 
/sockopen <nombre> <direccion> <puerto>
Inicia una conexion con el puerto y la direccion que has especificado.
 
on 1:sockopen:nombre:comandos
Este evento es llamado cuando la conexion ha sido establecida mediante el comando /sockaccept
 
/sockclose <nombre>
Cierra la conexion especificada, si no se especifica ninguna conexion se cierran todas.
 
on 1:sockclose:nombre:comandos
Este evento es llamado cuando la conexion ha sido cerrada por el otro usuario.
 
Vamos a poner un ejemplo y a analizarlo para que lo puedas entender mejor. Este ejemplo sirve para detectar si un usuario intenta conectar por el puerto 12345, Netßus. Y cuando lo intente te avise el mIRC.
 
 
Aliases o popups:
/sockopen Netbus 195.77.120.10 12345 // abrimos una conexion por el puerto 12345 con 195.77.120.10

Events, en remote:
on 1:sockopen:Netbus:{ // la conexion ha sido aceptada
if ( $sockerr > 1 ) { // el usuario no tiene el puerto 12345 abierto
echo -a PortScan | $sock($sockname,1).ip no esta infectado por el Netßus } // te informa
else { // si el $sockerr no es >1 es que esta infectado por el Netßus
echo -a Portscan » $sock($sockname,1).ip esta infectado por el Netßus // te informa
/sockclose Netbus } // cierra la conexion Netbus

Bueno, con este ejemplo ya teneis un scan de Netßus de lo más sencillo, ya que aun se puede mejorar mucho.
 
Leer y escribir información 
 
Vamos a ver los comandos y los eventos que hemos de saber antes de hacer nada:
 
/sockwrite [-tn] <nombre> <texto>
Envia información a una conexion ya establecida lo más repatido posible. Los parametros son:
 
-t aunque el texto comienze por &, este sea tomado como texto y no como una variable binaria
-n inserta una nueva linia de texto en la conexion

on 1:sockread:nombre:comandos
Este evento es llamado cuando el otro usuario recibe la información.
 
Mira este ejemplo, cuando un usuario intente entrar por tu puerto 12345 le aparecera un mensaje:
 
En popups o alias:
/socklisten TONTIN 12345

En events, remotes:
on 1:socklisten:TONTIN:{ // Cuando intente la conexion...
/sockaccept TONTAZO // Acepta la conexion
/sockwrite -n $sockname Uix, mu listo no eres $sock($sockname,1).ip // Le manda un mensaje
/.timer69 1 2 /sockclose $sockname // En 2 segundos se le termina la conexion
echo -a Detectada una conexion de $sock($sockname,1).ip por el puerto 12345 // Te informa


este mini-documento ha sido creado por [SaRRiO] 12/4/99
e-mail donde puedes mandar comentarios: sarrio@univers.org


 
 Volver a la página principal