FTP Wie Notwendigkeit für "rekey" klientenseitig detektieren?

Taste

Bekanntes Mitglied
Hallo zusammen,

ich habe folgendes Problem:
Meine Java-Anwendung überträgt große Datenmengen per SFTP (ich nutze die JSch-Implementierung) auf einen FTP-Server. Auf diesem ist konfiguriert, dass nach 3600 Sekunden, oder nach 2GB transferierter Daten (je nachdem, was zuerst erreicht ist) ein "rekey" notwendig ist, also die Schlüssel erneut ausgetauscht werden sollen.

Dies bekomme ich allerdings momentan auf Clientenseite nicht mit. Es tritt für mich kein sichtbarer Fehler auf, sondern der Transfer bleibt einfach "hängen".

Gibt es eine Möglichkeit, festzustellen, dass der Server ein "rekey" verlangt? Wenn ja, wie?

Gruß,
Nick

Java:
public class SftpClient
{
   private static Logger logger = null;

   private JSch jSch = null;
   private Session sftpSession = null;
   private ChannelSftp sftpChannel = null;

      private int chunkSize = 16384; // default

   private static final long MEGA_BYTE = 1024 * 1024;
   private static final long BYTES_TO_LOG = MEGA_BYTE * 50; // 50MB

   private boolean abort = false;
   private boolean success = true;

   private String host = null;
   private int port = 22;
   private String ftpSubdir = null;
   private String username = null;
   private String password = null;

public SftpClient( String host, int port, String username, String password, String ftpSubdir )
   {
//...
}

   public boolean connect( Long orderId )
   {
      try
      {
         this.jSch = new JSch();

         logger.info( "[Order:" + orderId + "] Connecting to SFTP-Server: " + this.username + ":" + this.password + "@" + this.host + ":" + this.port );
         // session herstellen
         this.sftpSession = this.jSch.getSession( this.username, this.host, this.port );

         // config aufbauen
         Hashtable<String,String> config = new Hashtable<String,String>();
         config.put( "StrictHostKeyChecking", "no" );
         this.sftpSession.setConfig( config );
         this.sftpSession.setPassword( this.password );

         // Verbindung aufbauen
         this.sftpSession.connect();

         this.sftpChannel = ( ChannelSftp ) this.sftpSession.openChannel( "sftp" );
         this.sftpChannel.connect();

         logger.info( "[Order:" + orderId + "] Current directory on SFTP-Server (pwd): " + this.sftpChannel.pwd() );
         if( this.ftpSubdir != null && this.ftpSubdir.length() > 0 )
         {
            logger.info( "[Order:" + orderId + "] Changing to subdirectory on SFTP-Server (cd): " + this.ftpSubdir );
            this.sftpChannel.cd( this.ftpSubdir );
            logger.info( "[Order:" + orderId + "] Current directory on SFTP-Server (pwd): " + this.sftpChannel.pwd() );
         }
      }
      catch( JSchException e )
      {
         logger.error( "[Order:" + orderId + "] Error connecting to SFTP-Server... (uri: '" + this.sftpUri + "')", e );
         return false;
      }
      catch( SftpException e )
      {
         logger.error( "[Order:" + orderId + "] Error connecting to SFTP-Server... (uri: '" + this.sftpUri + "')", e );
         return false;
      }
      return this.sftpChannel.isConnected();
   }

   public void uploadSynchronized( String source, String target, Long filesize, Long orderId )
   {
      long overallFilesize = filesize == null ? 0 : filesize;
      long overallUploadedBytes = 0;
      long uploadedBytes = 0;

      try
      {
         if( !checkIfFileExists( source ) )
         {
            OutputStream tOut = this.sftpChannel.put( target );
            FileInputStream in = new FileInputStream( source );
            byte[] bytes = new byte[ this.chunkSize ];
            int count = in.read( bytes );
            try
            {
               while( count != -1 && count <= this.chunkSize && !this.abort )
               {
                  tOut.write( bytes, 0, count );

                  uploadedBytes = uploadedBytes + this.chunkSize;
                  if( uploadedBytes >= BYTES_TO_LOG )
                  {
                     overallUploadedBytes = overallUploadedBytes + uploadedBytes;
                     uploadedBytes = 0;
                     logger.info( "[Order:" + orderId + "] " + overallUploadedBytes / MEGA_BYTE + "MB of " + overallFilesize / MEGA_BYTE
                           + "MB uploaded (source: '" + source + "', target: '" + target + "')" );
                  }
                  count = in.read( bytes );
               }
            }
            finally
            {
               in.close();
               tOut.close();
            }
         }
         else
         {
            this.success = false;
            logger.error( "[Order:" + orderId + "] Error uploading file... (source: '" + source + "', target: '" + target
                  + "'): File already exists on SFTP-Server" );
         }
      }
      catch( IOException e )
      {
         this.success = false;
         logger.error( "[Order:" + orderId + "] Error uploading file... (source: '" + source + "', target: '" + target + "')", e );

      }
      catch( SftpException e )
      {
         this.success = false;
         logger.error( "[Order:" + orderId + "] Error uploading file... (source: '" + source + "', target: '" + target + "')", e );
      }
   }
 

Tobse

Top Contributor
Dies bekomme ich allerdings momentan auf Clientenseite nicht mit. Es tritt für mich kein sichtbarer Fehler auf, sondern der Transfer bleibt einfach "hängen".

Heisst was? Evtl eine ungefangene / unreportete Exception? Unterstütz das Framework den Befehl überhaupt?
Und ist diese Konfiguration tatsächlich nötig? (falls du sie überhaupt ändern kannst)
 

Taste

Bekanntes Mitglied
In meinem Code-Auszug kann man ja sehen, was ich an Exceptions abfange/ausgebe. Mehr ist mir nicht bekannt.

Und ja, das "Framework" unterstützt diese Funktion. Auf dem Session-Objekt (Zeile 36) habe ich die Möglichkeit, die Methode "rekey()" aufzurufen, welche genau diesem Zweck dient.
Aber es kann ja nicht zielführend sein, dies laufend "auf gut Glück" zu tun, daher stellt sich mir die Frage, ob ich das irgendwie mitbekommen kann, wenn es erforderlich wird.

Es handelt sich um diese Funktion: ProFTPD module mod_sftp
Ich habe nicht unmittelbar Zugriff auf die Einstellungen des FTP-Servers. Die Einstellungen können ja auch von den o.g. abweichen, daher möchte ich hier erst recht nichts "hart kodieren"...
 

Tobse

Top Contributor
In meinem Code-Auszug kann man ja sehen, was ich an Exceptions abfange/ausgebe. Mehr ist mir nicht bekannt.
Zu solchen debugging-zwecken mache ich meisst einen
Code:
catch(Exception ex)
dazu, damit mir auch keie RuntimeException durch die Lappen geht.

Und ja, das "Framework" unterstützt diese Funktion. Auf dem Session-Objekt (Zeile 36) habe ich die Möglichkeit, die Methode "rekey()" aufzurufen, welche genau diesem Zweck dient.

Ich kenne JSch nicht aber ich würde mal auf deren API-Seite / bei Google suchen, ob es da evtl soetwas wie einen Event-Listener gibt, der dich über solche Sachen informiert.[/QUOTE]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
B Webview für Anwendung Netzwerkprogrammierung 7
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
J Netty umsetzung für ein Protokoll Netzwerkprogrammierung 1
J ERM für kleine Verwaltungsdatenbank Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
Messoras Launcher für mein Spiel Netzwerkprogrammierung 7
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
S Webserver für Jar File Netzwerkprogrammierung 4
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
M Erreichbar für alle zu sein Netzwerkprogrammierung 9
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
T uberspace.de als (v)root-Ersatz für kleinere Java-Anwendungen? Netzwerkprogrammierung 12
L Proxy für Dateidownload? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Leitstelle für Funkspiel Netzwerkprogrammierung 8
F Java-Beispielcode für Zeroconf (ähnlich Apple Bonjour) Netzwerkprogrammierung 7
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N RMI Einstellungen für "übers Internet" Netzwerkprogrammierung 8
F SSL-Zertifikate für viele Nutzer? Netzwerkprogrammierung 8
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
S wie stell man die classpath für JARs? Netzwerkprogrammierung 3
M Bestimmte Klassen für Netzwerkchecks gesucht Netzwerkprogrammierung 11
M ClassLoader für Axis2 setzen Netzwerkprogrammierung 15
M Welches Speicherformat für News-Database?? Netzwerkprogrammierung 2
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
A DataGramsocket Übertragungsproblem im Internet (IPs für Voip) Netzwerkprogrammierung 5
E Userliste für Chat Applet Netzwerkprogrammierung 4
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
B Variablen ausrichten für Übertragung Netzwerkprogrammierung 2
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
K Getrennte Rechner für RMI-Server/RMI-Registry, bzw. Alternativen? Netzwerkprogrammierung 5
dayaftereh HTTPCleint und HTMLparser für hTTpBot Netzwerkprogrammierung 2
E Socket Client-Applikation mit GUI für Internet IO-Platine Netzwerkprogrammierung 2
0din Grundlage für Bluetooth Netzwerkprogrammierung 5
N "Jungfernflug" der Socketprogrammierung für ein Mühlespiel Netzwerkprogrammierung 8
F Empfehlung für embedded Webserver Netzwerkprogrammierung 10
W Bibliothek für Certificate Management Protocol (CMP) Netzwerkprogrammierung 3
O Client/Server für Ticker Netzwerkprogrammierung 2
J Stubs für SOAP-Webservice generieren. Ich bekomme es einfach nicht hin... Netzwerkprogrammierung 3
dayaftereh Bester Stream für ein Spiel? Netzwerkprogrammierung 15
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
G FileDialog für FTP Client Netzwerkprogrammierung 2
P Welches Protokoll für RMI verwenden? Netzwerkprogrammierung 10
H RCON Tool für Gameserver Netzwerkprogrammierung 11
A Wichtig für einen Chat? Netzwerkprogrammierung 4
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
S Realisierung eines Netzwerkcodes für ein Strategiespiel Netzwerkprogrammierung 7
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
W Was für ein Stream soll ich verwenden? Netzwerkprogrammierung 8
A Rezept für Webservices Netzwerkprogrammierung 5
I unc pfad für die klasse file? Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
T Filter für Input UND OutputStream Netzwerkprogrammierung 4
T Welches Netzwerk ist am bestern für. Netzwerkprogrammierung 2
G server für mein spiel. Netzwerkprogrammierung 5
M Log In Programm für Seiten Netzwerkprogrammierung 2
G Netzwerkprogrammierung für spiele Netzwerkprogrammierung 2
A IRC-Server für das lokale Netzwerk? Netzwerkprogrammierung 12
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
S Server für Internetspiel Netzwerkprogrammierung 2
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
S Voreinstellungen für JavaMail Netzwerkprogrammierung 2
S Idee für Projekt auf Agentenbasis Netzwerkprogrammierung 8
S Suche API für einfachen HTTP-Zugriff. Netzwerkprogrammierung 17
G benötige Beispiel für parallel ablaufende Threads Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
Z Protokoll für Schiffeversenken Netzwerkprogrammierung 5
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
R proxy für java anwendung angeben [resolved] Netzwerkprogrammierung 15
B Wie Router einstellen für CLient-Server-Programm? Netzwerkprogrammierung 4
R PPTP Protokoll für JAVA Netzwerkprogrammierung 3
Icewind Klasse für DNS Anfragen Netzwerkprogrammierung 14
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
D beste Methode für Datenübertragung ? Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben