xinetd + shell 脚本回显 TCP 数据包中的标志

xinetd + shell 脚本回显 TCP 数据包中的标志

我正在尝试创建一个脚本来复制来自 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

该程序将起作用,因为echofrombash理解-en.

否则,您必须查看/bin/sh系统中实际存在哪个 shell,并使用其echo命令的正确语法。

相关内容