APS v2.0
 Cracks
 Hacking
 Programas
 Juegos
 Utilidades
 Tipos de Letra
 Download
 Scripts
 Addons
 Tutorial
 Scripting
 Links
 E-mail gratis
 Juegos On-Line
 Postales
 Guestbook



SCRIPTING
Control de Sockets 

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 (o zócalos de conexión) son los puertos lógicos a traves de los cuales los programas de nuestro ordenador se comucican con el resto de máquinas de una red a la que está conectada (caso por ejemplo de Internet), su manejo desde mIRC nos permite tener un cierto control sobre estas conexiones, abrirlas, cerrarlas, "escuchar" posibles accesos por cualqiera 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, detectoresde accesos a nuestra máquina... etc; a medida que se expliquen en este documento podrimos 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 areas 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 apartados correspondientes a esos temas en esta misma web. 
 
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 siquientes 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 ni 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 asumira que es 1. 
 
Este identificador tiene las siguientes propiedades: 

.name el nombre de la conexión que utilizamos, para identificarla.
.sent  el numero de bytes enviados 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 recibir buffers respectivamente.
.ls/.lr el numero de segundos desde el ultimo envio y recibo de información de la conexión.
.mark el área máxima 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 hemoss dado a una conexion para identificarla. Este identificador puede ser usado en los eventos para saber con que conexion se trabaja. 
 
$sockerr 
 
Sirve para comprobar si se ha realizado la conexión correctamente sin fallos. Si resulta haber algun fallo en ella este identificador devolverá un valor mayor que 1. Si todo esta normal no devolvera ningun 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 
 
En este apartado 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 pueto 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 conexion existente. 
 
/sockclose <nombre>  
 
Cierra la conexion 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 (Netßus). 
 

Incluir en aliases o popups: 
  
/socklisten Netbus 12345 « ponemos a eschuchar el puerto 12345, con el nombre Netbus 

Incluir en Events, en remotes: 
  
on 1:socklisten:NETBUS:{ « se activará 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 de aviso 
echo -a detectado una conexion 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> <direccion> <puerto> 
 
Inicia una conexion con el puerto y la direccion 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 conexion 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). 
 

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 }

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 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 
 
/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 informacion 
 
Observe este ejemplo, cuando un usuario intente entrar por el 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 

}

 

<---Atrás

Reportajes...

  Las Computadoras del futuro

  Tú en el futuro
  Los carros del futuro
  Nanotecnología
  Redes a la velocidad de la luz
  Investigación AntiVirus
  Los softwares más utilizados

Opciones...
Haz esta tu página principal
Agrégala a tus favoritos!