netcat 或者 nc 是 Linux 下的一个用于调试和检查网络工具包的工具。可用于创建 TCP/IP 连接。netcat被称为网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,可以在脚本中以多种方式使用它。 你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

 

端口扫描 :

扫描20-25端口号,-w2表示延时2秒 ,127.0.0.1表示待扫描机器的ip地址

nc -v -z -w2 127.0.0.1 20-25

nc: connect to 127.0.0.1 port 20 (tcp) failed: Connection refused

nc: connect to 127.0.0.1 port 21 (tcp) failed: Connection refused

Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!

nc: connect to 127.0.0.1 port 23 (tcp) failed: Connection refused

nc: connect to 127.0.0.1 port 24 (tcp) failed: Connection refused

nc: connect to 127.0.0.1 port 25 (tcp) failed: Connection refused

 

从192.168.2.33拷贝文件到192.168.2.34

1234为端口号

在192.168.2.34上:nc -l 1234 > test.txt

在192.168.2.33上: nc 192.168.2.34  1234 < test.txt

 

简单聊天工具

1234为端口号

在192.168.2.34上:nc -l 1234

在192.168.2.33上:nc 192.168.2.34 1234

这样,双方就可以相互交流了。使用ctrl+C(或D)退出。

 

 

应用举例:

1. 侦听指定端口

server:

$ nc -l 99991         


                    然后你可以使用客户端模式来连接到 9999 端口:         


                    


          client: 1$ nc localhost 999




现在如果你输入一些文本,它将被发送到服务器端

2. 使用 netcat 来传输文件

假设我们本地有一个 local文件,内容为:hello ranger

而在服务器端有一个空文件名为 server

然后我们使用如下命令来启用服务器端:

server:

$ nc -l 9999 > server



client:


cat          local          | nc localhost 9999



然后你停止服务器端,你可以查看 server 的内容就是刚才客户端传过来的 local 文件的内容:

hello ranger
3. netcat 支持超时控制

多数情况我们不希望连接一直保持,那么我们可以使用 -w 参数来指定连接的空闲超时时间,该参数紧接一个数值,代表秒数,如果连接超过指定时间则连接会被终止。

server:

nc -l 9999




client:

$ nc -w 10 localhost 9999



该连接将在 10 秒后中断。

注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。

 

 

Netcat

Netcat或者叫nc,这是一个自称是网络中的瑞士军刀般的工具。它很简单但也非常强大和灵活,允许你创建任意的网络连接。这里我们来看看如何把它作为一个端口扫描器:


$           nc          –z example.com 20-100         


          Connection to example.com 22 port [tcp          /ssh          ] succeeded!         


          Connection to example.com 80 port [tcp          /ssh          ] succeeded!



除了能够创建任意的连接,Netcat还能够监听传入的连接。这里我们利用nc的这个功能再配合tar来快速有效的在服务器之间拷贝文件。在服务器端,运行:


$          nc          –l 9090 |           tar          –xzf –



在客户端运行:

$          tar          –czf           dir          / |           nc          server 9090


我们可以使用Netcat把任何应用通过网络暴露出来,这里我们通过8080端口将shell暴露出来:


$           mkfifo          backpipe         


          $           nc          –l 8080 0<backpipe |           /bin/bash          > backpipe



现在我们可以通过任意一台客户机来访问服务器了

$           nc          example.com 8080         


          uname          –a         


          Linux li228-162 2.6.39.1-lino34           ##1 SMP Tue Jun 21 10:29:24 EDT 2011 i686 GNU/Linux



尽管后面这两个例子有些投机取巧的成分(现实中你应该使用类似rsync这样的工具来拷贝文件,用SSH来远程登录服务器),它们还是展示出了Netcat的强大和灵活,通过结合netcat和其它的应用你可以实现很多不同的事情。