如何在 Linux 上的 Bash 中从套接字读取数据如何在 Linux 上的 Bash 中从套接字读取数据如何在 Linux 上的 Bash 中从套接字读取数据如何在 Linux 上的 Bash 中从套接字读取数据
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上的 Bash 中从套接字读取数据

Linux 命令行允许您通过侦听套接字或连接到套接字来检索数据。可以在文本文件中捕获数据。我们告诉你如何。

套接字客户端和服务器

套接字允许网络软件进行通信。它们首先在 4.2BSD Unix 操作系统中实现,该操作系统于 1983 年在加州大学伯克利分校创建。它们很快被 System V Unix 和 Microsoft Windows 采用。

套接字是软件网络连接的端点,经过抽象后可以将其视为文件句柄。这意味着它符合“一切皆文件”的通用 Unix 和 Linux 设计原则。我们指的不是您将网络电缆插入的墙上的物理插座。

如果一个程序连接到另一个软件的套接字,则它被认为是另一个软件的客户端。允许其他软件请求连接的软件称为服务器。这些术语的使用独立于 IT 世界中客户端和服务器的其他用途。为了避免混淆,它们有时被称为套接字客户端和套接字服务器以消除歧义。我们将称它们为客户端和服务器。

套接字作为应用程序编程接口 (API) 实现,允许软件开发人员从他们的代码中调用套接字功能。如果您是程序员,那很好,但如果您不是呢?或者也许你是,但你的用例不保证编写应用程序? Linux 提供命令行工具,让您可以根据需要使用(基本的)套接字服务器和套接字客户端从其他支持套接字的进程检索或接收数据。

人际关系绝非易事

我们将要使用的程序是 nc 和 ncat。这两个实用程序有一种奇怪的关系。 nc 程序是对 ncat 的重写,它比 nc 老得多。但是 ncat 也被重写了,它现在可以让我们做一些 nc 做不到的事情。 ncat 的实现有很多,它本身是一个名为 netcat 的工具的衍生产品。最重要的是,在大多数发行版中,nc 是指向 ncat 的符号链接,而不是一个单独的程序。

我们检查了最近的 Arch、Manjaro、Fedora 和 Ubuntu 发行版。唯一需要安装工具的是 Manjaro。在Manjaro上,你需要安装netcat包来获取nc,但是你没有获取ncat,你获取的是netcat。在 Manjaro 上,nc 是指向 netcat 的符号链接。

sudo pacman -S netcat

底线是,当您在本文的示例中看到 ncat 时,在 Manjaro 上使用 netcat。

在套接字上监听

如果软件侦听传入的套接字连接,则它充当服务器。通过套接字连接传来的任何数据都被称为服务器接收。我们可以使用 nc 非常轻松地复制此行为。任何接收到的数据都显示在终端窗口中。

我们需要告诉 nc 监听连接,使用 -l (监听)选项,我们需要指定我们要监听连接的端口。任何尝试连接到此 nc 实例的客户端程序或进程都必须使用相同的端口。我们使用 -p(端口)选项告诉 nc 要监听哪个端口。

此命令将 nc 作为套接字服务器启动,侦听端口 6566 上的连接:

nc -l -p 6566

在等待传入连接时,nc 不产生任何输出。建立连接后,任何检索到的信息都会显示在终端窗口中。此处,连接已由将自己标识为“客户端 1”的客户端程序建立。

nc 显示的所有内容都是从客户端接收的。这个客户碰巧发送了它的名字,以及一条包含时间和日期的带编号的消息。

当客户端断开连接时,nc 终止,您将返回到终端提示符。

将数据发送到文件

要在文件中捕获来自客户端的数据,我们可以使用重定向将 nc 的输出发送到文件。此命令将接收到的数据保存在名为“logfile.txt”的文件中。

nc -l -p 6566 > logfile.txt

你不会看到任何输出——它进入文件——而且,自相矛盾的是,直到 nc 终止,你才会知道是否发生了连接。返回到命令提示符表示连接已发生并已被客户端终止。

我们可以使用 less 查看“logfile.txt”文件的内容。

less logile.txt

然后你可以滚动浏览数据,并使用 less 的内置函数进行搜索。

将数据发送到文件和终端窗口

如果您想在终端窗口中查看数据滚动并同时将其发送到文件,请将 nc 的输出通过管道传输到 tee 中。

nc -l -p 6566 | tee logfile.txt

接受多个连接

一切都很好,但它确实有局限性。我们只能接受一个连接。我们仅限于从单个客户端接收数据。此外,当该客户端断开连接时,我们的套接字服务器 nc 将终止。

如果您需要接受多个连接,我们需要使用 ncat。我们需要告诉 ncat 去监听,并使用一个特定的端口,就像我们对 nc 所做的那样。但我们还将使用 -k(保持活动状态)选项。这告诉 ncat 继续运行并接受来自客户端的连接,即使最后一个活动连接断开也是如此。

这意味着 ncat 将一直运行,直到我们选择使用“Ctrl-C”终止它。无论 ncat 当前是否连接到任何客户端,新连接都将被接受。

ncat -k -l -p 6566

我们可以看到来自不同客户端的数据在它们连接时出现在 ncat 的输出中。

连接到服务器

我们还可以使用 nc 作为套接字客户端并连接到另一个接受连接并充当服务器的程序。在这种情况下,nc 是套接字客户端。为此,我们需要告诉 nc 服务器软件在网络上的位置。

一种方法是提供 IP 地址和端口号。如果服务器在我们运行 nc 的同一台电脑上,我们可以使用环回 IP 地址 127.0.0.1。并不是说没有用于指示服务器地址和端口号的标志。我们只是提供适当的值。

要连接到同一台 PC 上的服务器,并使用端口 6566,我们可以使用环回 IP 地址。使用的命令是:

nc 127.0.0.1 6566

nc 从服务器检索的数据在终端窗口中滚动。

如果您知道运行服务器软件的计算机的网络名称,则可以使用该名称代替 IP 地址。

nc sulaco 6566

使用“Ctrl+C”断开连接。

快捷方便

nc 和 ncat 适合您不想编写自定义套接字处理程序但需要从某些支持套接字的源收集数据的情况。将输出重定向到文件后,您可以使用 less 查看输出,并使用 grep 等实用程序解析文件。

©2015-2025 艾丽卡 support@alaica.com