Netcat-Dateiübertragungsproblem

2167
squircle

Ich habe zwei benutzerdefinierte Skripts, die ich gerade geschrieben habe, um das Übertragen von Dateien zwischen meinem VPS und meinem Heimserver zu erleichtern. Sie sind beide in bash (kurz & süß) geschrieben:

Senden:

#!/bin/bash  SENDFILE=$1 PORT=$2 HOST='<my house>' HOSTIP=`host $HOST | grep "has address" | cut --delimiter=" " -f 4`  echo Transferring file \"$SENDFILE\" to $HOST \($HOSTIP\).  tar -c "$SENDFILE" | pv -c -N tar -i 0.5 | lzma -z -c -6 | pv -c -N lzma -i 0.5 | nc -q 1 $HOSTIP $PORT  echo Done. 


Bekommen:

#!/bin/bash  SERVER='<myserver>' SERVERIP=`host $SERVER | grep "has address" | cut --delimiter=" " -f 4` PORT=$1  echo Receiving file from $SERVER \($SERVERIP\) on port $PORT.  nc -l $PORT | pv -c -N netcat -i 0.5 | lzma -d -c | pv -c -N lzma -i 0.5 | tar -xf -  echo Done. 

Das Problem ist, dass ich für eine sehr kurze Sekunde etwas in der Richtung von Flash "Connection Refused"(vor dem pvÜberschreiben) sehe und keine Datei übertragen wird. Der Port wird über meinen Router weitergeleitet und von nmap bestätigt:

~$ sudo nmap -sU -PN -p55515 -v <my house>  Starting Nmap 5.00 ( http://nmap.org ) at 2010-04-21 18:10 EDT NSE: Loaded 0 scripts for scanning. Initiating Parallel DNS resolution of 1 host. at 18:10 Completed Parallel DNS resolution of 1 host. at 18:10, 0.00s elapsed Initiating UDP Scan at 18:10 Scanning 74.13.25.94 [1 port] Completed UDP Scan at 18:10, 2.02s elapsed (1 total ports) Host 74.13.25.94 is up. Interesting ports on 74.13.25.94: PORT STATE SERVICE 55515/udp open|filtered unknown  Read data files from: /usr/share/nmap Nmap done: 1 IP address (1 host up) scanned in 2.08 seconds Raw packets sent: 2 (56B) | Rcvd: 5 (260B) 

Das Ausführen von netcat funktioniert normalerweise auch nicht:

squircle@summit:~$ netcat <my house> 55515 <my house> [<my IP>] 55515 (?) : Connection refused 

Beide Boxen sind Ubuntu Karmic (9.10). Der Empfänger verfügt über keine Firewall, und ausgehender Datenverkehr an diesem Port ist für den Absender zulässig. Ich habe keine Ahnung, was als nächstes zu beheben ist. Irgendwelche Ideen?

PS: Fühlen Sie sich frei, dies zu SO / SF zu verschieben, wenn Sie das Gefühl haben, dass es dort besser passt.

1

1 Antwort auf die Frage

1
user23307
HOSTIP=`host $HOST | grep "has address" | cut --delimiter=" " -f 4` SERVERIP=`host $SERVER | grep "has address" | cut --delimiter=" " -f 4` 

Ich habe keine Ahnung, was Sie Ihrer Meinung nach erreichen, aber Sie sollten diese Zeilen entfernen und $ HOST und $ SERVER direkt verwenden.

Das Problem ist, dass ich für eine sehr kurze Sekunde etwas in der Richtung von "Connection abgelehnt" (bevor pv es überschreibt) blinkt, und keine Datei jemals übertragen wird. Der Port wird über meinen Router weitergeleitet, und nmap bestätigt es: ~ $ sudo nmap -sU -PN -p55515 -v ​​[...] PORT STATE SERVICE 55515 / udp offen | gefiltert unbekannt

Sie haben ihm gesagt, ein UDP-Scan durchzuführen. Warum hast du das getan? Sie verwenden netcat nicht im udp-Modus und auch für die Dateiübertragung ist dies überhaupt nicht sinnvoll.

Das Ausführen von netcat funktioniert normalerweise auch nicht: squircle @ summit: ~ $ netcat 55515 [] 55515 (?): Verbindung abgelehnt

Sie leiten den Port nicht korrekt weiter.

Jedenfalls ist dieses ganze Szenario von Anfang an fehlerhaft. Verwenden Sie einfach scp oder rsync. Wenn Sie darauf bestehen, lzma zu verwenden, leiten Sie tar + lzma über ssh. Wenn Sie netcat in dieser Situation verwenden, können Sie absolut nichts kaufen.

Einverstanden ... warum die Dinge komplizierter machen, als sie schon sind. SCP, rsync oder plain 'ole FTP sind in dieser Situation alles andere als netcat. heavyd vor 14 Jahren 0
@justin: Danke für die Rückmeldung; Für mich hatte SCP zu viel Overhead (in Anbetracht dessen, dass ich dies auf einem VPS laufe und die Verschlüsselung den gesamten Prozess verlangsamt), und einen FTPD-Dämon ständig laufen zu lassen, ist ein Schmerz (auf beiden Computern). squircle vor 14 Jahren 0
@justin: Du hast recht. Meine DD-WRT-Installation hat TCP nicht ordnungsgemäß weitergeleitet und stattdessen nur UDP weitergeleitet. Die Skripte funktionieren jetzt. Der `host $ SERVER | grep "hat Adresse" | cut --delimiter = "" -f 4` ruft nur die IP des Hosts / Servers ab (quick & dirty), sodass sich netcat nicht über einen DNS-Namenskonflikt beschwert. Danke für den Vorschlag. squircle vor 14 Jahren 0
scp mag zwar langsam gewesen sein, hatte aber definitiv nichts mit der Verschlüsselung zu tun, und alles, was mit dem scp-Protokoll zu tun hatte, war furchtbar ineffizient. Netcat kauft Ihnen absolut nichts anderes, als komplizierter und weniger sicher zu sein. Verwenden Sie einfach Teer über SSH. user23307 vor 14 Jahren 0