Commons Net FTPHTTPClient: HTTP-proxytunneler for passiv FTP
Tunnel FTP-kontroll og passive dataforbindelser gjennom en HTTP-proxy med Commons Nets dedikerte klient.
Apache Commons Net inneholder FTPHTTPClient for FTP gjennom en HTTP CONNECT-proxy. Den nyttige egenskapen er ikke bare å nå FTP-innloggingsporten: den etablerer også proxytunneler for de passive dataforbindelsene som lister og filoverføringer bruker.
Konstruktøren godtar proxy-endepunktet og valgfrie proxy-påloggingsdata. FTP-serveren forblir argumentet til connect, og login mottar FTP-kontoen:
FTPHTTPClient ftp = new FTPHTTPClient(
"proxy.example.net", 8080, proxyUser, proxyPassword
);
try {
ftp.connect("ftp.example.net", 21);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
throw new IOException(ftp.getReplyString());
}
if (!ftp.login(ftpUser, ftpPassword)) {
throw new IOException(ftp.getReplyString());
}
ftp.enterLocalPassiveMode();
if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)
|| !ftp.retrieveFile(remoteFile, output)) {
throw new IOException(ftp.getReplyString());
}
ftp.logout();
} finally {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
Dette overføringsfragmentet forutsetter Commons Nets FTP-importer, java.io.IOException, påloggingsvariabler fra applikasjonen og en utstrøm eid av den som kaller. remoteFile er det tiltenkte filnavnet på serversiden. Applikasjonen må også lukke utstrømmen sin på riktig tidspunkt.
Sett passiv modus etter tilkobling og før en dataoperasjon. FTPHTTPClient-implementasjonen avviser dataforbindelser i aktiv modus. I passiv modus forhandler den dataendepunktet med FTP og åpner en ny forbindelse til HTTP-proxyen, og ber deretter om en CONNECT-tunnel til dette endepunktet.
Den andre tunnelen forklarer en vanlig grense: proxytillatelse for FTP-kontrollporten er ikke nok. De tillatte destinasjonene og portene må omfatte serverens passive dataendepunkter. En vellykket hilsen og pålogging beviser bare at kontrollruten virket.
Implementasjonen leverer Basic-proxyautentisering når både proxy-brukernavn og -passord er til stede. Det er forskjellig fra FTP USER/PASS-utvekslingen. En proxy som krever en annen autentiseringsmekanisme, trenger en kompatibel connector; konstruktøren gjør ikke alle ordninger tilgjengelige.
Commons Net dokumenterer denne klassen som eksperimentell, så vurder den opp mot krav fra applikasjonen og proxyen før du tar den i bruk. Det er en FTP-klient, ikke en FTPS- eller SFTP-klient. For FTPS med en tilgjengelig SOCKS-tjeneste er socket-proxy-grensesnittet til FTPSClient en egen klientvei. CONNECT gir ruten og krypterer ikke selv FTP-påloggingsdata eller filinnhold.
Hold feil knyttet til trinnet som produserte dem: en HTTP-avvisning under tunneloppsett, en FTP-påloggingsavvisning eller en FTP-/dataoverføringsfeil. Å bytte FTP-passord kan ikke løse en proxyregel som avviser den passive dataport.