#!/usr/bin/python
## Sandman
# DOC: Fri, Mar 27, 13:05:00
# CS 1.6 UDP Client System
#TODO: Modify parser for 1.6
import sys
import socket
from socket import *
if len(sys.argv) < 2 :
print "|:| Usage: "+sys.argv[0]+" "
print "|:| Arguments: -r -v -q -p [NOT WORKING]"
print "|:| ./udpClnt.py 172.16.X"
sys.exit()
# Set the socket parameters
quiet = 1
pckDump = 1
delm = 0
parse = 0
sbsString = ""
port = 27015 #Set Default Dest. Port
arg=1
if "-q" in sys.argv:
if len(sys.argv) < 3:
print "|!| Error: address missing!"
sys.exit()
quiet = 0
if "-v" in sys.argv:
print "|:| CS 1.6 UDP Scan Client, Version: 1.1 >>[sand|MAN]"
sys.exit()
if "-r" in sys.argv:
if len(sys.argv) < 4:
print "|!| Error: address missing!"
sys.exit()
arg=3
port=int(sys.argv[2])
if "-p" in sys.argv:
if len(sys.argv) < 3:
print "|!| Error: address missing!"
sys.exit()
parse = 1
bcast = sys.argv[arg] #Set Sender Addr.
bindHost = "172.16.49.143" #Set Host Addr. HardCoded Data
locPort = 27005 #Set Local Listen Port.
buf = 1024 #Buffer Size
local = (bindHost,locPort) #Group Localhost & Port (27005).
startNum = 1
# Create Socket, Bind to Port: 27005.
UDPSock = socket(AF_INET,SOCK_DGRAM) #IPV4 UDP Socket Def.
UDPSock.bind((local)) #Bind Client to local group.
UDPSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) #Enable Broadcast
UDPSock.settimeout(3) #Set Timeout to 3s.
print "|:| Using port:", sys.argv[2]
# Prep Infostrings. "TSourceEngineQuery"
data = chr(255) + chr(255) + chr(255) + chr(255) + "TSource Engine Query" + chr(0)
while startNum < 256 : #INIT WHILE LOOP FOR 1-255
bcast2 = bcast + "." + str(startNum)
addr = (bcast2,port)
UDPSock.sendto(data,addr) #Send UDP Packet
if quiet == 1:
print "|+| Sending Packet To: ", bcast2
startNum = startNum + 1
if quiet == 1:
print "|-| Received Packets:"
print "|-| Servers:"
try:
while True:
data,addr = UDPSock.recvfrom(buf)
if quiet == 1:
print "|-| Received packet with payload data:"
print "", data
pckDump = pckDump + 1
packLen = len(data)
if quiet == 1:
if parse == 1:
print "|:| Packet payload parser initialized"
if parse == 1:
for i in range(packLen):
if data[i] == "\\":
x = i
sbsString = ""
if x < packLen:
x = x + 1
while data[x] != "\\": #Packet Data Parser Start
sbsString = sbsString + data[x]
x = x + 1
if sbsString == "address":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Address: ", sbsString
if sbsString == "players":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Players: ", sbsString
if sbsString == "bots":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Bots: ", sbsString
if sbsString == "gamedir":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Game: ", sbsString
if sbsString == "description":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Description: ", sbsString
if sbsString == "hostname":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "HostName: ", sbsString
if sbsString == "map":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Map: ", sbsString
if sbsString == "password":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Password: ", sbsString
if sbsString == "secure":
sbsString = ""
x = x + 1
while data[x] != "\\":
sbsString = sbsString + data[x]
x = x + 1
print "Secure: ", sbsString
break
except: #Catch Recieve Timeout.
print "|-| End Of Received List."
# Close socket
UDPSock.close()