7

我想知道当 xinetd 通过 udp 从随机主机(在局域网中)接收命令时,是否可以将 args 传递给 bash 脚本。澄清:当我从随机客户端向 xinetd 服务器发送例如hello时,我希望 xinetd 服务器将 hello 传递给我指定的 bash 脚本。world相同。

这是我的 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**
}

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

4

1 回答 1

3

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

使用 UDP,您发送datagrams的内容由 xinetd 以不同方式处理。

接收 TCP

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

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

接收 UDP数据报

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

读数据报的全部处理需要你自己来做,不像读写那么简单。此外,这通常需要的不仅仅是一个简单的 bash 脚本。

(看看recvfromsendto如果你有兴趣这样做)


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

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

service test
{
        socket_type = stream
        protocol    = tcp
        port        = 65534
        user        = root
        server      = /root/sendmail
}
于 2015-01-03T01:26:07.743 回答