Shell-Script

xinetd + shell 腳本在 TCP 數據包中回顯標誌

  • December 13, 2020

我正在嘗試創建一個從 Minecraft 伺服器(https://wiki.vg/Server_List_Ping)複製 JSON 狀態響應的腳本。我目前已設置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

echo是一個內部 shell 命令。如果將第一行更改為:

#!/bin/bash

該程序將工作,因為echobash了解-en

否則,您必須查看/bin/sh系統中實際存在的 shell 並為其echo命令使用正確的語法。

引用自:https://unix.stackexchange.com/questions/624202