how to use netcat to transfer file

netcat(简称nc)这个命令可以很方便的帮助建立TCP or UDP链接, 这次主要侧重与用它来传输文件。
一。方法如下
1)在接收端(192.168.1.2):nc -l -p 12345 192.168.1.1 > a.txt   (监听本机的12345端口,并且只允许192.168.1.1的机器链接过来,然后把数据写入到a.txt文件)
2)在发送端(192.168.1.1):   nc 192.168.1.2 12345 < b.txt  (跟192.168.1.2机器建立tcp链接之后读取b.txt文件传送给远端)

但是在发送端遇到一个问题是什么时候文件才传完呢? 正常想法是他会自动传完就close掉链接,但是实际上却不是。会一直在等,然后要手动CTRL + C才close。
但是手动的话意味着不知道关闭的时机。
后面查到一种方法可以利用 -q参数来解决问题(可惜的是Mac平台的nc命令不支持这个参数)
-q的意思是:after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.

所以改进版的发送端命令应该这样写:nc -q 3 192.168.1.2 12345 < b.txt  (标准输入遇到EOF之后3秒断掉链接)
最后别忘了在接收端用md5进行完整性校验即可。

二。性能方面
我用了scp来跟nc命令PK, nc比scp要好一些。
以下是部分小测试结果(计算时间部分使用time命令)
对于一个1.4G左右的文件, scp大约用38-45秒,但是加了-C(压缩参数)之后则需要2m29s , 而nc则用29秒左右。

三。优势
使用nc命令,可以不需要像scp那样需要有帐号在机器上面才能传输, 可以快速在两台机器传输文件,而且速度也比较快;
通过限制哪个ip才能链接过来能实现简单的访问控制(IP层面的)。

你可能感兴趣的:(linux,shell,netcat,nc,file transfer)