我想知道当xinetd通过udp从随机主机(局域网)接收命令时,是否有可能将args传递给bash脚本。要澄清:当我发送例如你好从一个随机客户端到xinetd服务器,我希望xinetd服务器将你好传递给我指定的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**
}

亲切的问候,非常感谢!

最佳答案

您无法在bash脚本中接收到消息,因为在stdin上根本没有流可以接收。

使用UDP,您将发送xinetd对datagrams进行不同处理的代码。

接收TCP流:

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

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

接收UDP数据报:

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

您需要自己完成读取数据报的全部处理,这不像读写流那么简单。而且,这通常需要的不仅仅是简单的bash脚本。

(如果您对此感兴趣,请参阅recvfromsendto)

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

编辑:这是您的xinetd服务的外观:

service test
{
        socket_type = stream
        protocol    = tcp
        port        = 65534
        user        = root
        server      = /root/sendmail
}

关于linux - 当xinetd通过udp接收消息时,将参数传递给Bash脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27604628/

10-11 17:44