Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Garfield07 en 17 Enero 2011, 19:08 pm



Título: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Garfield07 en 17 Enero 2011, 19:08 pm
Mmm, lo he reescrito para la Wiki...
http://wiki.elhacker.net/programacion/cc/articulos/introducion-a-los-sockets-en-ansi-c

Un saludo!


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: rdzlcs en 17 Enero 2011, 19:18 pm
Se ve muy lindo e interesante, pero poner el código como código, para que se vea :P porfa..

SAludos


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Garfield07 en 17 Enero 2011, 19:40 pm
Jeje gracias...
El code esta mejor en el .doc, aunque aqui mismo te dejo el original, en GeSHi...
Código
  1. #include <sys/socket.h>
  2. #include <arpa/inet.h>
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. #include <signal.h>
  9. #include <time.h>
  10.  
  11. int socketfd, newsocket;
  12. char *filename;
  13.  
  14. void shutup (int signal)
  15. {
  16. FILE *log;
  17. log=fopen (filename, "a+");
  18. times ();
  19. printf ("Shutting down...\n\n");
  20. fprintf (log, "Shutting down...\n\n");
  21. close (newsocket);
  22. close (socketfd);
  23. exit (0);
  24. }
  25.  
  26. int times ()
  27. {
  28. FILE *log;
  29. time_t now=time (0);
  30. struct tm *ahora;
  31. char buffer [40];
  32. ahora=localtime ((const time_t*)&now);
  33. strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  34. log=fopen (filename, "a+");
  35. printf ("%s   ", buffer);
  36. fprintf (log,"%s   ", buffer);
  37. return 0;
  38. }
  39.  
  40. int main (int argc, char *argv [])
  41. {
  42. time_t now=time (0);
  43. struct tm *ahora;
  44. char hora [40];
  45. ahora=localtime ((const time_t*)&now);
  46. strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
  47. printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);
  48.  
  49. if (getuid()!=0)
  50. {
  51. printf ("This proccess must be run by root.\n\n");
  52. return 1;
  53. }
  54. if (argc<3)
  55. {
  56. printf ("Use: %s <PORT> <LOG> [MODE]\nMode:\t\t0) Fork the proccess to background [DEFAULT].\n\t\t1) Run in the terminal.\n\n", argv [0]);
  57. return 1;
  58. }
  59. int cont;
  60. FILE *log;
  61. struct sockaddr_in client, host;
  62. char buffer [1024];
  63. int size=sizeof (client);
  64.  
  65. filename = argv [2];
  66.  
  67. socketfd=socket (2, 1 ,  0);
  68. host.sin_family=AF_INET;
  69. host.sin_port=htons (atoi (argv [1]));
  70. host.sin_addr.s_addr=0;
  71. bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
  72.  
  73. listen (socketfd, 3);
  74.  
  75. log=fopen (filename, "a+");
  76. times ();
  77. if (argv [3] != NULL && atoi (argv [3]) == 1)
  78. printf ("\nStarting up...\n\n");
  79. fprintf (log, "Starting up...\n\n");
  80.  
  81. signal (SIGTERM, shutup);
  82. signal (SIGINT, shutup);
  83.  
  84.  
  85. if (argv [3] == NULL || atoi (argv [3]) == 0)
  86. daemon (1, 0);
  87.  
  88. while (1)
  89. {
  90. newsocket=accept (socketfd, (struct sockaddr*)&client, &size);
  91.  
  92. log=fopen (filename, "a+");
  93. times ();
  94. printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  95. fprintf (log, "Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  96.  
  97. cont=recv (newsocket, &buffer, 1024, 0);
  98. while (cont>2)
  99. {
  100. printf ("%d", cont);
  101. log=fopen (filename, "a+");
  102. times ();
  103. buffer [cont-1]='\0';
  104. printf ("RECV %d bytes: %s ", cont-2, buffer);
  105. fprintf (log, "RECV %d bytes: %s\n", cont-2, buffer);
  106.  
  107. cont=recv (newsocket, &buffer, 1024, 0);
  108. }
  109. log=fopen (filename, "a+");
  110. times ();
  111. printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  112. fprintf (log, "Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  113. close (newsocket);
  114. }
  115. close (socketfd);
  116. return 0;
  117. }
  118.  

Este corresponde al 3.0. El 2.0 es el mismo pero con menos cosas. El 4.0 es el mismo para Windows...


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: anonimo12121 en 18 Enero 2011, 01:35 am
Sagrini modifica el primero y quedara pro , gracias por ela porte


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Garfield07 en 19 Enero 2011, 18:18 pm
Modificado! ya esta creo que se ve mejor... Descargaros el .doc, es mas facil no? Nop, no tiene macros.... no se ni crearlas  ;)


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: rdzlcs en 19 Enero 2011, 18:41 pm
Modificado! ya esta creo que se ve mejor... Descargaros el .doc, es mas facil no? Nop, no tiene macros.... no se ni crearlas  ;)

Muy bueno, toda la info que se encuentra sobre el tema esta en ingles, y para los que estamos peleados con ese idioma, o entendemos poco, se nos complica, gracias por tu aporte..

SAludos


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Garfield07 en 19 Enero 2011, 19:00 pm
Bueno, le he escrito a Littlehorse para que lo mire, aun nada :-[ lo voy a pedir como post interesante o algo, o no llega a tanto? Realmente yo para escribir soy un poco cafre, pero... Gracias!


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Littlehorse en 19 Enero 2011, 19:38 pm
No hace falta pedir nada. Pueden poner sus posts en este hilo (https://foro.elhacker.net/programacion_cc/recopilatorio_temas_importantes_de_programacion_cc-t174285.0.html) y ya queda en el recopilatorio. En el caso de los sources interesantes, es lo mismo, pueden postearlos aqui (https://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html) y yo luego los agrego a la lista principal.

Bueno, le he escrito a Littlehorse para que lo mire, aun nada :-[

Claramente "aun nada", estaría bien que tengas un poco de paciencia, ten en cuenta que todos tenemos una vida y nuestras cosas que hacer; no podemos estar 24hs pendientes del foro. Me enviaste el pm a las 19:00:34 e hiciste el post citado a las 19:00:58, es decir, no esperaste mas de 24 segundos.




En cuanto al post, no lo he leído todo. Trata de formatearlo un poco mejor para que sea mas legible, comenzando por quitar el contenido completo de la etiqueta quote y code y colocar los espacios correctamente.
Y por cierto, no se pueden poner direcciones de correo en los posts.

Saludos


Título: Re: [Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Publicado por: Garfield07 en 19 Enero 2011, 19:50 pm
Bueno Littlehorse perdona lo que pasa es que hice un copy-paste del mensaje porque tecnicamente lo habia escrito con el nombre de E.I. pero el recibio ese dia bastantes mensajes y el mio cayo en el olvido. Asi que te escribi a ti y puse el mensaje directamente. Espero que no te lo tomes a mal, se me habia ido...

Ya he colgado el post. Perdonad por las molestias   :-\ lo siento....
PD: Gracias LH por lo del email habia copiado directamente el texto del .doc y no me habia dado cuenta que llevaba mi e-mail. Luego he ido mejorando el code, metiendole los  "code"...