使用nc传输文件

局域网内Linux机器间如何快速传文件? ssh过于繁琐, 转而采用 nc(netcat)

TL;DR:

先在接收端监听端口: nc -l 12345 > filename

在发送端写入文件: nc -w 3 <ip> 12345 < sourcefile

其中-w 3的含义是输入数据到达末尾三秒后, 关闭socket. 针对openbsd.nc实现也可以改用 nc -N <ip> 12345 < sourcefile. 不加这个参数会导致接收端一直等待数据而无法退出.

注意 nc 是 netcat. Ubuntu上预装的是openbsd实现. 和nmap套件中的 ncat 要区分开.

传输完成后可通过hash校验判断文件是否完整传输:

sha256sum filname

sha256sum sourcefile

需要注意的是, nc是基于明文传输的, 因此只适用于受信任的局域网环境. 公网环境下还是老实用ssh/scp/sftp吧.

参考

Using Netcat for File Transfers

nc(1) - OpenBSD manual pages

ncat(1) - Linux manual page