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

Linux 当xinetd通过udp接收消息时,将参数传递给Bash脚本,linux,bash,ubuntu,udp,xinetd,Linux,Bash,Ubuntu,Udp,Xinetd,我想知道,当xinetd通过udp从随机主机(局域网中)接收命令时,是否可以将参数传递给bash脚本。清除:当我从随机客户端向xinetd服务器发送hello时,我希望xinetd服务器将hello传递给我指定的bash脚本。与世界一样 这是我的xinetd服务文件: service test { socket_type = dgram protocol = udp port = 65534 type

我想知道,当xinetd通过udp从随机主机(局域网中)接收命令时,是否可以将参数传递给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,您发送的是xinetd以不同方式处理的
数据报

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

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

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

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

(如果您有兴趣,请参阅
recvfrom
sendto


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

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

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