PROGRAMACION:LOS SOCKETS Y TU. AMOR A PRIMERA VISTA.
AUTOR: W3NDIG0.
EZINE:DISIDENTS EZINE
-------------------------------------------------------------------------------

ESTE DOCUMENTO ES UNA PEKEA INTRODUCCION A LO K ES UN SOCKET DESDE 0, ES BUENO EMPEZAR DESDE 
LA BASE.


PRIMERO COMENEZEMOS CON UNA PEQUEA DESCRIPCION DE PORQUE TE INTERESA SABER QUE ES UN SOCKET, 
YA QUE EMPEZAMOS DE 0 PATA 0.

PA K KOO VALE UN SOCKET?......
	
	SEGURO QUE A LO LARGO Y ANCHO DE TU VIDA...TE HAS ENCONTRADO CON EL PANOLIS DE TURNO QUE 
TE ASEGURO QUE  UN PUERTO DE TU ORDENATA SE PUEDE ABRIR A BASE DE METERLE ICMPS COMO UN 
LOCO...O AL SKIZOFRENICO AGUDO QUE TE DIJO ESO DE "ARRGHH CUANDO ABRO EL EXPLORER SE ME ABREN 
PUERTOS!!!"...BIEN...SEGURO QUE TE LOS HAS ENCONTRADO, YO AL MENOS SI.

	UN SOCKET ES UN "PROGRAMILLA" (VAMOS A LLAMARLO ASI, PUESTO K IGUAL NO TIENES NI IDEA DE 
C O DE VBASIC O DE  LO K SEA) QUE CONTROLA LAS COMUNICACIONES DE UN PUERTO, ES DECIR, UN SOCKET
CONTROLA UN PUERTO, LO QUE SE ENVIA POR EL, LO QUE SE RECIBE POR EL, EN QUE PROTOCOLO LO VAMOS
A ENVIAR, ETC...

	DEJEMOSLO CLARO DESDE EL PRINCIPIO, PARA QUE ESISTA COMUNICACION ENTRE 2 ORDENADORES, 
DEBE DE HABER 2 PUERTOS  ABIERTOS, Y POR TANTO UN SOCKET COMO POCO,EN CADA MAKINA,CONTROLANDO 
CADA PUERTO


	APARTIR DE AHORA, PARA TI SOCKET TE DEBE DE SONAR COMO PUERTO ABIERTO O COMO CONTROL DE 
UN PUERTO.

	ASIKE RESUMIENDO HASTA AHORA: UN SOCKET VALE PARA CONTROLAR UN PUERTO DE COMUNICACIONES, 
Y POR TANTO VALE PARA ESTABLECER COMUNICACION ENTRE 2 MAKINAS.



  COMO BUEN USUARIO DE LA RED, SABRAS K EN EL MUNDO ESISTE UNA COSA K SE LLAMA PROTOKOLO, TODO 
EL MUNDO LO DICE.. TODO EL MUNDO LO COMENTA..TODO EL MUNDO HABLA DE EL.. PERO K KOJONES ES UN 
PROTOKOLO?...LO VOY A DECIR SENCILLAMENTE,.. IMAGINEMOS K IO SOY DE NACIONALIDAD RUSA, Y PARLO 
EN RUSO, TU ERES ITALIANO Y PARLAS ITALIANO, EN ESTE CASO PARA ENTENDERNOS...
NUESTRO PROTOKOLO ES EL ESPAOL, ES DECIR, UN PROTOKOLO ESTABLECE LAS REGLAS DE COMO VA A SER 
LA COMUNICACIN ENTRE DOS MAKINAS, PARA K DOS SISTEMAS DIFERENTES PUEDAN ENTENDERSE.(MUYYY 
RESUMIDIIIIN)

BIEN...NUESTRO SOCKET SIRVE PARA COMUNIKAR 2 MAKINAS..AUNKE ESTA SEA UN SERVER Y UN CLIENTE, 
LA INFO ES ENTRE LAS DOS MAKINRAS, CADA CLIENTE ESTABLECE UNA "CONVERSACION" PRIVADA CON EL 
SERVER, POR LO TANTO DEBEREMOS DE ESTABLECER UN PROTOKOLO PARA K NOS ENTENDAMOS LAS DOS MAKINAS
SIN PROBLEMAS NO?

BIEN LO PRIMERO ES VER BAJO K CONDICIONES VAMOS A USAR NUESTRO SOCKET;

DOMINIOS:
	UNIREMOS DOS MAKINAS EN INTERNET?: BIEN, SI UNIMOS DOS MAKINAS EN INTERNET, PODEMOS DECIR
K VAMOS A TRABAJAR BAJO UN DOMINIO DE UN PROTOKOLO, ES DECIR, NUESTRO SOCKET DEBERA DE CUMPLIR 
LAS NORMAS DE ESE PROTOKOLO, A ESTE PROTOKOLO LO DENOMINAMOS TCP/IP.


	UNIREMOS DOS MAKINAS BAJO UN MISMO SISTEMA?: SI UNIMOS DOS MAKINAS CON EL MISMO SISTEMA, 
      NO HAY MUCHO PROBLEMA NO?, LAS DOS HABLAN CHINO PROVENZAL, ASIKE PASE LO K PASE SE VAN A 
      ENTENDER.

	HAY MAZO MAS DOMINIOS, PERO NO NOS INTERESAN, YA K CON EL PRIMERO ES KON LO K VAS A 
      CURRAR MAS...


BIEN, HEMOS DECIDIDO K VAMOS A CURRELEAR CON EL SOCKET EN INTERNETE...AHORA..COMO NOS 
COMUNIKAMOS?

ES IMPORTANTE K ENTRES EN EL CONCEPTO DE DIFERENCIAR DOS TIPOS DE COMUNICACION, O DE TIPO DE 
SOCKET, LOS OIRAS LA PILA VECES, UDP Y TCP.

	BIEN, HE OIDO DECIR A LOS KREADORES DE CIERTO TROYANO (JODO ADEMAS LO PONEN EN LA PUTA 
WEB) K UN PUERTO UDP NO ES DETECTABLE POR NETSTAT, SERA EL SUYO, PORKE EL RESTO DE LOS NETSTAT 
DEL PLANETA NO SOLO LO HACEN SI NO K ADEMAS..ANDAAAA SI DAN LA CONEXION REMOOTAAA,,,ESPABILA 
CHAVAL xdd UN PUERTO UDP Y TCP SON LO MISMO LA UNIKA DIFERENCIA APARTE DE LA QUE VIENE A 
CONTINUACION ES K EN UN NETSTAT NO APARECE EL LISTENING, EL MOTIVO ES PORKE EL UDP VA POR 
PAKETITOS Y NO SE CONTROLA UN ENVIO-REENVIO CORRECTO DE LOS DATOS, ES DECIR..NO SE ACEPTA 
UNA CONEXION COMO TAL..NO HAY LISTENING, PORKE EL LISTENIG ES UN ESTADO EN EL CUAL, EL SOCKET 
ESTA ESPERANDO LA CONEXION DE OTRO PARA ACEPTAR O RECHAZAR LA CONEXION..ES DECIR..PUEDES 
MANDARLO A FREIR CHURROS..O DARLE LA BIENVENIDA. A CONTINUACION OS EXPLIKO MUY POR ENCIMA LA 
DIFERENCIA ENTRE UN udp Y U tcp AMBOS PERTENECEN AL tcp-ip, EL UDP SE BASA EN ip Y EL TCP 
EN ..LOGIKAMENTE TCP. 
        (TENEIS MAS INFO EN EL OTRO DOCUMENTO DEL EZINE..TCP-IP A FONDO)


 ANTES ACLARAR UNA COSA..CUANDO HABLAMOS DEL PROTOKOLO TCP-IP..NO NOS REFERIMOS A UNO..SI NO 
A DOS PROTOKOLOS DIFERENTES, TCP ES UNO..IP ES OTRO.


U D P (UN DEFINED PROTOKOL)

	NO USAN EL TCP, SI NO EL IP, ES DECIR, NO SE CONTROLA SI EL PAKETE LLEGA, O LLEGA 
DESORDENADO, O SI SIKIERA LLEGA, LA MAYORIA DE LOS GILIPOLLAZ K HE OIDO POR EL IRC, ASEGURAN 
K EL UDP ES LA OSTIA xD, AHORA YOU CATCH THE POWER, SI KIERES VACILARLES xD YA PUEDES. 
ENTENDERAS MEJOR LA IMPORTANCIA DE HACER CONEXIONES TCP AHORA, CUANDO TE LEAS K COO ES 
UN TCP...

T C P (TASK CONTROL PROTOKOL)

	SE BASAN EL EL TCP, PO LOGIKA AMOS, EL ESTABLECER UNA CONEXION TIPO TCP TIENE UNA VENTAJA
ESTUPENDISIMA, TE PERMITE SABER SI TUS PAKETES HAN LLEGADO, O SI NO HAN LLEGADO, HAY UNA COSA 
K SE LLAMA ACK Y NACK, EL ACK ES ENVIADO POR LA OTRA MAKINA CUANDO VA TODO CORRECTO, EL NACK
ES CUANDO LE FALTA ALGO O NO HA LLEGADO ALGO O HAY ERRORES, EN ESE CASO TENDRAS K REENVIAR LO 
K HAS MANDADO, NO TE ANGUSTIES, NO ES TAN JODIDO COMO PARECE A SIMPLE VISTA, EN EL PROXIMO
 NUMERO TENDRAS LA OKASION DE VER COMO SE PROGRAMA UN SOCKET TANTO EN C COMO EN VBASIC. 



RAW 

        EL USO DE SOCKETS RAW DA MUCHISIMO JUEGO, TODO EL MUNDO HABLA DE ELLOS, SE DICE, SE OYE
SE ESCUCHA, PERO, POKA GENTE SABE PA K KOO SON, UN SOCKET RAW TE PERMITE DEFINIR A TI EL 
PROTOKOLO, LO CUAL TE DA MANGA ANCHA PA UN MONTON DE COSAS, POR EJEMPLO PARA EL SPOOF, YA K 
PUEDES DEFINIR UN PROTOKOLO EN K MANDES EN VEZ DE LA IP TUYA LA DE WWW.MICROSOFT.COM, O LO K 
TE SALGA DE LOS EGGS xd.


BIEN...AHORA EN TERMINOS SERIOS...LOS SOCKETS K ESTAN BAJO EL PROTOKOLO TCP/IP ES DECIR, UDP,
TCP Y RAW, SON CLASIFICADOS EN:

SOCKET STREAM : TCP
SOCKET DATAGRAM: UDP

EN ADELANTE CUANDO HABLEMOS DE K UN SOCKET SE ENCUENTRA BAJO EL PROTOKOLO TCP/IP DIREMOS K SON
DE LA FAMILIA INTERNET, ADRESS FAMILY INET,---> AF_INET

ASIKE NUESTRA CLASIFIKACION KEDA EN:

AF_INET: 
	s. stram----->(TCP-->HAY CONTROL Y SE REEENVIA SI LAS COSAS NO HAN IDO BIEN)
	s.datagram--->(UDP-->LA INFO SE MANDA EN DATAGRAMAS Y NO HAY CONTROL)
	s.raw     --->(DEFINIDIDO O MODF. POR EL USUARIO)   
        


BIEN...AHORA VOY A EXPLIKAR COMO SE TRANSMITE EN CUALKIER PROTOKOLO, VAMOS A VER, CUANDO 
ESCRIBES ALGO AL DISKO DE TU MAKINA, BIEN SEA AL HD, COMO AL FLOPPY COMO AL CD, EN DEFINITIVA 
A CUALKIER DISPOSITIVO, EL PRIMER PASO ES CREAR LO K SE DENOMINA UN BUFFER.

K ES UN BUFFER, UN BUFFER ES UN SPACIO EN MEMORIA DONDE SE VAN METIENDO LOS DATOS HASTA K SON
"VOMITADOS" AL DISPOSITIVO.

	AL IR "VOMITANDO" LOS DATOS, NOS ENCONTRAMOS K ESTAMOS EN EL MISMO SISTEMA, SURGE 
ENTONCES EL MISMO PROBLEMA DE ANTES, DOS MAKINAS DIFERENTES PODRIA SER K NO ALMACENASEN LOS 
DATOS DE LA MISMA MANERA..(MUY RESUMIIIIDO), ASIKE HABRA K PONERSE DEAKUERDO ...DOS CONCEPTOS.

NETWORK BYTE ORDER Y HOST BYTE ORDER....

A LA HORA DE ENVIAR NUESTROS DATOS, DEBEMOS HACERLO DE FORMA K COINCIDA CON UN STANDART, ES 
COMO UN PROTOKOLO, LOS INGLESES PONEN EL ADJETIVO DELANTE DEL NOMBRE (RED CAR) Y LOS ESPAOLES
 DETRAS (COCHE ROJO), ASIKE DEBEREMOS DE PONERNOS DEAKUERDO NO?...ESO ES EL NETWORK BYTE ORDER.

A LA HORA DE RECIBIR DATOS POR NUESTRO SOCKET TENDREMOS K TRADUCIR DE INGLES A CRISTIANO 
NO?...ES DECIR, TRADUCIR LO K NOS ESTA LLEGANDO A COMO LO ALMACENA NUESTRA MAKINA EN 
MEMORIA..A ESO LE LLAMAN HOST BYTE ORDER...OSEA..EL ORDEN DE LAS BYTES DEL HOST.

K KIEN CONTROLA ESTE PASO DE UNO A OTRO..BIEN..ESO LO HACE EL DENOMINADO ALGORITMO NAGLE, NO 
SE POKE SE IAMA NAGLE..PERO SE IAMA ASI.., EL CONTROLA EL PASO DE HOST BYTE ORDER A NETWORK 
BYTE ORDER.

BIEN...POS HASTA AKI, A K SE TE HACE LA BOKA AGUA NOOO?...POS A ESPERAR AL PROXIMO NUMERO.. SI 
DESEAS AMPLIAR INFO..EL N0RTH HA ESCRITO LA PRIMERA PARTE DE COMO HACER TROYANOS CON VBASIC..
ASIKE AHORA ENTENDERAS MUCHO Y BUENO, LEELO..EN LA SEGUNDA EDICION IRAS MAS FINO YA LO VERAS...

EN LA PROXIMA ENTREGA VEREMOS, COMO DEFINIR UN SOCKET (CON FUNCIONES Y TAL) Y COMO HACER 
CONEXIONES...EN POCO ESTAREIS HACIENDO TODO TIPO DE APLICACIONES...YA LO VEREIS.
