Netcat(nc)命令与示例

时间:2020-03-05 15:29:03  来源:igfitidea点击:

Netcat(或者“ nc”)是一个命令行实用程序,它使用TCP或者UDP协议跨网络连接读取和写入数据。
它是网络和系统管理员兵工厂中最强大的工具之一,并且被视为瑞士网络工具的军Knife 。

Netcat是跨平台的,可用于Linux,macOS,Windows和BSD。
我们可以使用Netcat调试和监视网络连接,扫描打开的端口,传输数据,作为代理等等。

Netcat软件包已预先安装在macOS和流行的Linux发行版(如Ubuntu,Debian或者CentOS)上。

Netcat语法

Netcat实用程序的最基本语法采用以下形式:

nc [options] host port

在Ubuntu上,我们可以使用'netcat'或者'nc'。
它们都是Netcat的openBSD版本的符号链接。

默认情况下,Netcat将尝试启动与指定主机和端口的TCP连接。
如果我们想建立UDP连接,请使用'-u'选项:

nc -u host port

端口扫描

扫描端口是Netcat最常见的用途之一。
我们可以扫描单个端口或者端口范围。

例如,要扫描20-80范围内的开放端口,可以使用以下命令:

nc -z -v 10.10.8.8 20-80

“ -z”选项将告诉“ nc”仅扫描打开的端口,而不发送任何数据给它们,而“ -v”选项则提供更多详细信息。

输出将如下所示:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

如果只想打印带有开放端口的行,则可以使用“ grep”命令过滤结果。

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

我们也可以使用Netcat查找服务器软件及其版本。
例如,如果我们在默认的SSH端口22上向服务器发送“ EXIT”命令:

echo "EXIT" | nc 10.10.8.8 22

输出将如下所示:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

要扫描UDP端口,只需在命令中添加'-u'选项,如下所示:

nc -z -v -u 10.10.8.8 20-80

在大多数情况下,对于复杂的端口扫描,Nmap是比Netcat更好的工具。

通过Netcat发送文件

通过创建基本的客户端/服务器模型,可以使用Netcat将数据从一台主机传输到另一台主机。

通过将Netcat设置为在接收主机上侦听特定端口(使用“ -l”选项),然后与其他主机建立常规TCP连接并通过该主机发送文件,可以起作用。

在接收时,运行以下命令,它将打开端口5555进行传入连接,并将输出重定向到文件:

nc -l 5555 > file_name

从发送主机连接到接收主机并发送文件:

nc receiving.host.com 5555 < file_name

要传输目录,我们可以使用“ tar”在源主机上存档目录,并在目标主机上提取存档。

在接收主机上,将Netcat工具设置为侦听端口5555上的传入连接。
传入数据通过管道传递给“ tar”命令,该命令将提取存档:

nc -l 5555 | tar xzvf 

在发送主机包上,目录并通过连接到接收主机上的侦听“ nc”进程来发送数据:

tar czvf - /path/to/dir | nc receiving.host.com 5555

我们可以在两端查看传输进度。
完成后,键入“ CTRL + C”以关闭连接。

创建一个简单的聊天服务器

在两个或者多个主机之间创建在线聊天的过程与传输文件时相同。

在第一台主机上,启动一个Netcat进程以侦听端口5555:

nc -l 5555

在第二台主机上,运行以下命令以连接到侦听端口:

nc first.host.com 5555

现在,如果我们键入一条消息并按“ ENTER”,它将显示在两台主机上。

要关闭连接,请键入“ CTRL + C”。

执行一个HTTP请求

尽管有许多更好的HTTP请求工具,例如'curl',但我们也可以使用Netcat将各种请求发送到远程服务器。

例如,要从OpenBSD检索Netcat手册页,请输入:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

完整的响应(包括HTTP标头和HTML代码)将打印在终端中。