rendered paste body#!/usr/bin/pythonfrom socket import *from random import randint, seedfrom time import time# Set the socket parametershost = "localhost" #"192.168.XXX.YYY"# network messages codes, c2s, c2c, s2cnet_msg_enum = [ \ "SV_INITS2C", "SV_INITC2S", "SV_POS", "SV_TEXT", "SV_SOUND", "SV_CDIS", \ "SV_DIED", "SV_DAMAGE", "SV_SHOT", "SV_FRAGS", "SV_GUNSELECT", \ "SV_MAPCHANGE", "SV_MAPVOTE", "SV_ITEMSPAWN", "SV_ITEMPICKUP", "SV_DENIED", \ "SV_PING", "SV_PONG", "SV_CLIENTPING", \ "SV_TIMEUP", "SV_MAPRELOAD", "SV_ITEMACC", \ "SV_SERVMSG", "SV_ITEMLIST", "SV_RESUME", \ "SV_EDITENT", "SV_EDITF", "SV_EDITT", "SV_EDITM", "SV_FLIP", "SV_COPY", "SV_PASTE", "SV_ROTATE", "SV_REPLACE", "SV_DELCUBE", \ "SV_NEWMAP", "SV_GETMAP", \ "SV_MASTERMODE", "SV_KICK", "SV_CURRENTMASTER", "SV_SPECTATOR", "SV_SETMASTER", "SV_SETTEAM", \ "SV_BASES", "SV_BASEINFO", "SV_TEAMSCORE", "SV_REPAMMO", "SV_FORCEINTERMISSION", "SV_ANNOUNCE", "SV_CLIENT" ]gport = 28785iport = 28786buf = 1024gaddr = (host, gport)iaddr = (host, iport)UDPSock = socket(AF_INET,SOCK_DGRAM)UDPInfo = socket(AF_INET,SOCK_DGRAM)def get_info(single = 0): global iaddr, UDPInfo mm_names = ["OPEN", "VETO", "LOCKED", "PRIVATE"] rel_naml = {252 : "gui"} mod_naml = {-2: "SP",-1: "DMSP",0: "ffa",1: "coop",2: "duel",3: "teamplay",4: "instagib",5: "instagib teamplay",6: "efficiency",7: "efficiency teamplay",8: "insta arena",9: "insta clan arena",10: "tactics arena",11: "tactics clan arena",12: "capture"} UDPInfo.sendto('7',iaddr) UDPInfo.settimeout(5) #1.5) # Receive message try: w4r = 1 while w4r: data, iaddr = UDPInfo.recvfrom(buf) if not data: print "Client has exited!" break else: humans = '' morsel = '' map = '_default_' gmode = 0 srvinf = [] contdisp = 1 for c in data: o = ord(c) srvinf.append(o) morsel += '%d, ' % (o) if (o>=32 and o<=126): humans += '%c' % (c) else: #humans += ' | ' humans += '|' if (humans[0]=='7'): # the expected echo-back humans = humans[1:] datl = humans.split('|') morsel = morsel[:-2] mms = '' if srvinf[9] > 0: mms = 'MM:%s\t' % (mm_names[srvinf[9]]) srns = '[proto:%d] unknown' % (srvinf[4]) maxp = srvinf[8] if rel_naml.has_key(srvinf[4]): srns = rel_naml[srvinf[4]] min_rem = srvinf[7] if min_rem == 255: min_rem = -2 contdisp = 0 map = 'no map set yet' gmode = 'no mode set yet' if datl[9]: map = datl[9] gmode = mod_naml[srvinf[6]] contdisp = 1 if contdisp: if single: infdat = (datl[10], srns, maxp, map, gmode, mms, min_rem, srvinf[1]) print u"\n===[ %s ]===\nsauerbraten\t: %s-release\nmaxplayers\t: %s\nmap\t\t: %s\nmode\t\t: %s\n%stime\t\t: %d\nplayers\t: %d\n" % infdat else: infdat = (srns, datl[10], srvinf[1], maxp, mms, gmode, map, min_rem) print u"%s: [ %s ] %s of %s\t%s %s on %s\tremaining < %02d" % infdat else: if single: infdat = (datl[10], srns, maxp) print u"\n===[ %s ]===\nsauerbraten\t: %s-release\nmaxplayers\t: %s\nfreshly started" % infdat else: infdat = (srns, datl[10], 0, maxp) print u"%s: [ %s ] %s of %s\tfreshly started" % infdat w4r = 0 except timeout: pass# # # ## # # # ------------------------------ M A I N ------------------------------# # # #get_info()UDPSock.close()UDPInfo.close()