浏览代码

Initial commit

Kirk Trombley 4 年之前
当前提交
be4ffb821b
共有 5 个文件被更改,包括 71 次插入0 次删除
  1. 3 0
      .gitignore
  2. 14 0
      Dockerfile
  3. 3 0
      README.md
  4. 44 0
      query.py
  5. 7 0
      requirements.txt

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+.venv/
+__pycache__/
+*.pyc

+ 14 - 0
Dockerfile

@@ -0,0 +1,14 @@
+FROM python:3.9
+
+RUN pip install --upgrade pip
+
+WORKDIR /query
+
+EXPOSE 8000
+
+ADD requirements.txt .
+RUN pip install -r requirements.txt && rm requirements.txt
+
+ADD query.py .
+
+CMD ["gunicorn", "query:app", "--bind", "0.0.0.0:8000"]

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+# MC Server Status Checker
+
+Checks multiple ports to see if there is a Minecraft server running

+ 44 - 0
query.py

@@ -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)

+ 7 - 0
requirements.txt

@@ -0,0 +1,7 @@
+click==7.1.2
+Flask==1.1.2
+gunicorn==20.1.0
+itsdangerous==1.1.0
+Jinja2==2.11.3
+MarkupSafe==1.1.1
+Werkzeug==1.0.1