当xinetd通过udp接收消息时,将参数传递给Bash脚本

Sku*_*nKz 6 linux bash ubuntu udp xinetd

我想知道当xinetd通过udp从随机主机(在lan中)接收命令时是否可以将args传递给bash脚本.要清除:当我从一个随机客户端发送hello到xinetd服务器时,我希望xinetd服务器将hello传递给我指定的bash脚本.用同样的事情的世界.

这是我的xinetd服务文件:

service test
{
        socket_type = dgram
        protocol    = udp
        port        = 65534
        type        = UNLISTED
        wait        = yes
        user        = root
        server      = /root/sendmail
        server_args = **Received Message from UDP connection**
}
Run Code Online (Sandbox Code Playgroud)

亲切的问候,非常感谢你!

SiL*_*LeX 3

您无法在 bash 脚本内接收消息,因为根本没有可以接收的流stdin

使用 UDP,您发送的datagrams数据由 xinetd 进行不同的处理。

接收 TCP

xinetd与您的源主机建立连接并派生给定脚本的实例。(标准输入stdin) get 连接到源主机。然后,您可以进行输入或执行本地启动的流程运行所需的任何操作。readsendmail

顺便说一句:stdoutget 也连接到您的源主机 stdin,如果您需要双向通信,您可以看到答案或其他消息。

接收UDP数据报

xinetd在您的端口上接收数据报并在读取收到的数据之前运行您的脚本。(仍然未连接的)套接字将被移交给您的脚本。

您需要自己完成读取数据报的完整处理,这并不像读写那么简单。此外,这通常需要的不仅仅是简单的 bash 脚本。

(看看你recvfrom是否sendto有兴趣这样做)


从我的角度来看,我建议您为此切换到TCP 流。这还将确保您的命令实际上会到达您的主机或在源主机上引发异常以进行进一步处理。

编辑:这就是您的 xinetd 服务的样子:

service test
{
        socket_type = stream
        protocol    = tcp
        port        = 65534
        user        = root
        server      = /root/sendmail
}
Run Code Online (Sandbox Code Playgroud)