实用的 Linux Netcat NC 命令示例

举报
Tiamo_T 发表于 2022/06/14 17:27:39 2022/06/14
【摘要】 在本文中,我们将通过一些实际示例来了解 netcat 命令。

Netcat 或 nc 是用于调试和调查网络的网络实用程序。

此实用程序可用于创建 TCP/UDP 连接并对其进行调查。这个实用程序的最大用途是在我们需要处理 TCP/UDP 套接字的脚本中。

在本文中,我们将通过一些实际示例来了解 netcat 命令。

1. 服务器-客户端架构中的 Netcat

netcat 实用程序可以在服务器模式下在指定端口上运行,以侦听传入连接。

$ nc -l 2389

此外,它可以在客户端模式下尝试连接刚刚打开的端口(2389)

$ nc localhost 2389

现在,如果我们在客户端写一些文本,它会到达服务器端。这是证明:

$ nc localhost 2389
HI, server

在服务器运行的终端上:


$ nc -l 2389
HI, server

因此我们看到 netcat 实用程序可以用于客户端服务器套接字通信。

2.使用Netcat传输文件

netcat 实用程序也可用于传输文件。在客户端,假设我们有一个名为“testfile”的文件,其中包含:

$ cat testfile
hello test

在服务器端,我们有一个空文件“测试”

现在,我们将服务器运行为:

$ nc -l 2389 > test

并将客户端运行为:

cat testfile | nc localhost 2389

现在,当我们在服务器端看到“测试”文件时,我们看到:

$ cat test
hello test

所以我们看到文件数据是从客户端传输到服务器的。

3. Netcat 支持超时

在某些情况下,我们不希望连接永远保持打开状态。在这种情况下,通过“-w”开关,我们可以指定连接的超时时间。因此,在与 -w 标志一起指定的秒数之后,客户端和服务器之间的连接将终止。

服务器 :

nc -l 2389

客户 :

$ nc -w 10 localhost 2389

上面的连接将在 10 秒后终止。

注意:不要在服务器端使用 -w 标志和 -l 标志,因为在这种情况下 -w 标志不起作用,因此连接永远保持打开状态。

4. Netcat 支持 IPV6 连接

标志 -4 或 -6 指定 netcat 实用程序应使用哪种类型的地址。-4 强制 nc 使用 IPV4 地址,而 -6 强制 nc 使用 IPV6 地址。

服务器 :

$ nc -4 -l 2389

客户 :

$ nc -4 localhost 2389

现在,如果我们运行 netstat 命令,我们会看到:

$ netstat | grep 2389
tcp        0      0 localhost:2389          localhost:50851         ESTABLISHED
tcp        0      0 localhost:50851         localhost:2389          ESTABLISHED

上面输出中的第一个字段将包含后缀“6”,以防使用 IPV6 地址。因为在这种情况下它不是,所以服务器和客户端之间的连接是使用 IPV4 地址建立的。

现在,如果我们强制 nc 使用 IPV6 地址

服务器 :

$ nc -6 -l 2389

客户 :

$ nc -6 localhost 2389

现在,如果我们运行 netstat 命令,我们会看到:

$ netstat | grep 2389
tcp6       0      0 localhost:2389          localhost:33234         ESTABLISHED
tcp6       0      0 localhost:33234         localhost:2389          ESTABLISHED

所以现在带有 'tcp' 的后缀 '6' 表明 nc 现在正在使用 IPV6 地址。

5. 在 Netcat 中禁用从 STDIN 读取

此功能可以通过使用标志 -d 来实现。在以下示例中,我们在客户端使用了此标志。

服务器 :

$ nc -l 2389

客户 :

$ nc -d localhost 2389
Hi

文本 'Hi' 不会发送到服务器端,因为使用 -d 选项已禁用从标准输入读取。

6.强制Netcat服务器保持正常

如果 netcat 客户端连接到服务器,然后在一段时间后客户端断开连接,则通常 netcat 服务器也会终止。

服务器 :

$ nc -l 2389

客户 :

$ nc localhost 2389
^C

服务器 :

$ nc -l 2389
$

因此,在上面的示例中,我们看到一旦客户端断开连接,服务器也被终止。

这种行为可以通过在服务器端使用 -k 标志来控制,以强制服务器即使在客户端断开连接后也保持运行。

服务器 :

$ nc -k -l 2389

客户 :

$ nc localhost 2389
^C

服务器 :

$ nc -k -l 2389

所以我们看到,通过使用 -k 选项,即使客户端断开连接,服务器也会保持运行。

7.配置Netcat客户端在EOF后保持休眠

Netcat 客户端可以配置为在收到 EOF 后保持休眠。在正常情况下,如果 nc 客户端收到 EOF 字符,则它会立即终止,但如果使用 -q 标志,也可以控制此行为。此标志需要一个数字,该数字描述在客户端终止之前等待的秒数(在收到 EOF 之后)

客户端应该像这样启动:

nc  -q 5  localhost 2389

现在,如果客户端收到 EOF,那么它将等待 5 秒后终止。

8. 使用带有 UDP 协议的 Netcat

默认情况下,nc 实用程序创建的所有套接字都是 TCP 协议,但此实用程序也适用于 UDP 协议。要启用 UDP 协议,使用 -u 标志。

服务器 :

$ nc -4 -u -l 2389

客户 :

$ nc -4 -u localhost 2389

现在,服务器和客户端都配置为使用 UDP 协议。这可以通过以下 netstat 命令来确认。所以我们看到这个连接现在使用的是UDP协议。

$ netstat | grep 2389
udp        0      0 localhost:42634         localhost:2389          ESTABLISHED
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。