我正在使用类似这样的方法将文件从一台计算机发送到另一台计算机:
要提供文件(在计算机 A 上):
cat something.zip | nc -l -p 1234
要接收文件(在计算机B上):
netcat server.ip.here. 1234 > something.zip
我的问题是...我可以做相反的事情吗?假设我在计算机 B 上有文件,我想将其发送到 A,但不是以我上面写的方式,而是让应该接收文件的计算机 (A) 成为“监听”服务器,并将“发送”文件的计算机 (B) 连接到服务器并发送文件?这可能吗?我想可能,但我不确定如何做到这一点。
如果我的上述解释混乱了:我如何将文件发送到“服务器”而不是在服务器上提供文件然后从中获取文件(就像我上面所做的那样)?
答案1
在您的服务器(A)上:
nc -l -p 1234 -q 1 > 某物.zip < /dev/null在您的“发送方客户端”(B)上:
猫某物.zip | netcat 服务器.ip.此处 1234
答案2
需要注意的是,如果您还想保留文件权限、所有权和时间戳,我们使用柏油和网猫进行目录和文件的传输。
在接收系统上:
nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree
来自发送系统:
tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345
希望有所帮助。
答案3
计算机A: nc -l -p 1234 > filename.txt
计算机B: nc server.com 1234 < filename.txt
也应该可以工作 ;)
答案4
我为你做好了一切。请将其放在手边以备日常使用。
确保在此脚本中更改 IP 和端口。
有 3 种模式。
1. 直接文件传输
2. 压缩文件传输
3. 文件夹传输
receivefile() {
[ $# -lt 1 ] && echo '$0 <file> <port>' && return 1
local file=$1
local port=${18080:-2}
md5sum $file
nc -v -l 0.0.0.0 -p $port > $file
}
sendfile() {
[ $# -lt 1 ] && echo '$0 <file> <server> <port>' && return 1
local file=$1
local server=${115.98.2.1:-2}
local port=${18080:-3}
md5sum $file
nc -c $server $port < $file
}
receivefilecompressed() {
[ $# -lt 1 ] && echo '$0 <file> <port>' && return 1
local file=$1
local port=${18080:-2}
md5sum $file
nc -v -l 0.0.0.0 -p $port | gunzip > $file
}
sendfilecompressed() {
[ $# -lt 1 ] && echo '$0 <file> <server> <port>' && return 1
local file=$1
local server=${115.98.2.1:-2}
local port=${18080:-3}
md5sum $file
gzip -c $file | nc -c $server $port
}
receivefolder() {
local port=${18080:-1}
nc -v -l 0.0.0.0 -p $port | tar zxv
}
sendfolder() {
[ $# -lt 1 ] && echo '$0 <folder> <server> <port>' && return 1
local folder=$1
local server=${115.98.2.1:-2}
local port=${18080:-3}
tar czp $folder | nc -c $server $port
}