介绍
Netcat ( nc
) 命令是一个命令行实用程序,用于在两个计算机网络之间读取和写入数据。通信使用TCP或 UDP 进行。该命令因系统而异(netcat
、nc
、ncat
和其他)。
由于丰富的连接故障排除功能和脚本可用性,Netcat 是网络和系统管理员需要掌握的重要工具。
本文解释了该nc
命令(Netcat OpenBSD 版本)并提供了示例用例。
先决条件
-
同一网络中的两台机器。这些示例使用两个Ubuntu 18.04虚拟机。
-
访问两台设备上的命令行/终端。
-
每个设备的IP地址。
-
访问浏览器或curl命令。
nc 命令语法
该nc
命令的基本语法是:
nc [<options>] <host> <port>
该命令由以下元素组成:
-
在 Ubuntu 上,这些命令
nc
和netcat
都充当Netcat OpenBSD 版本的符号链接。在 CentOS、Debian 和 RHEL 上,命令为ncat
. -
可以
<host>
是数字 IP 地址,也可以是符号主机名。 -
是
<port>
数字端口或服务名称。
Netcat有两种工作模式:
-
连接模式。在连接模式下,Netcat 作为客户端工作。该实用程序需要
<host>
和<port>
参数。 -
聆听模式。在监听模式下,Netcat 作为服务器工作。当
<host>
省略时,Netcat 侦听指定端口的所有可用地址。
该命令尝试在提供的主机和端口上启动 TCP 连接,不带任何选项。
Netcat (nc) 命令选项
下表概述了常用nc
命令选项:
选项 | 类型 | 描述 |
---|---|---|
-4 |
协议 | 仅使用 IPv4。 |
-6 |
协议 | 仅使用 IPv6。 |
-U --unixsock |
协议 | 使用 Unix 域套接字。 |
-u --udp |
协议 | 使用UDP连接。 |
-g <hop1, hop2,...> |
连接方式 | 设置 IPv4 中松散源路由的跃点。跃点是 IP 地址或主机名。 |
-p <port> --source-port <port> |
连接方式 | 将 Netcat 源端口绑定到 <port>。 |
-s <host> --source <host> |
连接方式 | 将 Netcat 主机绑定到 <主机>。 |
-l --listen |
聆听模式 | 侦听连接而不是使用连接模式。 |
-k --keep-open |
聆听模式 | 使多个同时连接保持打开状态。 |
-v --verbose |
输出 | 设置详细级别。多次使用可以增加冗长程度。 |
-z |
输出 | 无需建立连接即可报告连接状态。 |
该列表并不全面。使用man 命令查看手册页以获取完整的选项列表:
man netcat
使用箭头键导航并按q退出。
nc 命令示例
以下nc
命令示例假设两台设备具有唯一的 IP 地址。示例中的两个设备是:
1. phoenixNAP_1
(设备1)有IP 10.0.2.4
。
2. phoenixNAP_2
(设备2)有IP 10.0.2.5
。
两台设备都作为虚拟机运行 Ubuntu 18.04,但也可以进行其他设置。请注意,不同操作系统的命令有所不同。
客户端/服务器连接
两个设备之间存在简单的客户端/服务器连接。一个设备充当服务器(侦听),而另一台设备充当客户端(连接)。
1. 在设备 1 上,在侦听模式下运行nc
命令并提供端口:
nc -lv 1234
该-l
选项激活监听模式,使设备 1 成为服务器。输出显示设备由于该-v
选项正在侦听连接。
2. 在设备 2 上,使用nc
设备 1 的 IP 地址和端口运行命令:
nc -v 10.0.2.4 1234
输出结果表明连接成功。设备 1 确认链接并打印设备 2 的 IP 地址。
客户端/服务器连接成功建立。
3. 从任一设备发送消息,另一台设备上会显示相同的消息。连接建立后,客户端和服务器的行为相同。
要结束连接,请在任一计算机上按CTRL + C。
Ping 网站上的特定端口
使用 Netcat 作为ping 命令的替代方法来测试网站的特定端口。例如:
nc -zv google.com 443
如果 ping 成功,输出将显示连接成功的消息。该-z
选项可确保连接不会持续存在。
Netcat没有给出任何具体信息,还有其他方法可以ping特定端口。
扫描端口
使用该nc
命令扫描开放端口。
1、在设备2上运行nc
,监听1234端口:
nc -lkv 1234
该-k
选项可确保连接在断开连接后保持打开状态。
2. 在设备2上执行以下命令,检查1234端口是否开放:
nc -zv 10.0.2.4 1234
如果端口打开,输出将显示连接成功的消息。
3. 或者,通过添加端口范围来扫描设备 2 上的多个端口。例如:
nc -zv 10.0.2.4 1230-1235
输出显示每个端口的连接是否成功。
4. 扫描端口范围时,使用grep过滤结果:
nc -zv 10.0.2.4 1230-1235 2>&1 | grep 'succeeded'
例如,对单词进行 grepsucceeded
仅显示输出中的开放端口。
传输文件
Netcat 允许通过已建立的连接传输文件。要查看文件传输的工作原理,请执行以下操作:
1. 使用以下命令在设备 1 上创建示例文件touch
:
touch file.txt
该命令创建一个空文本文件。
2. 在设备1上创建监听连接并将文件重定向到nc
命令:
nc -lv 1234 < file.txt
3. 在设备 2 上,连接到设备 1 并重定向文件:
nc -zv 10.0.2.4 1234 > file.txt
使用ls 命令确认文件传输已完成。
输出显示文件名,表明传输成功。
传输目录
Netcat 不允许以与文件相同的方式传输目录。使用tar 命令发送多个文件或目录并将命令通过管道传输到 Netcat。
1. 在任一设备上创建一个目录并添加多个文件:
mkdir files; touch files/file{1..5}.txt
该命令创建一个包含五个文本文件的文件目录。
2. 使用cd 命令导航到该目录:
cd files
3. 在另一台设备上,创建并输入目标目录:
mkdir files_destination && cd files_destination
4. 在端口 1234 上创建侦听连接并通过管道传输tar
命令:
nc -lv 1234 | tar xfv -
侦听连接需要 tar 提取的文件。
5. 在另一台设备上,发送目录:
tar -cf - . | nc -v 10.0.2.5 1234
连接建立并发送 tar 文件。
接收端立即提取文件,传输完成。
创建网络服务器
要使用 Netcat 创建 Web 服务器,请执行以下操作:
1. 在设备 1 上运行 Web 服务器并侦听端口 1234 上的连接:
nc -lv 10.0.2.4 1234
省略该地址将在localhost上运行 Web 服务器。
2. 在设备 2 上,在浏览器中运行地址和端口。或者,使用curl命令:
curl 10.0.2.4:1234
页面暂时不显示任何内容。
3. 在 Web 服务器正在侦听的设备 1 上,浏览器发送的请求 或 是curl
可见的。
该消息显示请求信息,例如请求类型、主机和用户代理。
4. 要将响应发送到客户端(设备 2),请将以下代码粘贴到设备 1 上:
HTTP/1.1 200 Everything OK
Server: netcat
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<title>
Netcat
</title>
</head>
<body>
<h1>A webpage served with nc</h1>
</body>
</html>
响应立即更新信息。
如果从浏览器访问 Web 服务器,浏览器页面会实时获取更新。
Web 服务器已成功运行。使用CTRL + C关闭服务器。
简单的聊天服务器
利用 Netcat 通信功能创建一个简单的聊天服务器。
1. 在设备 1 上,运行以下命令:
awk -W interactive '$0="Bob: "$0' | nc -lv 1234
awk 命令帮助将 Bob 的用户名添加到通过服务器发送的消息中。
2. 在设备 2 上,添加不同的用户名并连接到聊天服务器:
awk -W interactive '$0="Alice: "$0' | nc 10.0.2.4 1234
来回发送消息以测试聊天。Bob(设备 1)看到从 Alice(设备 2)发送的带有前缀名称的消息,反之亦然。
他们自己的用户名不会显示在聊天窗口中。
发送 HTTP 请求
使用 Netcat 和printf向网站发送HTTP请求。例如,要在端口 80(用于 TCP/IP 连接)上向 google.com 发送请求,请运行以下命令:
printf "GET / HTTP/1.0rnrn" | nc -v google.com 80
输出打印页眉和内容。大多数页面都会禁用 TCP 连接并获取 404 错误页面。
结论
按照本教程中的示例进行操作后,将了解如何使用该nc
命令。Netcat 是网络管理员的强大工具。
原文始发于微信公众号(河南等级保护测评):Kali Linux 最佳工具之nc 命令 (Netcat)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论