@andreysuper1

Как узнать что на определенном поре запущен сервер minecraft?

Требуется узнать запущен ли по определенному ip и порту сервер майнкрафта. Желательно с реализацией на python.
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 1
fdhadzh
@fdhadzh
Perfectionist with deadlines
def isminecraft(addr, timeout=5):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect(addr)
        s.settimeout(timeout)

        buf = struct.pack('xBB', 4, len(addr[0].encode('utf-8')))
        buf += addr[0].encode('utf-8')
        buf += struct.pack('HB', addr[1], 1)

        pkt = struct.pack('B', len(buf))
        pkt += buf
        pkt += b'\x01\x00'

        s.send(pkt)

        try:
            bufsize = struct.unpack('B', s.recv(3)[2:])[0]
            js = s.recv(bufsize, socket.MSG_WAITALL)
        except socket.timeout:
            return (False, None)

    try:
        response = json.loads(js)
        version = response['version']['name']
        return (True, version)
    except (ValueError, KeyError):
        return (False, None)


Пример использования:

addrs = [
    ('192.168.99.100', 22508),
    ('192.168.99.100', 32761),
]

for addr in addrs:
    isok, version = isminecraft(addr)

    if isok:
        print('[%s] Minecraft version: %s' % (str(addr), version))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы