我想知道当 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 脚本。
(如果您有兴趣这样做,请参阅recvfrom
和sendto
(
从我的角度来看,我建议您为此切换到TCP流。这还将确保您的命令将实际到达您的主机或在源主机上引发异常以供进一步处理。
编辑:这是您的xinetd服务的样子:
service test
{
socket_type = stream
protocol = tcp
port = 65534
user = root
server = /root/sendmail
}