在日常的开发过程中经常会遇到这种需求:将服务器一上的某个文件拷贝到服务器二机器上。因为服务器的机器都只能和堡垒机(跳板机)通信,所以最开始的做法都是通过scp先将服务器一的文件拷贝到跳板机,然后在将跳板机的文件传递到服务器二,这种做法很原始低效。在一次无意中被一位大神看到,给我介绍了NetCat工具。从此便对齐爱不释手。

NetCat简介

NetCat是一个利用TCP或者UDP网络链接来进行信息读写的程序,被誉为网络工具中的瑞士军刀。我们通常可以利用他来完成以下的几个功能:

  • 实现不同Linux机器之间文件传输
  • 制作蜜罐收集客户端信息
  • 端口扫描

下面是一些网友对NetCat的功能总结:

  • 支持连出和连入(outbound and inbound connection),TCP和UDP,任意源和目的端口
  • 全部DNS正向/反向检查,给出恰当的警告
  • 使用任何源端口
  • 使用任何本地设置的网络资源地址
  • 内建端口扫描功能,带有随机数发生器
  • 内建loose source-routing功能
  • 可能标准输入读取命令行参数
  • 慢发送模式,每N秒发送一行
  • 以16进制显示传送或接收的数据
  • 允许其它程序服务建立连接,可选
  • 对Telnet应答,可选

NetCat的安装

如果机器上面没有netcat可以手动安装
centos类系统的安装命令:

1
2
sudo yum install nc

deban类系统的安装命令:

1
2
sudo apt-get install nc

NetCat参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用
-k 此参数用在服务器端 用来保证服务器的

NetCat实现服务器机器通信

假设我们需要将服务器一(机器名称 : l-foo.google.com)的文件传送到服务器二(机器名称:l-bar.google.com)上面

传递压缩文件夹

一:服务器一(机器名称 : l-foo.google.com)上面执行:

1
2
tar -zcf - test.google.com/ | nc -l 5678

二: 在服务器二(机器名称:l-bar.google.com)上面执行:

1
2
nc l-foo.google.com 5678 | sudo tar -xzf -

分别在两个机器上执行这两条命令可以发现,在bar机器上已经有了foo机器上的test.qunar.com文件夹

传递非压缩文件

一:服务器一(机器名称 : l-foo.google.com)上面执行:

1
2
sudo nc -l 2222 <a.txt

二: 在服务器二(机器名称:l-bar.google.com)上面执行:

1
2
sudo nc l-foo.google.com 2222 > a.txt

执行上面两条命令可以发现在服务器bar机器上已经有了foo机器上的a.txt文件

NetCat制作蜜罐收集客户端信息

蜜罐简介:蜜罐形象地描述就是将蜜蜂引入到罐子中,主要用于收集黑客信息。就是我制作一个假的服务器让黑客攻击,然后收集他的信息,用作证据。

在foo机器启动一个蜜罐

1
2
sudo nc -l 80

当黑客攻击如下URL时:

1
2
http://l-foo.google.com/

foo机器就会得到如下的信息,然后保存起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
GET / HTTP/1.1
Host: l-foo.google.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: XXX=XXXX;
XXXGlobal=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

这样你就得到了攻击者的详细信息

NetCat进行TCP端口扫描

扫描foo机器 1到10000端口是否有TCP链接

1
2
nc -z -w1 -v l-foo.google.com 1-10000 | grep 'succeed' | awk '{print "host:"$3,$4" port has a tcp connect"}'

得到如下信息:

1
2
3
4
5
6
host:l-foo.google.com 22 port has a tcp connect
host:l-foo.google.com 53 port has a tcp connect
host:l-foo.google.com 3306 port has a tcp connect
host:l-foo.google.com 5666 port has a tcp connect
host:l-foo.google.com 8668 port has a tcp connect

表明: 22,53,3306 … 机器上面有TCP链接。