Example #1
0
 def on_net_msg(self, data):
     d = data.read('<I')
     emsg = d & ~proto_mask
     is_proto = d & proto_mask
     if not EMSGS.get(emsg):
         print 'WARNING: skipping', emsg
         return []
     # TODO: use steamd on these headers
     elif emsg in (EMsg.ChannelEncryptRequest,
                 EMsg.ChannelEncryptResult):
         # TODO: not going to actual implement a deserializer for a type that
         # only gets used for 2 message types, RIGHT HERE
         target = data.read('Q')
         source = data.read('Q')
         hdr = (target, source)
         rest = data.truncate()
         self.dispatch(emsg, hdr, rest)
         return [(emsg, hdr, rest)]
     elif is_proto:
         length = data.read('I')
         proto = data.read_len(length)
         hdr = steam_base.CMsgProtoBufHeader()
         hdr.ParseFromString(proto)
         if not self.session_id:
             self.session_id = hdr.client_sessionid
         if emsg in PROTO_MAPPING:
             msg = PROTO_MAPPING[emsg]()
             msg.ParseFromString(data.read_rest())
             if emsg == EMsg.Multi:
                 return self.on_multi(msg)
             else:
                 self.dispatch(emsg, hdr, msg)
                 return [(emsg, hdr, msg)]
         else:
             rest = data.truncate()
             self.dispatch(emsg, hdr, rest)
             return [(emsg, hdr, rest)]
     return []
Example #2
0
 def on_net_msg(self, data):
     d = data.read('<I')
     emsg = d & ~proto_mask
     is_proto = d & proto_mask
     if not EMSGS.get(emsg):
         print 'WARNING: skipping', emsg
         return []
     # TODO: use steamd on these headers
     elif emsg in (EMsg.ChannelEncryptRequest, EMsg.ChannelEncryptResult):
         # TODO: not going to actual implement a deserializer for a type that
         # only gets used for 2 message types, RIGHT HERE
         target = data.read('Q')
         source = data.read('Q')
         hdr = (target, source)
         rest = data.truncate()
         self.dispatch(emsg, hdr, rest)
         return [(emsg, hdr, rest)]
     elif is_proto:
         length = data.read('I')
         proto = data.read_len(length)
         hdr = steam_base.CMsgProtoBufHeader()
         hdr.ParseFromString(proto)
         if not self.session_id:
             self.session_id = hdr.client_sessionid
         if emsg in PROTO_MAPPING:
             msg = PROTO_MAPPING[emsg]()
             msg.ParseFromString(data.read_rest())
             if emsg == EMsg.Multi:
                 return self.on_multi(msg)
             else:
                 self.dispatch(emsg, hdr, msg)
                 return [(emsg, hdr, msg)]
         else:
             rest = data.truncate()
             self.dispatch(emsg, hdr, rest)
             return [(emsg, hdr, rest)]
     return []
Example #3
0
    sys.exit(1)
client = SteamClient()
client.login(args.user, password, sentry_hash)

blacklist = [
    EMsg.ClientAccountInfo,
    EMsg.ClientClanState,
    EMsg.ClientEmailAddrInfo,
    EMsg.ClientFriendsGroupsList,
    EMsg.ClientFriendsList,
    EMsg.ClientLicenseList,
    EMsg.ClientPersonaState,
    EMsg.ClientPlayerNicknameList,
    EMsg.ClientServerList,
    EMsg.ClientServersAvailable,
]
for emsg, msg in client.pump():
    if not emsg in blacklist:
        print EMSGS.get(emsg)
    if emsg == EMsg.ClientUpdateMachineAuth:
        print 'got sentry hash'
        sha1 = hashlib.sha1(msg.bytes).digest()
        with open(sentry_file, 'w') as f:
            f.write(sha1)
    elif emsg == EMsg.ClientNewLoginKey:
        print 'ready!'
    elif emsg == EMsg.ClientLogOnResponse:
        if msg.eresult == EResult.AccountLogonDenied:
            token = raw_input('SteamGuard Token: ')
            client.login(args.user, password, sentry_hash, token)