ganymed Illegal sftp packet len WS_FTP

vattenfal

Neues Mitglied
hallo zusammen,

ich habe im Internet gegoogelt, jedoch keine Lösung zum folenden Problem gefunden, welches auch hier beschrieben, jedoch keine Lösung angebotenwird
Ganymed SSH-2 "Illegal sftp packet len" -KaCode


Ich benutze die SFTPv3Client -Klasse der opensource-java-Bibliothek ganymed-ssh2, um mir u.a. den Verzeichnis-Inhalt auf einem SFTP-Server anzuzeigen:

Java:
SFTPv3Client client = new SFTPv3Client(conn);
Vector<SFTPv3DirectoryEntry> fileVector = client.ls("meinSFTPVerzeichnis");

Dies funktioniert auch wunderbar solange es sich um einem SFTP-Server auf einer Linux-Maschine handelt.

Nun muss ich auf einen SFTP-Server (WS_FTP) auf einer Windows-Maschine zugreifen und den Verzeichnis-Inhalt anzeigen lassen; dies funktioniert auch solange sich nicht mehr als 194 Dateien in dem Verzeichnis befinden.
Sind es mehr als 194 Dateien, dann taucht folgende Fehlermeldung auf:

Java:
java.io.IOException: Illegal sftp packet len: 34006
    at ch.ethz.ssh2.SFTPv3Client.receiveMessage(SFTPv3Client.java:245)
    at ch.ethz.ssh2.SFTPv3Client.scanDirectory(SFTPv3Client.java:724)
    at ch.ethz.ssh2.SFTPv3Client.ls(SFTPv3Client.java:927)

Wenn man sich den Quellcode im ch.ethz.ssh2.SFTPv3Client.scanDirectory(byte[]) anschaut, steht dort die Zeile
Java:
byte[] resp = receiveMessage(34000);

In ch.ethz.ssh2.SFTPv3Client.receiveMessage(int) befindet sich folgender Code:
Java:
byte[] msglen = new byte[4];
readBytes(msglen, 0, 4);

int len = (((msglen[0] & 0xff) << 24) | ((msglen[1] & 0xff) << 16) | ((msglen[2] & 0xff) << 8) | (msglen[3] & 0xff));

if ((len > maxlen) || (len <= 0))
    throw new IOException("Illegal sftp packet len: " + len);
Ich vermute mal, dass der Server Antwort-Paket(e) zurückschickt, der länger als 34000Bytes ist (sind).

Frage:
Wie kann ich dem Server sagen, dass er Pakete kleiner als 34000Bytes schicken soll?
Ist im SFTP-Standard festgeschrieben, dass versendete Server-Pakete nicht mehr als 34000 Bytes verschicken dürfen? Warum verschickt dann WS_FTP längere Pakete?

Danke für jede Antwort
 
Zuletzt bearbeitet von einem Moderator:

smer4

Mitglied
Whoa, hast du tief inspiziert)))

Aus meiner sicht würde ich dan in den blöden Quellcode von Bibliothek leider eingreifen und anstatt von eine Exception zu werden, die Bufferizierung auf Array "resp" zu machen, und auch dem Nützer die Möglichkeit zu geben die gewünschte Grösse von "resp" via ein Konstruktor zu geben
 

Ähnliche Java Themen


Oben