如何在 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

在这里插入图片描述

底线是,当您在本文的示例中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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mikes zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值