<

   
 
  CoNtRoL dE SoCkEtS
 

¿Qué son sockets?

 

En muchos aspectos la opciones de los sockets en mIRC se quedan muy cortas, pero son muy útiles. Los sockets (o zócalos de conexión) son los puertos lógicos a través de los cuales los programas de nuestro ordenador se comunican con el resto de máquinas de una red a la que está conectada (por ejemplo de Internet), su manejo desde mIRC nos permite tener un cierto control sobre estas conexiones, abrirlas, cerrarlas, "escuchar" posibles accesos por cualquiera de ellas etc... No podemos decir que sea una característica ni muy bien implementada ni muy potente en mIRC, pero si que nos permitirá hacer scripts muy interesantes con la posibilidad de crear escaneadores de puertos, detectores de accesos a nuestra máquina etc...; a medida que se expliquen en este documento podremos ir viendo algunos ejemplos de todo esto.

 

Para explicar el uso de los sockets partiremos de la base de que ya se conoce perfectamente el manejo de otras  áreas programables del miRC, en especial los alias, popups y el uso de variables, identificadores, eventos y remotes en general. Si no es así será necesario que estudie previamente los capítulos correspondientes a esos temas en este mismo manual.

 

Es necesario indicar, por último, que los sockets es un recurso que se agota, cada vez que hayas terminado de usar un socket debes cerrarlo para poder usar otro, es decir, no se puede estar trabajando con más de un zócalo de conexión a la vez.

Identificadores de los sockets  

 

Los siguientes identificadores son los básicos que se han de saber para poder trabajar con los sockets. Hay más que se pueden ver en la ayuda del programa, pero no son tan importantes ni tienen una explicación tan extensa.

 

$sock(nombre,numero) [.propiedad] - Retorna información referente a una conexión con sockets que hemos creado usando los comandos correspondientes. Si en "numero" no se especifica nada y se deja con el valor "N", mIRC asumirá que es 1.

 

Este identificador tiene las siguientes propiedades

 

 

.name

el nombre de la conexión que utilizamos, para identificarla.  

 

.sent

el número de bytes enviados después que la conexión se haya terminado.

 

.rcvd

el número de bytes recibidos después que la conexión se haya terminado.  

 

.sq/.rq

el número de bytes de la cola para mandar y recibir buffers respectivamente.  

 

.ls/.lr

el número de segundos desde el último envío y recibo de información de la conexión.

 

.mark

el área máxima de almacenamiento del usuario, 512 bytes.

 

.type

el tipo de conexión socket, TCP o UDP

 

.saddr

La dirección y el puerto de origen del último paquete UDP.

 

.sport

exactamente lo mismo que la propiedad anterior (.saddr).

$sockname - Es el nombre que le hemos dado a una conexión para identificarla. Este identificador puede ser usado en los eventos para saber con que conexión se trabaja.

$sockerr - Sirve para comprobar si se ha realizado la conexión correctamente sin fallos. Si resulta haber algún fallo en ella este identificador devolverá un valor mayor que 1. Si todo esta normal no devolverá ningún valor.

 

$portfree(Puerto) - Sirve para comprobar si un puerto esta siendo utilizado o no. Devolverá $true si el puerto esta libre o $false si está siendo usado ya.

Detectando conexiones con los sockets

Explicaremos como poner a la escucha un puerto determinado para detectar conexiones entrantes, pero primero vamos a ver los comandos y los eventos que vamos a utilizar: 

/socklisten <nombre> [puerto] - Nos permite asignar un nombre a un puerto determinado a fin de identificar la conexión y poderlo usar más adelante.

 

on 1:socklisten:nombre:comandos - Este evento se activa cuando cualquier usuario intenta conectar por el puerto que estamos "escuchando". Si queremos aceptar esta conexión usaremos el comando /sockaccept, si no la conexión será cerrada.


/sockaccept <nombre> - Este comando acepta la conexión actual que hemos detectado con el evento anterior, y le asigna un nombre para identificarla.

 

/sockrename <nombre> <nuevo_nombre> - Permite renombrar una conexión existente.

 

/sockclose <nombre> - Cierra la conexión especificada, si no se indica ninguna se cierran todas.

 

Vamos a poner un ejemplo y a analizarlo para entender mejor todo esto. Crearemos una pequeña rutina para detectar si un usuario intenta conectar por el puerto 12345 (NetBus).

 

Incluir en aliases o popups:

 

/socklisten Netbus 12345 - Ponemos a escuchar el puerto 12345, con el nombre Netbus

 

Incluir en Events, en remotes:  

 

on 1:socklisten:NETBUS:{   Se activará cuando intentan conectar con la conexión Netbus 

/sockaccept Netbus69  acepta la conexión y le pone el nombre de Netbus69

beep  mIRC producirá un pequeño pitido de aviso  

echo -a detectado una conexión por parte de $sock($sockname,1).ip  nos informa de la IP del usuario 

/sockclose Netbus69   cerrará la conexión con el usuario que ha intentado conectar

 }

A partir de aquí se puede crear un script para resolver el nick del usuario haciendo un who con la IP.

Abriendo y Cerrando Conexiones

 

Los sockets nos permiten abrir conexiones, por ejemplo para detectar los puertos abiertos de otro usuario. Vamos a ver los comandos y eventos que hemos de saber antes de hacer nada:

 

/sockopen <nombre> <dirección> <puerto> - Inicia una conexión con el puerto y la dirección IP que especificada.

 

on 1:sockopen:nombre:comandos - Este evento se activa cuando la conexión ha sido establecida mediante el comando /sockaccept.

on 1:sockclose:nombre:comandos - Este evento se activa cuando la conexión ha sido cerrada por el otro usuario.

Vamos a poner un ejemplo y a analizarlo para entenderlo mejor. Este ejemplo sirve para detectar si un usuario tiene abierto el puerto 12345 (Netßus). /sockopen Netbus 195.77.120.10 12345

 

Aliases o popups:

 

/sockopen Netbus 195.77.120.10 12345 - abrimos una conexión por el puerto 12345 con 195.77.120.10

 

Events, en remote:

  

on 1:sockopen:Netbus:{   la conexión 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 }

   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 }

    /sockclose Netbus  cierra la conexión Netbus

}

 

Bueno, con este ejemplo ya tienes un scan de Netßus de lo más sencillo, ya que aun se puede mejorar mucho.

Leer y Escribir Información  

/sockwrite [-tn] <nombre> <texto> - Envía información a una conexión ya establecida lo más repetido posible. Los parámetros son: 

 

-t

aunque el texto comience por &, este sea tomado como texto y no como una variable binaria

 

-n

inserta una nueva línea de texto en la conexión  

 

 

on 1:sockread:nombre:comandos - Este evento es llamado cuando el otro usuario recibe la información

Observe este ejemplo, cuando un usuario intente entrar por el puerto 12345 le aparecerá un mensaje:

 

En popups o alias:

 

 /socklisten TONTIN 12345


En events, remotes:

 

 on 1:socklisten:TONTIN:{  Cuando intente la conexión...

    /sockaccept TONTAZO  Acepta la conexión

    /sockwrite -n $sockname Uix, muy listo no eres $sock($sockname,1).ip  Le manda un mensaje

    /.timer69 1 2 /sockclose $sockname  En 2 segundos se le termina la conexión

echo -a Detectada una conexión de $sock($sockname,1).ip por el puerto 12345

    }

 


 
  Hoy habia 19 visitantes (33 clics a subpáginas) ¡Aqui en esta página!  
 
-----------------------------------------------------------------------
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis