|
@@ -0,0 +1,44 @@
|
|
|
+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)
|