# ganymed Illegal sftp packet len WS_FTP



## vattenfal (13. Nov 2014)

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:


```
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.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

```
byte[] resp = receiveMessage(34000);
```

In ch.ethz.ssh2.SFTPv3Client.receiveMessage(int) befindet sich folgender Code:

```
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


----------



## vattenfal (14. Nov 2014)

hat denn niemand eine Idee?


----------



## smer4 (21. Nov 2014)

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


----------

