1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import socket
- from flask import Flask, jsonify
- app = Flask(__name__)
- MC_HOST = "hiram.services"
- MC_PORTS = (25565, 25566,)
- HANDSHAKE = bytearray([0xFE, 0x01])
- @app.route("/")
- def status():
- for port in MC_PORTS:
- try:
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
- sock.settimeout(5)
- sock.connect((MC_HOST, port))
- sock.settimeout(None)
- sock.send(HANDSHAKE)
- raw_data = sock.recv(512)
- if raw_data is not None and raw_data != "":
- version, motd, current_players, max_players = [d.replace("\x00", "") for d in raw_data.decode("cp437").split("\x00\x00\x00")[2:]]
- return jsonify({
- "online": True,
- "data": {
- "version": version,
- "motd": motd,
- "currentPlayers": current_players,
- "maxPlayers": max_players,
- },
- })
- except:
- continue
- return jsonify({
- "online": False,
- "data": None,
- })
- if __name__ == "__main__":
- app.run("0.0.0.0", 5000, debug=True)
|