通过netcat发送文件


23

我正在使用类似的方法将文件从一台计算机发送到另一台计算机:

要提供文件(在计算机A上):

cat something.zip | nc -l -p 1234

接收文件(在计算机B上):

netcat server.ip.here. 1234 > something.zip

我的问题是...我可以相反吗?假设我在计算机B上有文件,但我想将其发送给A,但不是我上面的写法,而是通过使应该接收文件(A)的计算机成为“侦听”服务器并连接正在“发送”文件的计算机( B)发送到服务器并发送文件?可能吗?我认为可能是这样,但我不确定如何执行此操作。

如果我的上述解释搞砸了:我该如何将文件发送到“服务器”而不是在服务器上提供文件,然后再从中取出文件(就像我上面所做的那样)?


注意:如果nc由于scp速度太慢而使用并且不需要加密,则可能要切换到udpcastsuperuser.com/questions/692294/…–
unhammer

Answers:


38

在您的服务器(A)上:

nc -l -p 1234 -q 1> something.zip </ dev / null
在您的“发送方客户”(B)上:
猫something.zip | netcat server.ip.here 1234


是的,我以为我必须以某种方式改变立场,但我不确定如何:)。谢谢,它有效!
菲尔(Phil)2010年

这是一个可爱的网猫技巧。
DaveParillo 2010年

2
为什么是< /dev/null一部分?
törzsmókus

7
由于netcat同时读取stdin和写入stdout,因此将从stdin读取的所有内容发送到网络,并在stdout上打印从网络接收的任何内容。</ dev / null确保接收到的文件完成后,netcat不会无限期地坐在那里等待来自控制台的输入(无论如何它都不应该读取!),并确保它不会吞噬终端可能提供的任何输入,例如,键入要运行的下一个命令。
martinwguy

4
如果有pv,我建议将“服务器客户端”操作为pv soemthing.zip | ...,这将显示进入管道的文件读取进度。
ThorSummoner

6

注意,如果您还想保留文件权限,所有权和时间戳,我们将tarnetcat一起使用来进行目录和文件的传输。

在接收系统上:

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 

希望能有所帮助。


1
很好的补充答案,但请留下评论而不是单独的答案。
agtoever

2
由于此子面板上缺少Rep点,因此无法在上面添加评论,因此我不得不提供它作为答案,尽管显然,您可以评论自己的答案。
B.Kaatz

3

电脑A: nc -l -p 1234 > filename.txt

电脑B: nc server.com 1234 < filename.txt

也应该工作;)


0

在计算机B上启动netcat的另一个实例。只需在计算机A上进行操作即可,但是从计算机B提供服务。给新服务器一个新端口。


我不想做同样的事情,我想将命令更改为其他命令(我不确定是否可行)...请看我问题中的粗体文本。我的意思是,我不想为来自B.我想成为服务器监听输入...然后我想从非监听B分别发送文件内容倾听A.
菲尔-

那不是netcat的工作方式。
DaveParillo 2010年

1
正如您从接受的答案中看到的那样-是的,netcat也是这样工作的。
菲尔

你是对的。我每天都学到新东西!
DaveParillo 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.