Netcat 文件传输问题

Netcat 文件传输问题

我刚刚编写了两个自定义脚本,用于在我的 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)。接收方没有防火墙,发送方允许该端口上的出站流量。我不知道下一步该排除什么故障。有什么想法吗?

附言:如果您觉得它更适合,请随意将其移动到 SO/SF。

答案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 [...] PORT STATE SERVICE 55515/udp open|filtered unknown

您告诉它进行 udp 扫描。您为什么要这样做?您没有在 udp 模式下使用 netcat,这对于文件传输来说甚至没有意义。

另外,正常运行 netcat 也不起作用:squircle@summit:~$ netcat 55515 [] 55515 (?) : 连接被拒绝

您没有正确转发端口。

无论如何,整个场景从一开始就存在缺陷。只需使用 scp 或 rsync。如果您坚持使用 lzma,请通过 ssh 管道传输 tar+lzma。在这种情况下使用 netcat 对您毫无用处。

相关内容