Apache Commons Net-ek FTPHTTPClient dauka HTTP CONNECT proxy baten bidez FTP egiteko. Bere ezaugarri erabilgarria ez da FTP saio-hasierako ataka lortzea soilik: zerrendek eta fitxategi-transferentziek erabiltzen dituzten datu-konexio pasiboetarako proxy tunelak ere ezartzen ditu.

Eraikitzaileak proxyaren amaierako puntua eta aukerako proxy-kredentzialak onartzen ditu. FTP zerbitzaria connect-(r)en argumentua izaten jarraitzen du, eta login-(e)k FTP kontua jasotzen du:

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();
    }
}

Transferentzia-zati honek Commons Net-en FTP inportazioak, java.io.IOException, aplikazioak emandako kredentzial-aldagaiak eta deitzailearen jabetzako irteera-fluxua suposatzen ditu. remoteFile zerbitzariaren aldeko fitxategi-izena da. Aplikazioak bere irteera-fluxua une egokian itxi behar du ere.

Ezarri modu pasiboa konektatu ondoren eta datu-eragiketa baten aurretik. FTPHTTPClient-en inplementazioak datu-konexioak baztertzen ditu modu aktiboan. Modu pasiboan, datuen amaierako puntua negoziatzen du FTP-rekin eta beste konexio bat irekitzen du HTTP proxyra, eta gero CONNECT tunel bat eskatzen du amaierako puntu horretara.

Bigarren tunel horrek ohiko muga bat azaltzen du: FTP kontrol-atariko proxy-baimena ez da nahikoa. Baimendutako helmugek eta atakek zerbitzariaren datu-amaierako puntu pasiboak barne hartu behar dituzte. Agur eta saio-hasiera arrakastatsuek kontrol-bidea funtzionatu duela baino ez dute frogatzen.

Inplementazioak Basic proxy-autentifikazioa ematen du proxyaren erabiltzaile-izena eta pasahitza badaude. Hori FTP USER/PASS trukearen desberdina da. Beste autentifikazio-mekanismo bat eskatzen duen proxyak konektore bateragarria behar du; eraikitzaileak ez ditu eskema guztiak eskuragarri jartzen.

Commons Net-ek klase hau esperimentaltzat dokumentatzen du, beraz, ebaluatu aplikazioaren eta proxyaren baldintzen arabera hartu aurretik. FTP bezeroa da, ez FTPS edo SFTP bezeroa. SOCKS zerbitzu bat eskuragarri dagoenean FTPS-rako, FTPSClient-en socket-proxy interfazea bezero-bide bereizia da. CONNECT-ek bidea ematen du eta ez ditu bera FTP kredentzialak edo fitxategi-edukiak zifratzen.

Mantendu erroreak sortu zituen etapari lotuta: HTTP ukapena tunela konfiguratzean, FTP saio-hasieraren ukapena edo FTP/datu-transferentziako hutsegitea. FTP pasahitza ordezteak ezin du datu-atariko pasiboa baztertzen duen proxy-politika konpondu.

Erlazionatutako artikuluak