Minecraft Serverscan from Scratch?


07.04.2023, 15:27

Ich möchte keinen Portscanner, sondern einen IPscanner

Also schauen ist die ip ein minecraft server, wenn ja schau in der motd (die bekommt man, wenn man einen ping Befehl mitschickt) als response, ist in dieser motd ein keyword wenn ja, dann speichere die IP. (die IP ist dann in einer range von 100 Tausenden.

https://wiki.vg/Server_List_Ping

Port ist ja standardmäßig bei minecra ft 25565

julihan41  07.04.2023, 15:14

Also du willst das Spiel Minecraft quasi "nachprogrammieren"?

CrazyChicken334 
Fragesteller
 07.04.2023, 15:26

Ich hab mich vielleicht ein bisschen ungenau ausgedrückt, hab die Frage mal ergänzt ;)

2 Antworten

Was hat das mit Minecraft zu tun? Deine Frage liest sich so, als wollest du einen eigenen Portscanner à la Nmap auf die Beine stellen, welcher Ports auf einem Server nach der gehosteten Applikation (Webserver, SSH-Server, Mailserver, oder meinetwegen auch Minecraftserver) scant. Was das jetzt genau mit Minecraft zu tun haben soll, erschließt sich mir daher nicht (es sei denn, du willst speziell Minecraft-Server auf irgendwelche spezifischen Serverfunktionen scannen — dann musst du das aber schon genauer definieren).

Wenn es um einen Portscanner wie Nmap gehen soll, geht das mit jeder x-beliebigen Programmiersprache und einer Netzwerk- bzw. Socket-Library. Einfaches Beispiel in Python (in 5min zusammen gehackt, keine Garantie):

import socket

def port_scan(host, port):
    """
    Checks if the port on the given host is open or closed.
    """
    s = socket.socket()
    try:
        s.connect((host, int(port)))
        print(f'Port {port} is open')

        # get response
        banner = s.recv(1024).decode()
        print(f'Banner: {banner}');
        if 'OpenSSH' in banner:
          print(f'Port {port} is running OpenSSH')
    except socket.error:
        print(f'Port {port} is closed')
    finally:
        s.close()

port_scan('127.0.0.1', '22')
Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
CrazyChicken334 
Fragesteller
 07.04.2023, 15:19

Achso, sorry du hast recht war etwas ungenau

Ich möchte keinen Portscanner, sondern einen IPscanner

Also schauen ist die ip ein minecraft server, wenn ja schau in der motd (die bekommt man, wenn man einen ping Befehl mitschickt) als response, ist in dieser motd ein keyword wenn ja, dann speichere die IP. (die IP ist dann in einer range von 100 Tausenden.

https://wiki.vg/Server_List_Ping

Port ist ja standardmäßig bei minecraft 25565

0
Functional  07.04.2023, 15:32
@CrazyChicken334

Kurz gegoogelt, man muss wohl zwei Magic Tokens (\xfe\x01) an einen Minecraft-Server senden, damit dieser seinen MOTD ausspuckt. Könnte dann so aussehen (mit irgendeinem zufälligen Server getestet):

import socket

def port_scan(host, port):
    """
    Checks if the port on the given host is open or closed.
    """
    s = socket.socket()
    try:
        s.connect((host, int(port)))
        print(f'Port {port} is open')

        # check if Minecraft server is running & get MOTD
        s.send(b'\xfe\x01')
        data = s.recv(1024)

        # check if response is valid
        if data[0] != 0xff:
            print('Invalid response, probably no Minecraft server')
        else:
            # decode the response
            motd = data.decode('utf-8', errors='ignore')[1:]
            print(motd)
    except socket.error:
        print(f'Port {port} is closed')
    finally:
        s.close()

port_scan('varilx.de', '25577')

Das dann als UTF8 dekodiert ergibt bei diesem Server die folgende Ausgabe:

1127Waterfall 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16.x, 1.17.x, 1.18.x, 1.19.x    alVarilx8.alDE 8 " eSurvival 7Netzwerk8 | (a18.a19x8)r20900

Das lässt sich sicherlich insbesondere bei der Dekodierung noch optimieren, da ist mir das Protokoll, mit welchem Minecraftserver und -clients funken, aber nicht geläufig genug für. Auch keine Ahnung, ob das mit allen Serverversionen mit diesen beiden Token so funktioniert, oder das irgendwann mal geändert wurde.

1

was soll ein IP Scanner sein? Wenn du das Internet scannen möchtest hast du 4 schleifen angefangen vom akamei dns 1.1.1.1 bis 254.254.254.254 und scannst es eben durch auf port 25565 wo sich ein Mindcraft Server meldet. Das ganze dauert dann natürlich ne weile, ipv6 noch nicht mit inbegriffen ;)

CrazyChicken334 
Fragesteller
 10.04.2023, 13:48

Yes, habs mit masscan hinbekommen, danke!

0