Shell-Script
xinetd + shell 腳本在 TCP 數據包中回顯標誌
我正在嘗試創建一個從 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
該程序將工作,因為
echo
從bash
了解-en
。否則,您必須查看
/bin/sh
系統中實際存在的 shell 並為其echo
命令使用正確的語法。