============================================================================= --------------------------------------------------------------------------03- -----( Programacion en C: BSD Sockets )--------------------------------RM-11] -----[ [Hellraiser] ]--------------------------------[hell@raza-mexicana.org] .......................................................................... --------------==[ PROGRAMACION EN C: BSD Sockets ]==---------------------- ``````````````||``````````````````````````````````||`````````````````````` cCCCCCCC || Escrito por: || cCCCCCCC Cc || [Hellraiser] para RaZa MeXiCaNa || Cc Cc || || Cc Cc || Mail: || Cc cCCCCCCC || URL: www.raza-mexicana.org || cCCCCCCC \\================================// Hola geeks and neogeeks! (jejejeje), soy [Hellraiser], el argentino mas simpatico de toda RaZa MeXiCaNa (jajajajajaj just kidding). Bueno, voy al punto. Esta vez les escribi un texto sobre BSD Sockets (lamma-mente dicho son sockets de Unix C jejeje). Hice este texto porque el br0 Trovalz (si otro pal de RaZa jeje) me pidio que le explicase como mierda se arma un socket bajo Unix C, y que mejor manera de explicarlo que mediante un neofit txt =D. COMENTARIO: Hey Trovalz, cabron :], aqui tienes el puto texto, disfrutalo y quiero que luego me muestres un programa tuyo que use sockets as1 ve0 que has aprendido algo mierda XD. Bueno, Bueno, me he ido muy a la mierda jeje, ire directamente a explicar. [*] NOTA PARA C PROGRAMMERS: ~~~~~~~~~~~~~~~~~~~~~~~ Joder, les he hecho este texto para los que no saben armar un puto socket =D. Van a entender todo. [*] NOTA PARA NON-C PROGRAMMERS: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Esta vez si que los jodi eh!!! Voy a explicar directamente como armar un socket, no piensen que voy a detenerme a explicar como se copia una estructura, que mierda es un char, un int y que carajo es main (jeje). Si quieren aprender C desde 0, bajense un programa que predique la licencia GPL (www.fsf.org y www.gnu.org) y lean los codigos comentados. En este texto les mostrare como cuernos se arma un socket CLIENTE. No voy a deternerme a explicar este termino, porque no soy una enciclopedia carajo =D. Bueno, las cabeceras (vamos, headers) a incluir son: -- Para armar un socket, debemos llenar una estructura, llamada sockaddr_in (se encuentra en socket.h). La estructura en cuestion contiene estos miembros: sin_family sin_port sin_addr.s_addr sin_zero Paso a explicar que va en cada parte de esta estructura: sin_family = Aqui debemos llenar con el 'domain' del socket. Ejemplo, PF_INET o AF_INET para una comunicacion sobre IPv4. sin_port = Puff... aqui se especifica un puerto donde luego nos conectaremos. sin_addr.s_addr = En este m13mbr0 especificamos la direccion IP donde nuestro cliente se conectara. NOTA [+]: Dije IP, no Hostname. sin_zero = No voy a profundizar mucho en este miembro. Solo debemos llenarlo con 8 (ocho) 0 (ceros). Luego de llenar tal estructura (como luego mostrare), debemos armar el socket. Esta es la sintaxis: int socket(int domain, int type, int protocol); un ejemplo de armar el socket para una comunicacion TCP/IP sobre IPv4 seria (si desean ver mas, 'man socket'): un_integer = socket(AF_INET, SOCK_STREAM, 0); Esto armara el socket dentro del integer previamente definido al cual hemos llamado 'un_integer'. Bueno, he aqui un 'small' cliente de BSD Sockets que se conecta al puerto 23 del ip 127.0.0.1. =======[ C0RT4R AQU1 ]================================================== // Defino las cabeceras a usar #include #include #include #include #include // Comienza el bloque principal del progg13 int main() { int sock; // Este es el Integer que usare para armar el socket struct sockaddr_in estructura; /* Aqui copio la estructura del socket que se encuentra en socket.h a una nueva llamada 'estructura' */ sock=socket(AF_INET, SOCK_STREAM, 0); /* Como he dicho, armamos un socket TCP/IP bajo IPv4 */ estructura.sin_family=AF_INET; /* Especificamos que es un socket IPv4 */ estructura.sin_port=htons(23); /* Aqui especificamos el port. Notaran que puse htons(), bueno es una funcion que convierte un numero decimal, a 'numero de red'. (man htons) estructura.sin_addr.s_addr=inet_addr("127.0.0.1"); /* Aqui especificamos el IP a donde nos conectaremos. Para que el socket entienda un string como el ip que ingre- samos, tenemos que pasarlo por la funcion inet_addr(), que convierte un string en un ip de octales. */ bzero(&(estructura.sin_zero), 8); /* Aqui, como les dije previamente, llenamos de ceros a este miembro (sin_zero) de la estructura. */ /* Aqui , con bzero(), finaliza el armado del socket */ connect(sock, (struct sockaddr*)&estructura, sizeof(estructura)); /* En la linea superior, le indicamos que conecte el socket. En caso de error, nos retornara un valor menor a cero. */ close(sck); /* Cerramos el socket */ return(0); /* Mierda... ya saben que es est0 :] */ } ===========[ C0RT4R AQU1 ]===================================================== Compilan eso, y si no les tira un Segmentation Fault, funciono =). Bueno, espero que hayan aprendido a usar los putos sockets (clientes). Para cuando yo tenga ganas les hare uno de servidores. $ man socket $ man connect $ man htons $ man inet_addr -- Agradecimientos: a toda la RaZa MeXiCaNa, a Ezkracho Team (guys, im in TV!), a #linux, #hack, #korn, #raza-mexicana, #freshmeat. a hertmx, a SET, a RareGaZz, a Brain Overfl0w, a Digital Rebel y a toda la Crew que va conmigo a AlternativA los viernes por la noche. --NOTA--: pzi, si me ven de nuevo borracho, no me hagan comprar alcohol!. ------------------------------- Texto Escrito por [Hellraiser] RaZa MeXiCaNa MAIL: hell@raza-mexicana.org URL: www.raza-mexicana.org Ezkracho Team MAIL: hell@ezkracho.com.ar URL: www.ezkracho.com.ar ------------------------------- BYT3Z!!!!! +++SignOff: [Hellraiser] - ~Vampyre@ezkracho.com.ar (Born To Raise Hell!)