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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con HTML Proxy en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con HTML Proxy en C  (Leído 3,107 veces)
_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Ayuda con HTML Proxy en C
« en: 11 Febrero 2020, 17:39 pm »

Supongamos que tengo una página web en un servidor Apache corriendo en 192.168.1.1:80 y quiero acceder a él desde 127.0.0.1:8080 (las ip y puertos son solo de ejemplo).

El siguiente programa me muestra la página pero las imágenes no cargan, tampoco puedo hacer login. No se que es lo que tengo mal.

Código
  1. // g++ -Wall -Werror tcp_proxy.cpp -o tcp_proxy -lpthread -lws2_32
  2.  
  3. #include <ctype.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <pthread.h>
  9. #include <winsock2.h>
  10. #include <ws2tcpip.h>
  11.  
  12. #define Localhost "127.0.0.1"
  13. #define ProxyPort 8080
  14. #define HTTP_Server "192.168.1.1"
  15. #define HTTP_Port "80"
  16.  
  17. #define MaxUsersQueue 10
  18. #define MaxMsgSize 2048
  19.  
  20. struct sockets {
  21. int source;
  22. int dest;
  23. };
  24.  
  25. void* conectarProxy(void*);
  26. void* pushData(void*);
  27.  
  28. int main(int argc, char* argv[]) {
  29. WSADATA wsaData;
  30. WSAStartup(MAKEWORD(2, 2), &wsaData);
  31.  
  32. int proxy_socket = socket(AF_INET, SOCK_STREAM, 0);
  33.  
  34. sockaddr_in server_addr;
  35. server_addr.sin_family = AF_INET;
  36. server_addr.sin_addr.s_addr = inet_addr(Localhost);
  37. if (argc < 2)
  38. server_addr.sin_port = htons(ProxyPort);
  39. else // Usar puerto pasado desde la terminal
  40. server_addr.sin_port = htons(atoi(argv[1]));
  41.  
  42. int server_addr_size = sizeof(server_addr);
  43. bind(proxy_socket, (sockaddr*) &server_addr, server_addr_size);
  44.  
  45. listen(proxy_socket, MaxUsersQueue);
  46.  
  47. while (true) {
  48. sockaddr_in client_addr;
  49. int client_addr_size = sizeof(client_addr);
  50. int socket_client = accept(proxy_socket, (sockaddr*) &client_addr, &client_addr_size);
  51.  
  52. pthread_t hilo_conectarProxy;
  53. pthread_create(&hilo_conectarProxy, NULL, conectarProxy, &socket_client);
  54. }
  55. close(proxy_socket);
  56. return 0;
  57. }
  58.  
  59. void* conectarProxy(void* sc_param) {
  60. int socket_client = *((int*)sc_param);
  61.  
  62. int httpServerSock = socket(AF_INET, SOCK_STREAM, 0);
  63. addrinfo hints;
  64. memset(&hints, 0, sizeof(hints));
  65. hints.ai_family = AF_INET;
  66. hints.ai_socktype = SOCK_STREAM;
  67. addrinfo* res;
  68. getaddrinfo(HTTP_Server, HTTP_Port, &hints, &res);
  69. connect(httpServerSock, res->ai_addr, res->ai_addrlen);
  70. freeaddrinfo(res);
  71.  
  72. sockets* cliente_proxy = new sockets{socket_client, httpServerSock};
  73. pthread_t hilo_cliente_proxy;
  74. pthread_create(&hilo_cliente_proxy, NULL, pushData, cliente_proxy);
  75.  
  76. sockets* proxy_cliente = new sockets{httpServerSock, socket_client};
  77. pthread_t hilo_proxy_cliente;
  78. pthread_create(&hilo_proxy_cliente, NULL, pushData, proxy_cliente);
  79.  
  80. pthread_join(hilo_cliente_proxy, NULL);
  81. pthread_join(hilo_proxy_cliente, NULL);
  82. return NULL;
  83. }
  84.  
  85. void* pushData(void* args) {
  86. sockets* src_dst = (sockets*)args;
  87. int src = src_dst->source;
  88. int dst = src_dst->dest;
  89. char* data = new char[MaxMsgSize];
  90. char buffer[MaxMsgSize];
  91. while (true) {
  92. strcpy(data, "");
  93. strcpy(buffer, "");
  94. int msg_size = 0;
  95. do {
  96. msg_size += recv(src, buffer, MaxMsgSize, 0);
  97. if (msg_size == 0) break;
  98. if (msg_size == -1) break;
  99. printf("%d->%d Recibido: %d bytes\n", src, dst, msg_size);
  100. strcat(data, buffer);
  101. } while (strchr(data, '\n') == NULL);
  102. if (msg_size == -1) break;
  103. int sent_msg_size = send(dst, data, msg_size, 0);
  104. printf("%d->%d Enviado: %d bytes\n", src, dst, msg_size);
  105. if (sent_msg_size == -1) break;
  106. }
  107. delete (sockets*)args;
  108. delete[] data;
  109. close(src);
  110. close(dst);
  111. return NULL;
  112. }
  113.  


En línea

kub0x
Enlightenment Seeker
Colaborador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Ayuda con HTML Proxy en C
« Respuesta #1 en: 11 Febrero 2020, 17:51 pm »

Viendo el código no veo que envies cabeceras HTTP para la request, creo por ahí va la cosa.


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Re: Ayuda con HTTP Proxy en C
« Respuesta #2 en: 14 Febrero 2020, 16:08 pm »

Ok, encontre el error, las imagenes no terminan con un salto de linea. Primero se envia un HTTP request con el tamaño del archivo y luego los datos del archivo.

Código
  1. void* pushData(void* args) {
  2. sockets* src_dst = (sockets*)args;
  3. int src = src_dst->source;
  4. int dst = src_dst->dest;
  5. char* data = new char[1048576];
  6. while (true) {
  7. strcpy(data, "");
  8. int msg_size = recv(src, data, 1048576, 0);
  9. if (msg_size > 0) {
  10. printf("%d->%d Reenviando %d bytes\n", src, dst, msg_size);
  11. send(dst, data, msg_size, 0);
  12. }
  13. }
  14. delete (sockets*)args;
  15. delete[] data;
  16. close(src);
  17. close(dst);
  18. return NULL;
  19. }
En línea

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 761,831 Último mensaje 28 Octubre 2008, 18:38 pm
por Littlehorse
ayuda con proxy
Redes
weggi 1 2,005 Último mensaje 1 Enero 2012, 19:51 pm
por madpitbull_99
proxy para pagina html
Desarrollo Web
binario010101 4 2,190 Último mensaje 10 Agosto 2013, 18:33 pm
por binario010101
Ayuda con proxy, proxy daisy chaining, etc
Hacking
daredevil_g 1 4,021 Último mensaje 23 Enero 2014, 16:30 pm
por adastra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines