elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] HTTP-PROXY
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] HTTP-PROXY  (Leído 1,959 veces)
D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
[C] HTTP-PROXY
« en: 1 Marzo 2011, 00:03 am »

Hola gente, hace tiempo que no posteo. Un amigo estaba viendo cómo hacer un proxy http y me pasó un draft para que le eche un vistazo.

La verdad es que hace rato que no veo nada de sockets, y menos de HTTP. Quizá cuando tenga un rato le eche un vistazo capturando paquetes para ver si trabaja como debe, mientras tanto se los dejo para que me den opiniones / mejoras / comentarios, y jueguen un rato capturando paquetes.

Código
  1. # include <stdio.h>
  2. # include <sys/types.h>
  3. # include <sys/socket.h>
  4. # include <sys/time.h>
  5. # include <sys/param.h>
  6. # include <sys/file.h>
  7. # include <netinet/in.h>
  8. # include <netdb.h>
  9. # include <ctype.h>
  10. # include <string.h>
  11. # include <stdlib.h>
  12. # include <errno.h>
  13. # include <limits.h>
  14. # define ERR 5;
  15. # define DATA 3;
  16. # define ACK 4;
  17. # define BLOQUE 516;
  18. # define DIR_SERVIDOR 100;
  19. FILE *archivo;
  20. FILE *archivo2; //20
  21. char no_arch[20];
  22. char nom_arch[20];
  23. char error[1024];
  24. char resp[1024];
  25. char data[516];
  26. char data2[516];
  27. char ack[1024];
  28. char Met[5]= "post\0";
  29. uint16_t error_tipo, ack_tipo, cod, tipo;
  30. int socketserv, nro_frag, cant, n, socketcli, posi;
  31. struct sockaddr_in extremoRemoto;
  32. struct sockaddr_in enlace;
  33. char buffer[512];
  34. char recibido[512];
  35.  
  36.  
  37. void codigoError()
  38. // Establece el codigo de error que voy a mandar en el paquete ERR al cliente
  39. {
  40. switch (errno)
  41. {
  42. case 2: cod-1; break;
  43. case 5: cod-2; break;
  44. }
  45. }
  46. int timeout(int fd, int sec)
  47. /*Controla el timeout. Devuelve 0 si se termino el timeout, -1 en caso de
  48. error y un valor positivo si hay un evento pendiente*/
  49. {
  50. fd_set conj_lectura;
  51. struct timeval tiempo;
  52. int r;
  53. FD_ZERO(&conj_lectura);
  54. FD_SET(fd, &conj_lectura);
  55. tiempo.tv_sec=sec;
  56. tiempo.tv_usec=0;
  57. r=select(FD_SETSIZE, &conj_lectura, NULL,NULL,&tiempo);
  58. }
  59. void metodo()
  60. {// este metodo selecciona post / head.
  61. //Anulado
  62. //Met[1]= "p";
  63. //Met[2]= "o";
  64. //Met[3]= "s";
  65. //Met[4]= "t";
  66. //Met[5]= "\0";
  67. }
  68. void busca_archivo(int j)
  69. {
  70. int compa;
  71. compa=strncmp(buffer+j," HTTP",5);
  72. if (compa==0)
  73. {
  74. posi=j;
  75. }
  76. else
  77. {
  78. j++;
  79. (void)busca_archivo(j);
  80. }
  81. }
  82. int main()
  83. {
  84. int sd,sdc,lon,ar;
  85. struct sockaddr_in ser,cli;
  86. ser.sin_family=AF_INET;
  87. ser.sin_port=htons(80);
  88. ser.sin_addr.s_addr=INADDR_ANY;
  89.  
  90. char archi[512];
  91. posi=0;
  92. sd=socket(PF_INET,SOCK_STREAM,0);
  93. if (bind(sd,(struct sockaddr *) &ser,sizeof(ser)) < 0)
  94. {
  95. perror("Error en Bind: ");
  96. exit(-1);
  97. }
  98. listen(sd,5);
  99. while (1)
  100. {
  101. lon=sizeof(cli);
  102. sdc= accept(sd,(struct sockaddr *) &cli, &lon);
  103. ar=recv(sdc,buffer,sizeof(buffer),0);
  104. (void)busca_archivo(1);
  105. int sock_serv,con,env,rcv,envbro;
  106. struct sockaddr_in server;
  107. server.sin_family=AF_INET;
  108. server.sin_port=htons(80);
  109. server.sin_addr.s_addr=DIR_SERVIDOR;
  110. sock_serv=socket(PF_INET,SOCK_STREAM,0);
  111. con=connect(sock_serv,(struct sockaddr *)&server,sizeof(server));
  112. if (con!=0)
  113. {
  114. perror("Error en Conectar con el Servidor: ");
  115. }
  116. else
  117. {
  118. env=send(sock_serv,buffer,sizeof(sock_serv),0);
  119. rcv=recv(sock_serv,recibido,sizeof(recibido),0);
  120. if (rcv>=0)
  121. {
  122. envbro=send(sdc,recibido,rcv,0);
  123. }
  124. }
  125. close(sock_serv);
  126. close(sdc);
  127. }
  128. close(sd);
  129. }
  130.  

Saludos,
Happy Hacking


En línea

OpenBSDFreeBSD
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Extractor de Proxy Desde http://www.proxy-list.net/
Scripting
OzX 3 762,189 Último mensaje 28 Octubre 2008, 18:38 pm
por Littlehorse
Peticion HTTP por proxy
Hacking
TomaSs 2 4,687 Último mensaje 23 Junio 2011, 07:36 am
por TomaSs
¿Si un programa no tiene configuracion Proxy http con autenticacion?
Redes
peternorton 2 5,619 Último mensaje 29 Noviembre 2011, 18:56 pm
por peternorton
Ayuda con visitas a HTTP (con proxy por medio)
Programación Visual Basic
cristiannamco 4 3,508 Último mensaje 22 Marzo 2012, 16:36 pm
por R2100
duda con proxy http en empresa
Redes
Butcherboy 3 2,998 Último mensaje 5 Agosto 2015, 18:31 pm
por fede18lp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines