Jak dokładnie działa proxy?

12

Jeśli chcę się połączyć, aby powiedzieć, IP 100.100.100.100, Port 80, mój komputer wyśle ​​pakiet tcp z tym adresem do drutu.

Jeśli korzystam z serwera proxy, powiedzmy: 200.200.200.200 Port 8080 (taki serwer proxy, który można skonfigurować w programie Internet Explorer), jak ten proces się zmieni?

Jeśli nadal chcę połączyć się z tym samym adresem IP, czy nagłówek IP będzie zawierać docelowy adres IP lub adres IP serwera proxy, czy oba?

Już googlowałem, istnieją setki stron, które mówią, jak skonfigurować proxy, ale żadna nie wyjaśnia, jak to działa pod maską.

cody
źródło

Odpowiedzi:

13

Żądanie HTTP jest wysyłane z klienta na port 8080 serwera proxy. Serwer proxy następnie inicjuje nowe żądanie HTTP do witryny docelowej. Serwer proxy, w zależności od konfiguracji, często dodaje nagłówek „X-Forwarded-For” do żądania HTTP. Pliki dziennika w docelowej witrynie internetowej będą wyświetlać adres IP serwera proxy, ale mogą być skonfigurowane do rejestrowania adresu „X-Forwarded-For”.

To typowa konfiguracja, ale oprogramowanie proxy pozwala na wszelkiego rodzaju dostosowanie.

EDYCJA: Powinienem zauważyć, że kiedy początkowo czytałem twoje pytanie, wpadłem na pomysł, że pytasz o proxy HTTP, takie jak kalmary lub nginx. Dostępnych jest wiele różnych typów serwerów proxy. W Internet Explorerze najprawdopodobniej będziesz używać proxy HTTP, ale istnieje również wiele innych typów.

wyłaniać się
źródło
Tak, to bardzo zależy od oprogramowania używanego jako serwer proxy i od jego konfiguracji. Zobacz np. HttpProxyModule dla Nginx: wiki.nginx.org/HttpProxyModule
entropo
3
Jeśli żądanie zostało wysłane tylko do serwera proxy, skąd serwer proxy wie, z którym adresem docelowym chcę się połączyć? Czy serwer proxy działa na poziomie HTTP czy na poziomie TCP?
cody
Przeglądarka wysyłająca zapytanie do proxy żąda pełnego identyfikatora URI. Serwer proxy następnie sprawdza DNS i inicjuje własne żądanie HTTP do strony docelowej.
emgee
1
Serwer proxy HTTP, taki jak Squid (na którym opierałem moją odpowiedź), działa w warstwie aplikacji.
emgee,
1
@emgee: Protokół HTTP ma również metodę CONNECT, więc możliwe jest połączenie przez serwer proxy HTTP z serwerem TCP (jeśli serwer proxy na to pozwala) i ten serwer TCP nie musi być serwerem, który mówi HTTP.
vtest
2

HTTP to protokół warstwy 7, więc nie myl się. gdy używasz proxy HTTP i piszesz powiedz google.com, nagłówek HTTP nadal jest taki sam google.com, ale docelowym adresem IP będzie adres IP serwera proxy, źródłem będzie adres IP hosta na niestandardowy numer portu 8080.

użytkownik205246
źródło
1

Aby użyć serwera proxy HTTP, żądanie jest wysyłane od klienta na adres IP serwera proxy, a nie do serwera docelowego. Serwer proxy musi następnie odczytać nagłówek HTTP, aby wyodrębnić identyfikator URI żądania . Identyfikator URI żądania zawiera nazwę lub adres IP serwera docelowego, a serwer proxy używa tych informacji do przekazania żądania.

Specyfikacja HTTP pozwala wierszowi żądania wykluczyć nazwę i port serwera, gdy serwer proxy nie jest używany (ponieważ byłyby one niepotrzebne, gdyby żądanie zostało wysłane bezpośrednio do tego serwera). Ale zgodnie ze specyfikacją ...

Formularz bezwzględny jest WYMAGANY, gdy żądanie jest przesyłane do proxy.

Kiedy nie używasz proxy, linia żądania może wyglądać następująco:

GET /robots.txt HTTP/1.1

ale aby użyć proxy, wiersz musi zawierać nazwę serwera (i port, jeśli nie 80):

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

Strona odpowiedzi, jeśli operacja może być prostsza, ponieważ serwer proxy może po prostu przekazywać pełną odpowiedź przez wstępnie ustalone gniazdo żądania.

nobar
źródło
Z „HTTP The Definitive Guide”, str. 145: „HTTP / 1.1 wymaga teraz, aby serwery obsługiwały pełne identyfikatory URI zarówno dla żądań proxy, jak i serwerów, ale w praktyce wiele wdrożonych serwerów nadal akceptuje tylko częściowe identyfikatory URI”.
nobar
To nie jest standardowe podejście, ale serwer proxy może również być w stanie użyć Hostnagłówka do uzupełnienia częściowego identyfikatora URI, jeśli bezwzględny identyfikator URI nie zostanie podany w wierszu żądania.
nobar
To podejście nie może działać, jeśli połączenie jest szyfrowane kompleksowo (HTTPS). security.stackexchange.com/questions/101721/…
nobar
-7

Nie ma czegoś takiego jak „pakiet tcp”. TCP działa ze strumieniami danych. Istnieją pakiety IP.

Wygląda na to, że brakuje ci podstawowej wiedzy na temat sieci. Sugeruję, abyś otrzymał dobrą książkę o TCP / IP. Faworytem każdego wydaje się być „ilustrowany TCP / IP” W. Richarda Stevensa.

Wróć do twojego pytania.

Pełnomocnik jest pośrednikiem:

[ty] - [proxy] - [serwer, z którym chcesz się połączyć]

Teraz są dwa różne połączenia:

[ty] - (twoje połączenie z proxy) - [proxy] - (połączenie proxy z serwerem) - [serwer, z którym chcesz się połączyć]

Gdy myślisz, że łączysz się z serwerem za pośrednictwem serwera proxy, w rzeczywistości łączysz się z serwerem proxy i mówisz, że chcesz połączyć się z określonym serwerem. Następnie proxy otwiera drugie połączenie od siebie do tego serwera i działa jako pośrednik przekazujący dane w obu kierunkach.

vtest
źródło
13
Pakiet TCP to pakiet IP zawierający informacje nagłówka TCP. To jest powszechne określenie. Proszę, nie bądźcie tak protekcjonalnie niegrzeczni; odbija się na tobie tylko źle, ponieważ jednocześnie mylisz się.
Phil P