通过netcat发送文件

Phi*_*hil 38 linux netcat

我正在使用这样的东西将文件从一台计算机发送到另一台:

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

cat something.zip | nc -l -p 1234
Run Code Online (Sandbox Code Playgroud)

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

netcat server.ip.here. 1234 > something.zip
Run Code Online (Sandbox Code Playgroud)

我的问题是……我可以反其道而行之吗?假设我在计算机 B 上有文件,我想将它发送到 A,但不是按照我上面写的方式,而是通过使应该接收文件 (A) 的计算机成为“侦听”服务器并连接正在“发送”文件的计算机( B)到服务器并发送文件?是否可以?我认为可能是,但我不知道如何做到这一点。

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

mar*_*guy 58

在您的服务器 (A) 上:

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

  • 因为 netcat 同时读取标准输入和写入标准输出,将从标准输入读取的任何内容发送到网络并在标准输出上打印从网络接收到的任何内容。&lt;/dev/null 确保,当接收到的文件完成时,netcat 不会无限期地等待来自控制台的输入(无论如何它不应该读取!)并且还确保它不会吞噬任何可以从终端获得的输入,例如您键入要运行的下一个命令。 (9认同)
  • 为什么是 `&lt; /dev/null` 部分? (6认同)
  • 如果你有`pv`,我建议将“服务器客户端”操作为`pv soemthing.zip | ...`,这将显示文件读取进入管道的进度。 (6认同)

B.K*_*atz 7

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

在接收系统上:

nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree
Run Code Online (Sandbox Code Playgroud)

从发送系统:

tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 
Run Code Online (Sandbox Code Playgroud)

希望有帮助。

  • 由于此子板上缺少代表点,因此无法在上面添加评论,因此我不得不提供它作为答案,但显然,您可以对自己的答案发表评论。 (4认同)

小智 6

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

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

也应该工作;)