Commons Net FTPHTTPClient: HTTP-välityspalvelintunnelit passiiviselle FTP:lle
Tunneloi FTP:n ohjaus ja passiiviset datayhteydet HTTP-välityspalvelimen kautta Commons Netin erikoisclientilla.
Apache Commons Net sisältää FTPHTTPClient-luokan FTP:tä varten HTTP CONNECT -välityspalvelimen kautta. Sen hyödyllinen ominaisuus ei ole vain FTP-kirjautumisportin saavuttaminen: se muodostaa myös välityspalvelintunnelit passiivisille datayhteyksille, joita listaukset ja tiedostonsiirrot käyttävät.
Konstruktori ottaa vastaan välityspalvelimen päätepisteen ja valinnaiset välityspalvelimen tunnistetiedot. FTP-palvelin on edelleen connect-kutsun argumentti, ja login vastaanottaa FTP-tilin:
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();
}
}
Tämä siirtokatkelma olettaa Commons Netin FTP-tuonnit, java.io.IOException, sovelluksen tarjoamat tunnistetietomuuttujat ja kutsujan omistaman tulostusvirran. remoteFile on aiottu palvelinpuolen tiedostonimi. Sovelluksen on myös suljettava tulostusvirtansa sopivassa kohdassa.
Aseta passiivinen tila yhteyden muodostamisen jälkeen ja ennen datatoimitusta. FTPHTTPClientin toteutus hylkää datayhteydet aktiivisessa tilassa. Passiivisessa tilassa se neuvottelee datapäätepisteen FTP:n kanssa ja avaa toisen yhteyden HTTP-välityspalvelimeen ja pyytää sitten CONNECT-tunnelin kyseiseen päätepisteeseen.
Tämä toinen tunneli selittää yleisen rajan: välityspalvelimen lupa FTP:n ohjausporttiin ei riitä. Sallittujen kohteiden ja porttien on sisällettävä palvelimen passiiviset datapäätepisteet. Onnistunut tervehdys ja kirjautuminen todistavat vain, että ohjausreitti toimi.
Toteutus tarjoaa Basic-välityspalvelintodennuksen, kun sekä välityspalvelimen käyttäjänimi että salasana ovat läsnä. Se eroaa FTP:n USER/PASS-vaihdosta. Välityspalvelin, joka vaatii toisen todennusmekanismin, tarvitsee yhteensopivan liittimen; konstruktori ei tee jokaista skeemaa saataville.
Commons Net dokumentoi tämän luokan kokeelliseksi, joten arvioi sitä sovelluksen ja välityspalvelimen vaatimuksia vasten ennen käyttöönottoa. Se on FTP-client, ei FTPS- tai SFTP-client. FTPS:lle, kun SOCKS-palvelu on saatavilla, FTPSClientin socket-välityspalvelinrajapinta on erillinen clientpolku. CONNECT tarjoaa reitin eikä itsessään salaa FTP-tunnistetietoja tai tiedostojen sisältöä.
Pidä virheet kytkettyinä siihen vaiheeseen, joka ne tuotti: HTTP-hylkäys tunnelin asennuksessa, FTP-kirjautumisen epääminen tai FTP-/datansiirtovirhe. FTP-salasanaa vaihtamalla ei voi ratkaista välityspalvelinkäytäntöä, joka hylkää passiivisen dataportin.