¿Cómo funciona exactamente un proxy?

12

Si quiero conectarme para decir, IP 100.100.100.100, Puerto 80, mi computadora enviará un paquete tcp con esta dirección al cable.

Ahora, si uso un servidor proxy, por ejemplo, 200.200.200.200 Puerto 8080 (un tipo de proxy que puede configurar en Internet Explorer), ¿cómo se cambia este proceso?

Cuando todavía quiera conectarme a la misma IP, ¿el encabezado de la IP incluirá la IP de destino o la IP del proxy o ambas?

Ya busqué en Google, hay cientos de páginas que le dicen cómo configurar un proxy, pero ninguno explica cómo funciona bajo el capó.

cody
fuente

Respuestas:

13

La solicitud HTTP se envía desde el Cliente al puerto 8080 del Servidor Proxy. El servidor proxy luego origina una nueva solicitud HTTP en el sitio de destino. El proxy, dependiendo de la configuración, a menudo agregará un encabezado "X-Fordered-For" a la solicitud HTTP. Los archivos de registro en el sitio web de destino mostrarán la dirección IP del proxy, pero pueden o no estar configurados para registrar la dirección "X-Forward-For".

Esa es la configuración típica, pero el software proxy le permitirá todo tipo de personalización.

EDITAR: Debería tener en cuenta que cuando leí originalmente su pregunta, tuve la idea de que estaba preguntando sobre un Proxy HTTP específicamente, como squid o nginx. Hay muchos tipos diferentes de proxies disponibles. En Internet Explorer, lo más probable es que estés usando un proxy HTTP, pero también hay muchos otros tipos.

emgee
fuente
Sí, depende mucho del software que esté utilizando como servidor proxy y de cómo esté configurado. Vea, por ejemplo, el HttpProxyModule para Nginx: wiki.nginx.org/HttpProxyModule
entropo el
3
Si la solicitud se envía solo al servidor proxy, ¿cómo sabe el proxy a qué dirección de destino me quiero conectar? ¿El proxy funciona a nivel http o tcp?
cody
El navegador que realiza la solicitud al proxy solicita el URI completo. El servidor proxy luego realiza la búsqueda de DNS y origina su propia solicitud HTTP en el sitio de destino.
emgee 01 de
1
Un proxy http, como Squid (en el que he estado basando mi respuesta) funciona en la capa de aplicación.
emgee
1
@emgee: el protocolo HTTP también tiene un método CONNECT, por lo que es posible conectarse a través de un proxy HTTP a un servidor TCP (si el proxy lo permite) y ese servidor TCP no tiene que ser un servidor que hable HTTP.
vtest
2

HTTP es un protocolo de Capa 7, así que no te confundas. cuando utiliza un proxy HTTP y escribe, digamos google.com, el encabezado HTTP sigue siendo el mismo google.com, pero la dirección IP de destino será la dirección IP del proxy, la fuente será la dirección IP del host en el número de puerto personalizado 8080.

usuario205246
fuente
1

Para usar un proxy HTTP, la solicitud se envía desde el cliente a la dirección IP del servidor proxy en lugar de al servidor de destino. El proxy debe leer el encabezado HTTP para extraer el URI de solicitud . El URI de solicitud incluye el nombre o la IP del servidor de destino, y el servidor proxy usa esa información para reenviar la solicitud.

La especificación HTTP permite que la línea de solicitud excluya el nombre y el puerto del servidor cuando no se usa un proxy (ya que estos serían innecesarios si la solicitud se enviara directamente a ese servidor). Pero, según las especificaciones ...

El formulario absoluteURI se REQUIERE cuando la solicitud se realiza a un proxy.

Entonces, cuando no use un proxy, la línea de solicitud podría verse así:

GET /robots.txt HTTP/1.1

pero para usar un proxy, la línea debe incluir el nombre del servidor (y el puerto, si no 80):

GET http://httpbin.org:80/robots.txt HTTP/1.1

El lado de la respuesta si la operación puede ser más simple ya que el servidor proxy puede simplemente transmitir la respuesta literal a través del socket de solicitud preestablecido.

sin bar
fuente
De "HTTP The Definitive Guide", pág. 145: "HTTP / 1.1 ahora requiere que los servidores manejen los URI completos para las solicitudes de servidor y proxy, pero en la práctica, muchos servidores implementados todavía aceptan solo URI parciales".
nobar
No es el enfoque estándar, pero un proxy también podría usar el Hostencabezado para completar un URI parcial si no se proporciona un URI absoluto en la línea de solicitud.
nobar
Este enfoque no puede funcionar si la conexión está encriptada de extremo a extremo (HTTPS). security.stackexchange.com/questions/101721/…
nobar
-7

No existe el "paquete tcp". TCP opera con flujos de datos. Hay paquetes de IP.

Parece que le faltan algunos conocimientos básicos sobre redes, le sugiero que obtenga un buen libro sobre TCP / IP. El favorito de todos parece ser "TCP / IP ilustrado" por W. Richard Stevens.

De vuelta a tu pregunta.

Un proxy es un intermediario:

[usted] - [proxy] - [servidor al que desea conectarse]

Ahora hay dos conexiones diferentes:

[usted] - (su conexión al proxy) - [proxy] - (conexión del proxy al servidor) - [servidor al que desea conectarse]

Cuando cree que se está conectando a un servidor a través de un proxy, en realidad se está conectando al proxy y le dice que desea llegar a un determinado servidor. Luego, el proxy abre una segunda conexión de sí mismo a ese servidor y actúa como intermediario que pasa datos en ambas direcciones.

vtest
fuente
13
Un paquete TCP es un paquete IP con información de encabezado TCP. Este es un lenguaje común. Por favor, no seas tan grosero condescendiente; solo se refleja mal en ti, ya que también te equivocas al mismo tiempo.
Phil P