Probleme mit ncat und ssl
lima-city → Forum → Heim-PC → Betriebssysteme
code
datei
file
flag
host
idee
implementierung
kleine datei
kleine dateien
laufen
list
listen
port
problem
schleife
server
versenden
versendeten dateien
vielzahl
zertifikat
-
Hallo,
ich versuche eine (bzw. viele) Dateien via ncat zu versenden. Dabei sind eine vielzahl von Problemen aufgetaucht, welche ich nach und nach lösen konnte, bis auf eines: Wenn ich SSL verwende, gibt es ab einer gewissen (unbestimmten) größe der Datei Probleme. Aber zurück auf Anfang.
Das erste Problem war, dass ich viele Dateien empfangen wollte, ncat aber prinzipiell alles in eine Datei schreiben will. (Bzw. ins Terminal) Eine lösung wäre gewesen, ein Bash-Script zu schreiben, welches ncat ohne keep-open-flag startet, das ganze in einen zufallsgenerierten dateinamen packt und das ganze dann in einer Schleife macht. Problem dabei ist, dass es in der schleife (und beim starten eines neuen Server-Prozesses) immer wieder zu einer geringfügigen Verzögerung kommt, woraufhin auf Clientseite die Verbindung scheitert und Dateien verworfen werden.
Der keep-open-flag ist also quasi zwingend nötig, was das Problem mit mehreren Dateien aufwarf. Dieses ließ sich lösen, durch die implementierung eines äußerst rudimentären Protokolls, welches die versendeten Dateien in base64 kodiert und dann mit führenden und folgenden Linebreak sendet.
. Dann kann am Ende die Datei mit einem einfachen Script in viele, kleine Dateien zerlegt werden.echo -e "\n$(base64 -w 0 file)\n" | ncat -C host port
Dann folgte die Idee, das ganze mit SSL laufen zu lassen. Und dort fingen die Probleme an. Erstmal schnell mit openssl schlüssel/zertifikat erzeugt (
), den Server viaopenssl req -nodes -new -x509 -keyout key.pem -out cert.pem;
gestartet - schien zu laufen. Wenn nun der Client viancat -k --listen --ssl-key ssl/key.pem --ssl-cert ssl/cert.pem host port > incoming/filelist
eine kleine Datei sendet (wenige Byte) funktioniert auch noch alles wunderbar, aber ab einer gewissen Größe bekomme ich nur noch die Meldungecho -e "\n$(base64 -w 0 file)\n" | ncat --ssl -C host port
(Auf Clientseite) - was beiNcat: Input/output error.
doch recht wenig ist. Beim Server erhalte ich-vvv
Ncat: Connection from host. Ncat: Connection from host:45310. NCAT DEBUG: Added fd 4 to list, nfds 3, maxfd 4 NCAT DEBUG: selecting, fdmax 4 NCAT DEBUG: select returned 1 fds ready NCAT DEBUG: fd 4 is ready NCAT DEBUG: selecting, fdmax 4 NCAT DEBUG: select returned 1 fds ready NCAT DEBUG: fd 4 is ready NCAT DEBUG: selecting, fdmax 4 NCAT DEBUG: select returned 1 fds ready NCAT DEBUG: fd 4 is ready NCAT DEBUG: Added fd 4 to list, nfds 1, maxfd 4 NCAT DEBUG: selecting, fdmax 4 NCAT DEBUG: select returned 1 fds ready NCAT DEBUG: fd 4 is ready NCAT DEBUG: selecting, fdmax 4 NCAT DEBUG: select returned 1 fds ready NCAT DEBUG: fd 4 is ready NCAT DEBUG: Closing connection. NCAT DEBUG: Swapping fd[2] (4) with fd[2] (4) NCAT DEBUG: Removed fd 4 from list, nfds 2, maxfd 3 NCAT DEBUG: Swapping fd[0] (4) with fd[0] (4) NCAT DEBUG: Removed fd 4 from list, nfds 0, maxfd -1 NCAT DEBUG: selecting, fdmax 3
Die Frage ist nun: Wo habe ich was falsch gemacht? Hat da jemand eine Idee? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage