10 个例子教你学会 ncat (nc) 命令
创始人
2024-03-01 21:25:39
0

ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的。它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。 它被设计成可以被脚本或其他程序调用的可靠的后端工具。同时由于它能创建任意所需的连接,因此也是一个很好的网络调试工具。

ncat/nc 既是一个端口扫描工具,也是一款安全工具,还能是一款监测工具,甚至可以做为一个简单的 TCP 代理。 由于有这么多的功能,它被誉为是网络界的瑞士军刀。 这是每个系统管理员都应该知道并且掌握它。

在大多数 Debian 发行版中,nc 是默认可用的,它会在安装系统的过程中自动被安装。 但是在 CentOS 7 / RHEL 7 的最小化安装中,nc 并不会默认被安装。 你需要用下列命令手工安装。

[root@linuxtechi ~]# yum install nmap-ncat -y

系统管理员可以用它来审计系统安全,用它来找出开放的端口然后保护这些端口。 管理员还能用它作为客户端来审计 Web 服务器、telnet 服务器、邮件服务器等, 通过 nc 我们可以控制发送的每个字符,也可以查看对方的回应。

我们还可以用它捕获客户端发送的数据以此来了解这些客户端是做什么的。

在本文中,我们会通过 10 个例子来学习如何使用 nc 命令。

例子: 1) 监听入站连接

通过 -l 选项,ncat 可以进入监听模式,使我们可以在指定端口监听入站连接。 完整的命令是这样的:

$ ncat -l port_number

比如,

$ ncat -l 8080

服务器就会开始在 8080 端口监听入站连接。

例子: 2) 连接远程系统

使用下面命令可以用 nc 来连接远程系统,

$ ncat IP_address port_number

让我们来看个例子,

$ ncat 192.168.1.100 80

这会创建一个连接,连接到 IP 为 192.168.1.100 的服务器上的 80 端口,然后我们就可以向服务器发送指令了。 比如我们可以输入下面内容来获取完整的网页内容

GET / HTTP/1.1

或者获取页面名称,

GET / HTTP/1.1

或者我们可以通过以下方式获得操作系统指纹标识,

HEAD / HTTP/1.1

这会告诉我们使用的是什么软件来运行这个 web 服务器的。

例子: 3) 连接 UDP 端口

默认情况下,nc 创建连接时只会连接 TCP 端口。 不过我们可以使用 -u 选项来连接到 UDP 端口,

$ ncat -l -u 1234

现在我们的系统会开始监听 UDP 的 1234 端口,我们可以使用下面的 netstat 命令来验证这一点,

$ netstat -tunlp | grep 1234
udp           0          0 0.0.0.0:1234                 0.0.0.0:*               17341/nc
udp6          0          0 :::1234                      :::*                    17341/nc

假设我们想发送或者说测试某个远程主机 UDP 端口的连通性,我们可以使用下面命令,

$ ncat -v -u {host-ip} {udp-port}

比如:

[root@localhost ~]# ncat -v -u 192.168.105.150 53
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.105.150:53。

例子: 4) 将 nc 作为聊天工具

nc 也可以作为聊天工具来用,我们可以配置服务器监听某个端口,然后从远程主机上连接到服务器的这个端口,就可以开始发送消息了。 在服务器这端运行:

$ ncat -l 8080

在远程客户端主机上运行:

$ ncat 192.168.1.100 8080

之后开始发送消息,这些消息会在服务器终端上显示出来。

例子: 5) 将 nc 作为代理

nc 也可以用来做代理。比如下面这个例子,

$ ncat -l 8080 | ncat 192.168.1.200 80

所有发往我们服务器 8080 端口的连接都会自动转发到 192.168.1.200 上的 80 端口。 不过由于我们使用了管道,数据只能被单向传输。 要同时能够接受返回的数据,我们需要创建一个双向管道。 使用下面命令可以做到这点:

$ mkfifo 2way
$ ncat -l 8080 0<2way | ncat 192.168.1.200 80 1>2way

现在你可以通过 nc 代理来收发数据了。

例子: 6) 使用 nc 拷贝文件

nc 还能用来在系统间拷贝文件,虽然这么做并不推荐,因为绝大多数系统默认都安装了 ssh/scp。 不过如果你恰好遇见个没有 ssh/scp 的系统的话, 你可以用 nc 来作最后的努力。

在要接受数据的机器上启动 nc 并让它进入监听模式:

$ ncat -l  8080 > file.txt

现在去要被拷贝数据的机器上运行下面命令:

$ ncat 192.168.1.100 8080 --send-only < data.txt

这里,data.txt 是要发送的文件。 -–send-only 选项会在文件拷贝完后立即关闭连接。 如果不加该选项, 我们需要手工按下 ctrl+c 来关闭连接。

我们也可以用这种方法拷贝整个磁盘分区,不过请一定要小心。

例子: 7) 通过 nc 创建后门

nc 命令还可以用来在系统中创建后门,并且这种技术也确实被黑客大量使用。 为了保护我们的系统,我们需要知道它是怎么做的。 创建后门的命令为:

$ ncat -l 10000 -e /bin/bash

-e 标志将一个 bash 与端口 10000 相连。现在客户端只要连接到服务器上的 10000 端口就能通过 bash 获取我们系统的完整访问权限:

$ ncat 192.168.1.100 10000

例子: 8) 通过 nc 进行端口转发

我们通过选项 -c 来用 nc 进行端口转发,实现端口转发的语法为:

$ ncat -u -l  80 -c  'ncat -u -l 8080'

这样,所有连接到 80 端口的连接都会转发到 8080 端口。

例子: 9) 设置连接超时

nc 的监听模式会一直运行,直到手工终止。 不过我们可以通过选项 -w 设置超时时间:

$ ncat -w 10 192.168.1.100 8080

这回导致连接 10 秒后终止,不过这个选项只能用于客户端而不是服务端。

例子: 10) 使用 -k 选项强制 nc 待命

当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k 我们可以强制服务器保持连接并继续监听端口。 命令如下:

$ ncat -l -k 8080

现在即使来自客户端的连接断了也依然会处于待命状态。

自此我们的教程就完了,如有疑问,请在下方留言。


via: https://www.linuxtechi.com/nc-ncat-command-examples-linux-systems/

作者:Pradeep Kumar 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

原创 ...
七月初的组织会议上,百度点名了几个产品,明确提到要对这些产品减少投...
2025-08-05 18:15:22
市场消息:Scale AI...
观点网讯:7月31日,资本市场消息,Scale AI竞争对手Sur...
2025-07-31 11:13:28
中国移动“九天”通用基础大...
IT之家 7 月 26 日消息,在今日的 2025 世界人工智能大...
2025-07-27 06:12:56
AI,还有一个大漏!
文丨文雨 2024年,黄仁勋在英伟达GTC大会上将大语言模型、具身...
2025-07-26 06:15:01
Perplexity CE...
钛媒体App 7月24日消息,全球知名Agent应用Perplex...
2025-07-24 13:14:46
喜临门战略携手强脑科技 “...
人工智能在智慧睡眠领域的探索正开启新篇章。日前,强脑科技与喜临门联...
2025-07-07 20:16:47

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...