xinetd+ シェルスクリプトは TCP パケットのフラグをエコーし​​ます。

xinetd+ シェルスクリプトは TCP パケットのフラグをエコーし​​ます。

MinecraftサーバーからJSONステータス応答をコピーするスクリプトを生成しようとしています(https://wiki.vg/Server_List_Ping)。現在xinetdエコープリセットを実行するように設定されているシェルスクリプトがありますが、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内部シェルコマンドです。最初の行を次のように変更すると:

#!/bin/bash

このプログラムは理解しているechoので動作します。bash-en

/bin/shそれ以外の場合は、システムに実際に存在するシェルを確認し、そのechoコマンドに正しい構文を使用する必要があります。

おすすめ記事