summaryrefslogblamecommitdiff
path: root/server/piztor/prober.py
blob: de26d6f8f1b0e79ca40d03a4f9af238927c8b2b7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                         
                         
                      




                                                            
           

                                 
                                                          



                                    
                


















                                                   







                                                






                                              
               
                      


                                                                
                        
                          








                                                    



                    

                    

              

                                       
              
 




                      

                      



















                                                              

                                             






                                                                  




                                         

                                                                         




                                                  



                                         
                                                            




                                                      
                                         

           


                                                       
                    
                                
                                                      
                                                                          
                        
                                                
                                  
                                                      
                        
                                                

                     
    

                                                           






                                                  


                                         


                
import socket
from struct import *
from random import random
from select import select
from time import sleep

def get_hex(data):
    return "".join([hex(ord(c))[2:].zfill(2) for c in data])

host = "localhost"
port = 2222

def gen_auth(username, password):
    length = 4 + 1 + len(username) + 1 + len(password) + 1
    data = pack("!LB", length, 0x00)
    data += username
    data += "\0"
    data += password
    data += "\0"
    return data

def gen_update_location(token, username, lat, lng):
    length = 4 + 1 + 32 + 8 + 8 + len(username) + 1
    data = pack("!LB32s", length, 0x01, token)
    data += username
    data += chr(0)
    data += pack("!dd", lat, lng)
    return data

def gen_request_location(token, username, gid):
    length = 4 + 1 + 32 + 4 + len(username) + 1
    data = pack("!LB32s", length, 0x02, token)
    data += username
    data += chr(0)
    data += pack("!L", gid)
    return data


def gen_request_user_info(token, username, uid):
    length = 4 + 1 + 32 + len(username) + 1 + 4
    data = pack("!LB32s", length, 0x03, token)
    data += username
    data += chr(0)
    data += pack("!L", uid)
    return data

def gen_logout(token, username):
    length = 4 + 1 + 32 + len(username) + 1
    data = pack("!LB32s", length, 0x04, token)
    data += username
    data += chr(0)
    return data

def send(data):
    received = bytes()
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((host, port))
        #print len(data)
        sock.sendall(data)
        while True:
            rd, wr, err = select([sock], [], [], 10)
            if rd:
                buff = sock.recv(4096)
                if len(buff) == 0:
                    break
                received += buff
            else:
                break
    finally:
        sock.close()
    return received

from sys import argv

username = "a"
password = "a"
#username = "1234567890123456789012"
#password = "world12345678901234567890"
failed_cnt = 0

if len(argv) == 2:
    host = argv[1]

if len(argv) == 3:
    username = argv[1]
    password = argv[2]

def request_location(token, username, gid):
    resp = send(gen_request_location(token, username, gid))
    try:
        pl, optcode, status = unpack("!LBB", resp[:6])
    except:
        print "fuck3"
    if pl != len(resp): print "God!"
    print "size: " + str((pl, len(resp)))
    idx = 6
    print "length: " + str(len(resp[6:]))
    try:
        while idx < pl:
            print len(resp[idx:idx + 20])
            uid, lat, lng = unpack("!Ldd", resp[idx:idx + 20])
            idx += 20
            print (uid, lat, lng)
    except:
        print "fuck4"


for i in xrange(10):
    resp = send(gen_auth(username, password))
    try:
        pl, optcode, status, uid, token = unpack("!LBBL32s", resp)
    except:
        print "fuck1"
        failed_cnt += 1
        continue
    if pl != len(resp): print "God!"
    print "size: " + str((pl, len(resp)))
    print "opt: " + str(optcode)
    print "status: " + str(status)
    print "uid: " + str(uid)
    print "token: " + get_hex(token)
    
    resp = send(gen_update_location(token, username, random(), random()))
    try:
        pl, optcode, status = unpack("!LBB", resp)
    except:
        print "fuck2"
    if pl != len(resp): print "God!"
    print "size: " + str((pl, len(resp)))
    print "opt: " + str(optcode)
    print "status: " + str(status)

    resp = send(gen_request_user_info(token, username, uid))
    try:
        pl, optcode, status = unpack("!LBB", resp[:6])
    except:
        print "fuck5"
    if pl != len(resp): print "God!"
    print "size: " + str((pl, len(resp)))
    
    idx = 6
    try:
        while idx < pl:
            info_key, = unpack("!B", resp[idx:idx + 1])
            idx += 1
            if info_key == 0x00:
                gid, = unpack("!L", resp[idx:idx + 4])
                a, b, comp_id, sec_id = unpack("!BBBB", resp[idx:idx + 4])
                idx += 4
                print "gid: {}".format(str(gid))
            elif info_key == 0x01:
                sex, = unpack("!B", resp[idx:idx + 1])
                idx += 1
                print "sex: {}".format(str(sex))
    except:
        print "fuck6"
    
    request_location(token, username, gid)    
    request_location(token, username, comp_id * 256 + 0xff)

    resp = send(gen_logout(token, username))
    try:
        pl, optcode, status = unpack("!LBB", resp)
    except:
        print "fuck7"
    if pl != len(resp): print "God!"
    print "size: " + str((pl, len(resp)))
    print "opt: " + str(optcode)
    print "status: " + str(status)
    sleep(10)

print failed_cnt