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

7
我想知道当xinetd通过UDP接收来自随机主机(在局域网中)的命令时,是否可能向bash脚本传递参数。为了澄清:当我从随机客户端发送例如hello到xinetd服务器时,我希望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**
}

敬祝好运,非常感谢!

1个回答

3

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

使用UDP,你正在发送被xinetd以不同方式处理的数据报

接收TCP

xinetd与你的源主机建立连接,并分叉出一个给定脚本的实例。stdin(标准输入)连接到源主机上。然后,你可以读取输入或执行任何你想要的操作,就像在本地启动sendmail进程一样。

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

接收UDP 数据报

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

你需要自己完成读取数据报的完整处理,这不像读写那么简单。此外,这通常需要比简单的bash脚本更多的东西。

(如果你有兴趣这样做,请参阅recvfromsendto)


从我的角度来看,我建议你只需切换到使用TCP流。这也将确保你的命令实际上会到达你的主机或在你的源主机上抛出异常以供进一步处理。

编辑:这是你的xinetd服务的样子:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接