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해당 명령에 올바른 구문을 사용해야 합니다.

관련 정보