Come funziona esattamente un proxy?


12

Se voglio collegarmi per dire, IP 100.100.100.100, Porta 80, il mio computer invierà un pacchetto tcp con questo indirizzo nel filo.

Ora se uso un server proxy diciamo, 200.200.200.200 Port 8080 (che tipo di proxy è possibile impostare in Internet Explorer) come viene modificato questo processo?

Quando voglio ancora collegarmi allo stesso IP, l'intestazione IP includerà l'IP di destinazione o l'IP proxy o entrambi?

Ho già cercato su Google, ci sono centinaia di pagine che ti dicono come impostare un proxy, ma nessuno spiega come funziona sotto il cofano.

Risposte:


13

La richiesta HTTP viene inviata dal client alla porta 8080 del server proxy. Il server proxy quindi genera una nuova richiesta HTTP al sito di destinazione. Il proxy, a seconda della configurazione, aggiungerà spesso un'intestazione "X-Forwarded-For" alla richiesta HTTP. I file di registro sul sito Web di destinazione mostreranno l'indirizzo IP del proxy, ma possono o meno essere configurati per registrare l'indirizzo "X-Forwarded-For".

Questa è la configurazione tipica, ma il software proxy ti consentirà tutti i tipi di personalizzazione.

EDIT: dovrei notare che quando ho originariamente letto la tua domanda, ho avuto l'idea che stavi chiedendo in particolare un proxy HTTP, come calamari o nginx. Sono disponibili molti diversi tipi di proxy. In Internet Explorer, molto probabilmente utilizzerai un proxy HTTP, ma ci sono anche molti altri tipi.


Sì, dipende molto dal software che stai usando come server proxy e da come è configurato. Vedi, ad esempio, il HttpProxyModule per Nginx: wiki.nginx.org/HttpProxyModule
entropo

3
Se la richiesta viene inviata solo al server proxy, come fa il proxy a sapere a quale indirizzo di destinazione si desidera connettersi? Il proxy funziona a livello http o a livello tcp?
cody

Il browser che effettua la richiesta al proxy richiede l'URI completo. Il server proxy esegue quindi la ricerca DNS e origina la propria richiesta HTTP al sito di destinazione.
Emgee

1
Un proxy http, come Squid (su cui ho basato la mia risposta) funziona a livello di applicazione.
Emgee,

1
@emgee: anche il protocollo HTTP ha un metodo CONNECT, quindi è possibile connettersi attraverso un proxy HTTP a un server TCP (se il proxy lo consente) e quel server TCP non deve essere un server che parla HTTP.
vtest

2

HTTP è un protocollo di livello 7, quindi non confonderti. quando si utilizza un proxy HTTP e si digita dire google.com, l'intestazione HTTP è sempre lo stesso google.com, ma l'indirizzo IP di destinazione sarà l'indirizzo IP del proxy, l'origine sarà IP host al numero di porta personalizzato 8080.


1

Per utilizzare un proxy HTTP, la richiesta viene inviata dal client all'indirizzo IP del server proxy anziché al server di destinazione. Il proxy deve quindi leggere l'intestazione HTTP per estrarre l' URI della richiesta . L'URI della richiesta include il nome o l'IP del server di destinazione e il server proxy utilizza tali informazioni per inoltrare la richiesta.

La specifica HTTP consente alla riga di richiesta di escludere il nome e la porta del server quando non viene utilizzato un proxy (poiché questi non sarebbero necessari se la richiesta fosse inviata direttamente a quel server). Ma, secondo le specifiche ...

Il modulo absoluteURI è RICHIESTO quando viene inoltrata la richiesta a un proxy.

Pertanto, quando non si utilizza un proxy, la riga della richiesta potrebbe apparire come:

GET /robots.txt HTTP/1.1

ma per usare un proxy, la linea deve includere il nome del server (e la porta se non 80):

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

Il lato di risposta se l'operazione può essere più semplice poiché il server proxy può semplicemente inoltrare la risposta integrale tramite il socket di richiesta prestabilito.


Da "HTTP The Definitive Guide", pag. 145: "HTTP / 1.1 ora richiede ai server di gestire URI completi per richieste sia proxy che server, ma in pratica, molti server distribuiti accettano ancora solo URI parziali."
nobar,

Non è l'approccio standard, ma un proxy potrebbe anche essere in grado di utilizzare l' Hostintestazione per completare un URI parziale se non viene fornito un URI assoluto nella riga della richiesta.
nobar,

Questo approccio non può funzionare se la connessione è crittografata end-to-end (HTTPS). security.stackexchange.com/questions/101721/…
nobar

-7

Non esiste "pacchetto tcp". TCP funziona con flussi di dati. Ci sono pacchetti IP.

Sembra che manchi qualche conoscenza di base sulla rete, ti consiglio di procurarti un buon libro su TCP / IP. Il preferito di tutti sembra essere "TCP / IP illustrato" di W. Richard Stevens.

Torna alla tua domanda.

Un proxy è un intermediario:

[tu] - [proxy] - [server a cui vuoi connetterti]

Ora ci sono due diverse connessioni:

[tu] - (la tua connessione al proxy) - [proxy] - (la connessione del proxy al server) - [server a cui vuoi connetterti]

Quando pensi di connetterti a un server tramite un proxy, ti stai effettivamente connettendo al proxy e gli dici che vuoi raggiungere un determinato server. Quindi il proxy apre una seconda connessione da sé a quel server e funge da intermediario che passa i dati in entrambe le direzioni.


13
Un pacchetto TCP è un pacchetto IP con informazioni di intestazione TCP al suo interno. Questo è linguaggio comune. Per favore, non essere così maleducatamente maleducato; sta solo riflettendo male su di te, dal momento che anche tu hai torto allo stesso tempo.
Phil P
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.