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

x33g5p2x  于2022-04-22 转载在 Linux  
字(2.3k)|赞(0)|评价(0)|浏览(493)

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

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

监听套接字

如果软件侦听传入的套接字连接,它就充当服务器。通过套接字连接传来的任何数据都被 服务器接收 。我们可以很容易地使用nc. 任何接收到的数据都会显示在终端窗口中。

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

此命令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(keep alive) 选项。这告诉ncat即使最后一个活动连接断开,也要继续运行并接受来自客户端的连接。

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

ncat -k -l -p 6566

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

连接到服务器

我们还可以nc用作套接字客户端并连接到另一个正在接受连接并充当服务器的程序。在这个场景中,nc是socket客户端。为此,我们需要知道nc服务器软件在网络上的位置。
一种方法是提供IP 地址和端口号。如果服务器在我们运行的同一台电脑nc上,我们可以使用环回 IP 地址 127.0.0.1。并不是说没有用于指示服务器地址和端口号的标志。我们只提供适当的值。

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

nc 127.0.0.1 6566

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

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

nc sulaco 6566

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

快捷方便

ncncat当您不想编写自定义套接字处理程序但需要从某些启用套接字的源收集数据时,就可以满足要求。将输出重定向到一个文件中,您可以使用 . 查看输出less,并使用grep.

新人创作打卡挑战赛

发博客就能抽奖!定制产品红包拿不停!

相关文章