1

У меня есть два пользовательских сценария, которые я только что написал, чтобы облегчить передачу файлов между моим VPS и моим домашним сервером. Они оба написаны на bash (короткий и сладкий):

Отправлять:

#!/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.


Получить:

#!/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.

Проблема в том, что в течение очень короткой секунды я вижу что-то вспыхивающее по линии "Connection Refused" (до того как pv перезаписывает его), и ни один файл никогда не передается. Порт пересылается через мой маршрутизатор, и Nmap подтверждает это:

~$ 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)

Кроме того, запуск netcat обычно тоже не работает:

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

Обе коробки - Ubuntu Karmic (9.10). Получатель не имеет брандмауэра, и исходящий трафик через этот порт разрешен отправителю. Я понятия не имею, что решать дальше. Есть идеи?

PS: не стесняйтесь переместить это в SO/SF, если вы чувствуете, что это будет соответствовать лучше там.

1 ответ1

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

Я понятия не имею, что вы думаете, что это делает, но вы должны удалить эти строки и просто использовать $ HOST и $ SERVER напрямую.

Проблема в том, что в течение очень короткой секунды я вижу что-то вспыхивающее по линии "Соединение отказано" (до того как pv перезаписывает его), и ни один файл никогда не передается. Порт перенаправляется через мой маршрутизатор, и nmap подтверждает это:~ $ sudo nmap -sU -PN -p55515 -v [...] ГОСУДАРСТВЕННАЯ СЛУЖБА ПОРТА 55515/udp открыто | отфильтровано неизвестно

Вы сказали это сделать сканирование UDP. Почему ты это сделал? Вы не используете netcat в режиме udp, и это даже не имеет смысла для передачи файлов.

Кроме того, запуск netcat обычно тоже не работает: squircle @ summit: ~ $ netcat 55515 [] 55515 (?): Соединение отказано

Вы неправильно перенаправляете порт.

Во всяком случае, весь этот сценарий несовершенен с самого начала. Просто используйте scp или rsync. Если вы настаиваете на использовании lzma, передайте tar+lzma через ssh. Использование netcat в этой ситуации абсолютно ничего не покупает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .