@DavidPostill Niestety, naprawdę interesowałem się tylko PASV kontra EPSV.
CGCampbell
Odpowiedzi:
20
Jedyną różnicą jest to, że PORT/PASVsą ograniczone do IPv4 , podczas gdy EPRT/EPSVdziałają z dowolnym protokołem sieciowym (chociaż w praktyce używany jest tylko IPv6).
Standardowe PORT(aktywne) i PASV(pasywne) polecenia w protokole kontrolnym FTP wymieniają adres i informacje o porcie jako sześć 1-bajtowych miejsc po przecinku , z których drugi koniec musi zrekonstruować czterobajtowy adres IP i dwubajtowy numer portu TCP.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Ale potem zaczęły pojawiać się inne protokoły. IPv4 miał zostać zastąpiony przez „IPng”, który miał sporo konkurencyjnych propozycji zastąpienia (OSI CLNP, TUBA, SIP, SIPP, CATNIP - w różnych okresach historii), niektóre z krótszymi, dłuższymi, a nawet zmiennymi rozmiarami adresów hosta, do momentu zdefiniowania IPv6 z 16-bajtowymi adresami.
Po prostu wysłanie większej ilości bajtów nie zadziałałoby - nie można oczekiwać, że serwery i klienci znają właściwy protokół oparty wyłącznie na długości adresu. (Na przykład, co jeśli masz jeden protokół z 16-bajtowym adresem + 4-bajtowy port, inny z 12-bajtowym adresem + 12-bajtowy port?)
Poza tym - chociaż 20 lat temu było to mniej ważne - w dzisiejszych czasach w Internecie są miliony urządzeń NAT , które sprawdzają i zmieniają połączenia kontrolne FTP, dzięki czemu host „zewnętrzny” będzie widział globalne adresy IPv4, nawet jeśli „wewnątrz” host wysłał lokalny RFC1918. Nawet bez NAT zapory stanowe często obserwują polecenia sterujące, aby automatycznie zezwolić na połączenie danych bez reguł ręcznych.
Oznacza, że po prostu nie może wysyłać więcej numerów z PORTlub PASVjest gwarantowane do złamania dla wielu ludzi. Być może niektóre zapory ogniowe po cichu źle interpretują niektóre bajty adresu jako port i po cichu odrzucają pozostałe; inni mogą porzucić połączenie lub po prostu zawiesić się.
Aby uniknąć różnych problemów, takich jak powyższe, konieczne było wprowadzenie nowych poleceń do obsługi wielu protokołów w FTP.
W roku 1993, RFC 1639 (pierwotnie RFC 1545 ) wprowadził „długi adres” LPRTiLPSV poleceń, które były jak PORT& PASV, ale o długości adresowej zmienna ; zawierały również identyfikator typu protokołu. (Nie zmieniło to jednak składni - adres IPv6: port byłby po prostu wysyłany jako 21 liczb zamiast sześciu).
Jednak nadal nie rozwiązało to niektórych problemów, takich jak poproszenie serwera o użycie innego protokołu niż w przypadku połączenia sterującego. RFC również szybko stało się nieaktualne; kiedy IPv6 pojawił się zaledwie rok później, nie można go było używać z LPRT, ponieważ nie przypisano mu identyfikatora protokołu LPRT (tylko dla różnych wczesnych propozycji).
Aby rozwiązać ten problem, RFC 2428 w 1998 dodaje EPRTi EPSV, aka „Extended port” i „rozszerzoną pasywne” , który miał także sposób negocjuje protokół, który obsługuje oba końce. Polecenia „rozszerzone” wysyłają również adresy w postaci czytelnej dla człowieka - w przypadku IPv6 oznacza to użycie notacji szesnastkowej i dwukropka zamiast szeregu oddzielnych liczb dziesiętnych.
Wow, wszystkie strony, które czytałem i kliknęły dopiero po tym. Dziękuję za to. Zaakceptuję to (prawdopodobnie) za godzinę lub dwie, chcę sprawdzić, czy ktokolwiek robi to inaczej. Powodem, dla którego również poprosiłem o Aktywny, było to, że ze względu na dobrze działające tagowanie w Google, to pytanie / odpowiedź znajdzie się w wynikach wyszukiwania. Jeśli nikt nie doda odpowiedzi (sprawi, że będzie ona bardziej kompletna w przypadku odpowiedzi Google), zmodyfikuję moje oryginalne pytanie i treść, aby odzwierciedlić treść Twojej odpowiedzi, zasadniczo dopasowując moje pytanie do Twojej odpowiedzi.
CGCampbell
3
Inną różnicą jest to, że EPSVodpowiedź nie zawiera adresu IP (co PASVrobi odpowiedź). Pozwala to uniknąć typowego problemu, gdy serwer FTP znajdujący się za NAT nie zna swojego zewnętrznego adresu IP i myli klienta FTP, wysyłając mu swój adres wewnętrzny.
Martin Prikryl
Aby dodać do tego, co mówi @MartinPrikryl, innym powodem jest użycie FTP-over-TLS, firewall / NAT nie może przechwycić adresu IP w poleceniu PASV w celu przepisania go (przynajmniej bez MITMing połączenia sterującego). Ludzie ze świata uniksowego zwykle używają SFTP zamiast FTP-over-TLS, FTP-over-TLS jest powszechnie używany z komputerami mainframe IBM, ponieważ FTP obsługuje pliki zorientowane na rekordy (STRU R, MODE B), podczas gdy SFTP obsługuje tylko zorientowane na strumień pliki
Simon Kissane
1
Różnica między aktywnym a pasywnym została już rozwiązana. Rozszerzona pasywna (EPSV) jest po prostu pasywna w przypadku IPv4 i IPv6, ponieważ składnia odpowiedzi na PASV była specyficzna dla IPv4 i dlatego potrzebne było nowe polecenie dla IPv6. To samo z EPTR vs. PORT w trybie aktywnym. Z EPRT i EPSV jest nieco inne zachowanie, ponieważ mogą one zawierać tylko port, a nie IP i port jak PORT i PASV. Tak więc transfer danych może odbywać się tylko między systemami, które mają połączenie sterujące. Dzięki PORT i PASV możliwe jest utworzenie połączenia danych między innymi systemami (choć jest to dziś uważane za zły projekt i ryzyko bezpieczeństwa).
To była odpowiedź, której nie chciałem. Mówi mi dokładnie tyle, ile mogłem znaleźć gdzie indziej, a mianowicie, że EPSV został stworzony dla IPv6, ale nie wyjaśnia, dlaczego. (tzn. nie akceptuję twojego powodu jako wystarczająco dobrego wyjaśnienia) Mówię ci to w nadziei, że może poprawisz swoją odpowiedź jeszcze lepiej.
CGCampbell
Zredagowano odpowiedź, aby wyjaśnić, że odpowiedź na polecenie PASV, aby nie obsługiwać IPv6, a zatem konieczne było nowe polecenie.
Odpowiedzi:
Jedyną różnicą jest to, że
PORT/PASV
są ograniczone do IPv4 , podczas gdyEPRT/EPSV
działają z dowolnym protokołem sieciowym (chociaż w praktyce używany jest tylko IPv6).Standardowe
PORT
(aktywne) iPASV
(pasywne) polecenia w protokole kontrolnym FTP wymieniają adres i informacje o porcie jako sześć 1-bajtowych miejsc po przecinku , z których drugi koniec musi zrekonstruować czterobajtowy adres IP i dwubajtowy numer portu TCP.Ale potem zaczęły pojawiać się inne protokoły. IPv4 miał zostać zastąpiony przez „IPng”, który miał sporo konkurencyjnych propozycji zastąpienia (OSI CLNP, TUBA, SIP, SIPP, CATNIP - w różnych okresach historii), niektóre z krótszymi, dłuższymi, a nawet zmiennymi rozmiarami adresów hosta, do momentu zdefiniowania IPv6 z 16-bajtowymi adresami.
Po prostu wysłanie większej ilości bajtów nie zadziałałoby - nie można oczekiwać, że serwery i klienci znają właściwy protokół oparty wyłącznie na długości adresu. (Na przykład, co jeśli masz jeden protokół z 16-bajtowym adresem + 4-bajtowy port, inny z 12-bajtowym adresem + 12-bajtowy port?)
Poza tym - chociaż 20 lat temu było to mniej ważne - w dzisiejszych czasach w Internecie są miliony urządzeń NAT , które sprawdzają i zmieniają połączenia kontrolne FTP, dzięki czemu host „zewnętrzny” będzie widział globalne adresy IPv4, nawet jeśli „wewnątrz” host wysłał lokalny RFC1918. Nawet bez NAT zapory stanowe często obserwują polecenia sterujące, aby automatycznie zezwolić na połączenie danych bez reguł ręcznych.
Oznacza, że po prostu nie może wysyłać więcej numerów z
PORT
lubPASV
jest gwarantowane do złamania dla wielu ludzi. Być może niektóre zapory ogniowe po cichu źle interpretują niektóre bajty adresu jako port i po cichu odrzucają pozostałe; inni mogą porzucić połączenie lub po prostu zawiesić się.Aby uniknąć różnych problemów, takich jak powyższe, konieczne było wprowadzenie nowych poleceń do obsługi wielu protokołów w FTP.
W roku 1993, RFC 1639 (pierwotnie RFC 1545 ) wprowadził „długi adres”
LPRT
iLPSV
poleceń, które były jakPORT
&PASV
, ale o długości adresowej zmienna ; zawierały również identyfikator typu protokołu. (Nie zmieniło to jednak składni - adres IPv6: port byłby po prostu wysyłany jako 21 liczb zamiast sześciu).Jednak nadal nie rozwiązało to niektórych problemów, takich jak poproszenie serwera o użycie innego protokołu niż w przypadku połączenia sterującego. RFC również szybko stało się nieaktualne; kiedy IPv6 pojawił się zaledwie rok później, nie można go było używać z LPRT, ponieważ nie przypisano mu identyfikatora protokołu LPRT (tylko dla różnych wczesnych propozycji).
Aby rozwiązać ten problem, RFC 2428 w 1998 dodaje
EPRT
iEPSV
, aka „Extended port” i „rozszerzoną pasywne” , który miał także sposób negocjuje protokół, który obsługuje oba końce. Polecenia „rozszerzone” wysyłają również adresy w postaci czytelnej dla człowieka - w przypadku IPv6 oznacza to użycie notacji szesnastkowej i dwukropka zamiast szeregu oddzielnych liczb dziesiętnych.Podsumowując, obsługa IPv6 jest jedyną różnicą.
źródło
EPSV
odpowiedź nie zawiera adresu IP (coPASV
robi odpowiedź). Pozwala to uniknąć typowego problemu, gdy serwer FTP znajdujący się za NAT nie zna swojego zewnętrznego adresu IP i myli klienta FTP, wysyłając mu swój adres wewnętrzny.Różnica między aktywnym a pasywnym została już rozwiązana. Rozszerzona pasywna (EPSV) jest po prostu pasywna w przypadku IPv4 i IPv6, ponieważ składnia odpowiedzi na PASV była specyficzna dla IPv4 i dlatego potrzebne było nowe polecenie dla IPv6. To samo z EPTR vs. PORT w trybie aktywnym. Z EPRT i EPSV jest nieco inne zachowanie, ponieważ mogą one zawierać tylko port, a nie IP i port jak PORT i PASV. Tak więc transfer danych może odbywać się tylko między systemami, które mają połączenie sterujące. Dzięki PORT i PASV możliwe jest utworzenie połączenia danych między innymi systemami (choć jest to dziś uważane za zły projekt i ryzyko bezpieczeństwa).
źródło