Skip to content

Instantly share code, notes, and snippets.

@Frimkron
Created May 29, 2013 13:19
Show Gist options
  • Save Frimkron/5670205 to your computer and use it in GitHub Desktop.
Save Frimkron/5670205 to your computer and use it in GitHub Desktop.
Minecraft server info check
#!/usr/bin/python
import socket
import argparse
import sys
ap = argparse.ArgumentParser()
ap.add_argument("host")
ap.add_argument("port",nargs="?",type=int,default=25565)
args = ap.parse_args()
print "Connecting to %s:%d..." % (args.host,args.port)
sock = None
try:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((args.host,args.port))
sock.sendall(chr(254)+chr(1))
data = sock.recv(2048)
except socket.error as e:
sys.exit("Could not connect to server: %s" % e)
finally:
if sock: sock.close()
if ord(data[0]) != 255:
sys.exit("Bad response code: %d" % ord(data[0]))
ucs2 = u""
for i in range(3,len(data)-1,2):
ucs2 += unichr((ord(data[i])<<8) + ord(data[i+1]))
first,protocol,version,motd,players,maxplayers = ucs2.split(unichr(0))
players,maxplayers = int(players),int(maxplayers)
playerstext = "\x1b[%sm%d / %d\x1b[0m" % (
"32;1" if players>0 else "31", players,maxplayers)
print """\
protocol: %s
version: %s
motd: %s
players: %s""" % (protocol,version,motd,playerstext)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment