参考:
https://www.cnblogs.com/hxsyl/p/6118078.html
https://www.oschina.net/translate/linux-netcat-command
https://blog.csdn.net/qq_29499107/article/details/82384393
nc提供的功能:可以通过Tcp和Udp在网络中读写数据。它所作的工作就是在两台电脑之间建立连接并返回两个数据流,基于这样的功能可以有很多的使用场景。
nc使用场景1--端口扫描
用于发现机器上开放的端口
$ nc -v -z -w2 127.0.0.1 1-100
Connection to 127.0.0.1 22 port [tcp/ssh] succeeded! Connection to 127.0.0.1 53 port [tcp/domain] succeeded! Connection to 127.0.0.1 80 port [tcp/http] succeeded! ... nc: connect to 127.0.0.1 port 100 (tcp) failed: Connection refused
这个命令打印1-100的开发端口。
z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点)
v 参数显示执行过程
n 参数告诉netcat 不要使用DNS反向查询IP地址的域名
一旦发现开放端口,就可以使用nc连接服务抓取banner。Banner是一个你连接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。
nc -v 172.31.100.7 21
netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息。
nc应用场景2--文件传输
如果只是临时一次文件传输,使用nc就不用麻烦的配置ftp等。
首先在接收端192.168.1.3上: nc -l 1234 > file.txt
然后在发送端192.168.1.2上: nc 192.168.1.3 < file.txt
server $nc -l 1567 < file.txt
client $nc -n 172.31.100.7 1567 > file.txt
这里在A上创建了一个服务器,并且重定向netcat的输入为文件file.txt,如有有连接连接到1234端口,nc会发送file的文件内容。
在客户端我们重定向输出到file.txt,当B连接到A,A发送文件内容,B保存文件内容到file.txt.
没有必要创建文件源作为Server,我们也可以相反的方法使用。像下面的我们发送文件从B到A,但是服务器创建在A上,这次我们仅需要重定向netcat的输出并且重定向B的输入文件。
B作为Server
Server $nc -l 1567 > file.txt
Client nc 172.31.100.23 1567 < file.txt
注意:先运行接收端,指定一个端口为1234,文件为test.txt,再执行发送端,并且发送端必须存在同名的文件test.txt
-l 开启 监听模式,用于指定nc将处于监听模式。通常 这样代表着为一个 服务等待客户端来链接指定的端口。
-p<通信端口> 设置本地主机使用的通信端口。有可能会关闭
-k<通信端口>强制 nc 待命链接.当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k 我们可以强制服务器保持连接并继续监听端口。
nc应用场景3--目录传输
从server1(192.168.16.233)拷贝nginx目录内容到server2(192.168.48.47)上。需要先在server2上,用nc激活监听,
server2上运行:# nc -l 1234 | tar xzv-
server1上运行:# tar czv- nginx | nc 192.168.48.47 1234
nc应用场景4--会话
在Server(192.168.1.2)上:
$nc -l 1567
在Client(192.168.1.3)上:
$nc 192.168.1.2 1567