Como exatamente um proxy funciona?

12

Se eu quiser conectar para dizer IP 100.100.100.100, porta 80, meu computador enviará um pacote tcp com esse endereço ao fio.

Agora, se eu usar um servidor proxy, digamos, 200.200.200.200 Porta 8080 (esse tipo de proxy que você pode configurar no Internet Explorer) como esse processo é alterado?

Quando ainda quero conectar-me ao mesmo IP, o cabeçalho do IP incluirá o IP de destino ou o IP do proxy ou ambos?

Eu já pesquisei no Google, existem centenas de páginas que mostram como configurar um proxy, mas nenhuma explica como ele funciona.

cody
fonte

Respostas:

13

A solicitação HTTP é enviada do cliente para a porta 8080 do servidor proxy. O servidor proxy, em seguida, origina uma nova solicitação HTTP para o site de destino. O proxy, dependendo da configuração, geralmente adiciona um cabeçalho "X-Forwarded-For" à solicitação HTTP. Os arquivos de log no site de destino mostrarão o endereço IP do proxy, mas podem ou não ser configurados para registrar o endereço "X-Forwarded-For".

Essa é a configuração típica, mas o software proxy permite todos os tipos de personalização.

EDIT: Devo observar que, quando li originalmente sua pergunta, tive a ideia de que você estava perguntando sobre um Proxy HTTP especificamente, como squid ou nginx. Existem muitos tipos diferentes de proxies disponíveis. No Internet Explorer, você provavelmente usará um proxy HTTP, mas também existem muitos outros tipos.

emgee
fonte
Sim, depende muito do software que você está usando como servidor proxy e de como está configurado. Ver, por exemplo, o HttpProxyModule para Nginx: wiki.nginx.org/HttpProxyModule
entropo
3
Se a solicitação for enviada apenas ao servidor proxy, como o proxy sabe a qual endereço de destino eu quero me conectar? O proxy funciona no nível http ou no nível tcp?
Cody
O navegador que faz a solicitação para o proxy solicita o URI completo. O servidor proxy faz a pesquisa de DNS e origina sua própria solicitação HTTP no site de destino.
emgee
1
Um proxy http, como o Squid (no qual baseei minha resposta) funciona na camada de aplicação.
perfil completo de Emgee
1
@emgee: o protocolo HTTP também possui um método CONNECT, portanto, é possível conectar-se através de um proxy HTTP a um servidor TCP (se o proxy permitir) e esse servidor TCP não precisa ser um servidor que fala HTTP.
vtest
2

O HTTP é um protocolo da camada 7, para não confundir. quando você usa um proxy HTTP e digita dizer google.com, o cabeçalho HTTP ainda é o mesmo google.com, mas o endereço IP de destino será o endereço IP do Proxy, a origem será o IP dos Hosts para o número da porta personalizada 8080.

user205246
fonte
1

Para usar um proxy HTTP, a solicitação é enviada do cliente para o endereço IP do servidor proxy e não para o servidor de destino. O proxy deve então ler o cabeçalho HTTP para extrair o URI da solicitação . O request-URI inclui o nome ou o IP do servidor de destino e o servidor proxy usa essas informações para encaminhar a solicitação.

A especificação HTTP permite que a linha de solicitação exclua o nome e a porta do servidor quando um proxy não for usado (pois isso seria desnecessário se a solicitação fosse enviada diretamente para esse servidor). Mas, de acordo com as especificações ...

O formulário absoluteURI é NECESSÁRIO quando a solicitação está sendo feita para um proxy.

Portanto, quando não estiver usando um proxy, a linha de solicitação poderá se parecer com:

GET /robots.txt HTTP/1.1

mas para usar um proxy, a linha deve incluir o nome do servidor (e a porta, se não for 80):

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

O lado da resposta, se a operação puder ser mais simples, pois o servidor proxy pode simplesmente retransmitir a resposta literal por meio do soquete de solicitação pré-estabelecido.

nobar
fonte
Em "HTTP, o Guia Definitivo", pág. 145: "O HTTP / 1.1 agora exige que os servidores manipulem URIs completos para solicitações de proxy e servidor, mas, na prática, muitos servidores implantados ainda aceitam apenas URIs parciais."
25/17
Não é a abordagem padrão, mas um proxy também pode usar o Hostcabeçalho para concluir um URI parcial se um URI absoluto não for fornecido na linha de solicitação.
25/17
Essa abordagem não funcionará se a conexão estiver criptografada de ponta a ponta (HTTPS). security.stackexchange.com/questions/101721/…
nobar
-7

Não existe "pacote tcp". O TCP opera com fluxos de dados. Existem pacotes IP.

Parece estar faltando algum conhecimento básico sobre redes, sugiro que você compre um bom livro sobre TCP / IP. O favorito de todos parece ser "TCP / IP ilustrado" por W. Richard Stevens.

Voltar à sua pergunta.

Um proxy é um intermediário:

[você] - [proxy] - [servidor que você deseja conectar]

Agora, existem duas conexões diferentes:

[você] - (sua conexão com o proxy) - [proxy] - (conexão do proxy com o servidor) - [servidor que você deseja conectar]

Quando você pensa que está se conectando a um servidor por meio de um proxy, na verdade está se conectando ao proxy e diz que deseja alcançar um determinado servidor. Em seguida, o proxy abre uma segunda conexão de si mesmo para esse servidor e atua como intermediário, transmitindo dados nas duas direções.

vtest
fonte
13
Um pacote TCP é um pacote IP com informações de cabeçalho TCP. Isso é linguagem comum. Por favor, não seja tão condescendentemente rude; está apenas refletindo mal sobre você, já que você também está errado ao mesmo tempo.
Phil P