Linux命令行允许您通过监听套接字或连接套接字来检索数据。数据可以捕获到文本文件中。我们向您展示如何操作。
套接字客户端和服务器
套接字允许联网软件进行通信。它们首先在4.2BSD Unix操作系统中实现,该操作系统于1983年在加州大学伯克利分校创建。它们很快被system V Unix和Microsoft Windows采用。
套接字是软件网络连接的端点,经过抽象,可以将其视为文件句柄。这意味着它符合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
底线是,在Manjaro上,当您在本文的示例中看到ncat时,请使用netcat。
监听套接字
如果软件监听传入的套接字连接,它就充当了服务器。通过套接字连接传入的任何数据都被称为是由服务器接收的。我们可以很容易地使用nc复制此行为。任何接收到的数据都会显示在终端窗口中。
我们需要使用-l(侦听)选项告诉nc侦听连接,并且需要指定要侦听连接的端口。任何尝试连接到此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的内置功能进行搜索。
RELATED:如何在Linux上使用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是套接字客户端。为此,我们需要告诉nc服务器软件在网络上的位置。
一种方法是提供IP地址和端口号。如果服务器在运行nc的同一台pc上,我们可以使用127.0.0.1的环回IP地址。这并不是说没有用于指示服务器地址和端口号的标志。我们只提供适当的值。
要连接到同一台PC上的服务器,并使用端口6566,我们可以使用环回IP地址。要使用的命令是:
nc 127.0.0.1 6566
nc从服务器检索的数据在终端窗口中滚动。
如果您知道运行服务器软件的计算机的网络名称,可以使用该名称而不是IP地址。
nc sulaco 6566
使用“Ctrl+C”断开连接。
快捷方便
当您不想编写自定义套接字处理程序,但需要从支持套接字的源收集数据时,nc和ncat就适合了。将输出重定向到文件中,可以使用less查看输出,并使用grep等实用程序解析文件。
RELATED:如何在Linux上使用grep命令