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



我想知道当 xinetd 通过 udp 从随机主机(局域网中(接收命令时,是否可以将 args 传递给 bash 脚本。澄清一下:当我从随机客户端向 xinetd 服务器发送例如 hello 时,我希望 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**
}

亲切的问候,非常感谢!

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

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

接收 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
}

相关内容

  • 没有找到相关文章