如何在linux上从bash中的套接字读取数据

Linux命令行允许您通过监听套接字或连接套接字来检索数据。数据可以捕获到文本文件中。我们向您展示如何操作。...

Linux命令行允许您通过监听套接字或连接套接字来检索数据。数据可以捕获到文本文件中。我们向您展示如何操作。

套接字客户端和服务器

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

What Does "Everything Is a File" Mean in Linux?
RELATEDWhat Does "Everything Is a File" Mean in Linux?

套接字是软件网络连接的端点,经过抽象,可以将其视为文件句柄。这意味着它符合Unix和Linux的一般设计原则,即“一切都是一个文件”。

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

套接字被实现为应用程序编程接口(API),允许软件开发人员从代码中调用套接字功能。如果你是一名程序员,那没关系,但如果你不是呢?或者也许你是这样,但你的用例并不保证编写应用程序?Linux提供了命令行工具,允许您根据需要使用基本套接字服务器和套接字客户机来检索或接收来自其他启用套接字的进程的数据。

相关:什么是API,开发人员如何使用它们?

关系从来都不容易

我们要使用的程序是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

如何在linux上从bash中的套接字读取数据

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

监听套接字

如果软件监听传入的套接字连接,它就充当了服务器。通过套接字连接传入的任何数据都被称为是由服务器接收的。我们可以很容易地使用nc复制此行为。任何接收到的数据都会显示在终端窗口中。

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

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

nc -l -p 6566

如何在linux上从bash中的套接字读取数据

当它等待传入连接时,nc不会生成任何输出。建立连接后,终端窗口中会显示所有检索到的信息。这里,一个客户端程序建立了一个连接,它将自己标识为“客户端1”

如何在linux上从bash中的套接字读取数据

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

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

如何在linux上从bash中的套接字读取数据

将数据发送到文件

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

nc -l -p 6566 > logfile.txt

如何在linux上从bash中的套接字读取数据

您不会看到它进入文件的任何输出,而且矛盾的是,在nc终止之前,您不会知道是否发生了连接。如果返回到命令提示符,则表示连接已发生并已被客户端终止。

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

less logile.txt

如何在linux上从bash中的套接字读取数据

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

如何在linux上从bash中的套接字读取数据

RELATED:如何在Linux上使用less命令

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

如果希望在终端窗口中看到数据滚动,并同时将其发送到文件,请将输出从nc管道传输到tee。

nc -l -p 6566 | tee logfile.txt

如何在linux上从bash中的套接字读取数据

接受多个连接

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

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

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

ncat -k -l -p 6566

如何在linux上从bash中的套接字读取数据

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

如何在linux上从bash中的套接字读取数据

连接到服务器

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

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

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

nc 127.0.0.1 6566

如何在linux上从bash中的套接字读取数据

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

如何在linux上从bash中的套接字读取数据

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

nc sulaco 6566

如何在linux上从bash中的套接字读取数据

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

快捷方便

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

RELATED:如何在Linux上使用grep命令

  • 发表于 2022-10-08 16:18
  • 阅读 ( 41 )
  • 分类:互联网

你可能感兴趣的文章

2021年面向开发者、云工程师和devops的5大linux课程

... 本课程将带您了解Linux的“如何”和“为什么”,并展示各种Linux命令的工作方式、它们的真实结构以及记住这些命令的正确方法。 ...

  • 发布于 2021-03-11 10:29
  • 阅读 ( 248 )

Windows10中LinuxBashShell快速指南

...更多的特性。了解更多关于Bash-on-Windows的信息,从您应该如何以及为什么安装它,到您可能不知道的隐藏特性。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 194 )

关于linux中bash for loops的所有知识

... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 313 )

如何使用受限shell来限制linux用户可以做什么

...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 387 )

如何在linux上的bash中设置环境变量

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 222 )

如何在linux上使用free命令

...如PID文件、在重新启动时不必保留的systemd日志、与Unix域套接字、fifo和守护进程管理有关的信息。 /dev/shm:这允许在Debian和Debian派生的Linux发行版上实现与POSIX兼容的内存管理。 /run/lock:它保存锁文件。它们用作指示符号,让系...

  • 发布于 2021-04-02 19:12
  • 阅读 ( 179 )

如何在linux上使用stat命令

...连字符“-”,它告诉我们文件是一个常规文件,而不是套接字、符号链接或其他类型的对象。 所有者、组和其他权限以八进制格式列出。 指向此文件的硬链接数。在这种情况下,在大多数情况下,它将是一个。 文件所有者是...

  • 发布于 2021-04-02 19:25
  • 阅读 ( 166 )

如何在linux上创建别名和shell函数

...才能继续存在。一旦窗口关闭,别名将消失。 那么我们如何使我们的别名永久化呢? .bashrc文件和别名 您可能想知道预打包的别名是在哪里定义的。它位于主文件夹的“.bashrc”文件中。当您启动交互式shell时,将读取此文件并...

  • 发布于 2021-04-03 03:45
  • 阅读 ( 211 )

如何使用linux lsof命令

...流。 许多其他系统组件接受或生成字节流,例如键盘、套接字连接、打印机和通信进程。因为它们要么接受、生成,要么接受并生成字节流,所以这些设备可以在非常低的级别上进行处理,就好像它们是文件一样。 这个设计概...

  • 发布于 2021-04-03 10:30
  • 阅读 ( 164 )

如何更改默认crontab编辑器

...您选择的编辑器而不是相反的方式吗?本教程将向您展示如何。这些指令适用于Linux、macOS和其他类似Unix的操作系统。 文本编辑的敏感话题 文本编辑器执行一项非常平凡的任务。然而,人们对编辑个人喜好的深切感受导致了自...

  • 发布于 2021-04-03 16:23
  • 阅读 ( 147 )
gdio5832
gdio5832

0 篇文章

相关推荐