0

I'm trying to create a script that replicates a JSON status response from a Minecraft server (https://wiki.vg/Server_List_Ping). I've currently set up xinetd to execute a shell script that echos a preset back, but I'm having trouble crafting the TCP packet. For some reason it returns whatever comes after echo, ignoring any flags. Here's a stripped down case that replicates the issue:

/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 reply data as seen from the client that initiated the request:

00000000: 2d65 6e20 5c78 3638 5c78 3635 5c78 3663  -en \x68\x65\x6c
00000010: 5c78 3663 5c78 3666 5c78 3231 0a         \x6c\x6f\x21.

Do I need to read the client request first, or is echo aliased to something else if called from xinetd?

1 Answer 1

0

echo is an internal shell command. If you change the first line to:

#!/bin/bash

The program will work because echo from bash understands -en.

Otherwise, you have to see which shell is actually /bin/sh in your system and use the proper syntax for its echo command.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.