我正在尝试创建一个脚本来复制来自 Minecraft 服务器的 JSON 状态响应(https://wiki.vg/Server_List_Ping)。我目前已设置xinetd
执行一个回显预设的 shell 脚本,但我在制作 TCP 数据包时遇到了麻烦。由于某种原因,它返回后面的任何内容echo
,忽略任何标志。这是一个复制该问题的精简案例:
/usr/bin/mc
#!/bin/sh
# hello!
echo -en "\x68\x65\x6c\x6c\x6f\x21"
/etc/xinetd.d/minecraft
service minecraft
{
type = UNLISTED
instances = 20
socket_type = stream
protocol = tcp
wait = no
user = root
group = root
server = /usr/bin/mc
port = 25565
disable = no
}
从发起请求的客户端看到的 TCP 回复数据:
00000000: 2d65 6e20 5c78 3638 5c78 3635 5c78 3663 -en \x68\x65\x6c
00000010: 5c78 3663 5c78 3666 5c78 3231 0a \x6c\x6f\x21.
我是否需要先读取客户端请求,或者echo
如果从 调用,则别名为其他内容xinetd
?
答案1
echo
是一个内部 shell 命令。如果将第一行更改为:
#!/bin/bash
该程序将起作用,因为echo
frombash
理解-en
.
否则,您必须查看/bin/sh
系统中实际存在哪个 shell,并使用其echo
命令的正确语法。