Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    6

    [Python]Client MSN Messenger - Errore durante l'autenticazione

    Salve a tutti,dopo aver creato un client per MSN in Python mi sono accorto di alcuni problemi esistenti nella fase finale di autenticazione,in quanto il server "login.passport.com" non trasferisce informazione alcuna al mio client.
    Ho cercato informazioni su google ed ho visto anche che altre persone hanno avuto i miei stessi problemi.

    La seguente è una parte del mio codice,dove rispettivamente le variabili ACCOUNT,PWD e INFO sono l'account con cui si vuole accedere,la password e le informazioni che ti trasmette precedentemente lo swichboard.
    Premettendo che queste variabili sono del tutto corrette,perchè il server,dopo aver accettato la connessione e dopo avermi fatto inviare le richieste,non mi risponde nulla e chiude la connessione?


    TELN = Telnet("login.passport.com","443")
    TELN.write("GET /login2.srf HTTP/1.1\r\n")
    TELN.write("Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2E com,sign-in=" + ACCOUNT + ",pwd=" + PWD + "," + INFO +"\r\n")
    TELN.write("Host: login.passport.com\r\n\r\n")
    LS = TELN.read_all()
    TELN.close()

  2. #2
    potresti provare a scaricare i sorgenti di Emesene (anch'esso scritto in Python) e capire com'è che gestisce la fase di autenticazione.

    saluti

  3. #3
    codice:
        def passportAuth( self , hash ):
            '''
            do the passport authenticaton, this is done connecting to loginnet.passport.com:443
            and sending a XML message described on XmlTemplates.passport
            '''
    
            self.socket.debug('PASSPORT begin')
    
            user = self._user
            password = self._password
            # unquote the hash
            ticket = urllib.unquote( hash ).replace( "," , "&" )
            # replace the %s in the string
            body = XmlTemplates.passport%( user, password, ticket )
    
            #create the headers
            headers = { \
            "Accept" :  "text/*" , \
            "User-Agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" , \
            "Host" : "loginnet.passport.com" , \
            "Content-Length" : str( len( body ) ) , \
            "Connection" : "Keep-Alive" , \
            "Cache-Control" : "no-cache" , \
            }
    
            _server="loginnet.passport.com"
            _url="/RST.srf"
            
            succeeded = False
            for i in range( 5 ):
                # send the SOAP request
                for i in range( 3 ):
                    try:
                        conn = httplib.HTTPSConnection(_server,443)
                        conn.request("POST", _url, body, headers)
                        response = conn.getresponse()
                        self.socket.debug( str( response.status ) + " " + response.reason )
                        break
                    except Exception, e:
                        #print str( e )
                        #raise e
                        pass
    
                data = response.read()
    
                if data.find( '<faultcode>psf:Redirect</faultcode>' ) > 0:
                    from urlparse import urlparse
                    _url=urlparse( data.split( '<psf:redirectUrl>' )[ 1 ].split( '</psf:redirectUrl>' )[ 0 ] )
                    # fixed according to http://docs.python.org/lib/module-urlparse.html
                    _server=_url[ 1 ]
                    _url=_url[ 2 ]
                    self.socket.debug( 'Redirect to: %s %s' % ( _server, _url ) )
                else:
                    succeeded = True
                    break
            
            if not succeeded:
                raise 'PassportAuthException', 'Too many redirections'
    
            # try to get the ticket from the received data
            try:
                twnticket = data.split( "<wsse:BinarySecurityToken Id=\"PPToken1\">" )\
                                [ 1 ].split( "</wsse:BinarySecurityToken>" )[ 0 ]
                twnticket = twnticket.replace( "&amp;" , "&" )
            except Exception, e:
                debugmsg( e )
                debugmsg( data )
                raise 'PassportAuthException'
    
            return twnticket
    
        def ping( self ):
            '''send a ping to the server and register the timestamp of the command'''
            try:
                self.socket.ping()
            except (IOError, socket.error):
                self.emit( 'connection-closed' )
                
        def checkConnection( self ):
            '''return true if the time between the last ping and the response is
            lower than MAX_PING_DELAY'''
            
            if (self.socket.lastqng < self.socket.lastpng) and\
            ( int( time.time() ) - self.socket.lastpng ) > self.socket.MAX_PING_DELAY:
                return False
            
            return True
    Lo preso dal codice sorgente di emesene, ma ti consiglio viavamente di leggertelo tutto ( soprattuto il core )


  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ciao!
    Volevo sapere dove hai trovato la documentazione per scrivere un software del genere.
    Intendo dire, dove hai trovato i "comandi" da inviare al server msn?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da XWolverineX
    Ciao!
    Volevo sapere dove hai trovato la documentazione per scrivere un software del genere.
    Intendo dire, dove hai trovato i "comandi" da inviare al server msn?
    Veramente ha specificato che quel codice l'ha preso da del software OpenSource

    Originariamento inviato da menphisx
    Lo preso dal codice sorgente di emesene, ma ti consiglio viavamente di leggertelo tutto ( soprattuto il core )
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Puoi studiarti il protocollo MSN "ricostruito" con un'opera di reverse-engineering: http://www.hypothetic.org/docs/msn/

  7. #7
    Salve a tutti,dopo aver creato un client per MSN in Python mi sono accorto di alcuni problemi esistenti nella fase finale di autenticazione,in quanto il server "login.passport.com" non trasferisce informazione alcuna al mio client.
    Ho cercato informazioni su google ed ho visto anche che altre persone hanno avuto i miei stessi problemi.

    La seguente è una parte del mio codice,dove rispettivamente le variabili ACCOUNT,PWD e INFO sono l'account con cui si vuole accedere,la password e le informazioni che ti trasmette precedentemente lo swichboard.
    Premettendo che queste variabili sono del tutto corrette,perchè il server,dopo aver accettato la connessione e dopo avermi fatto inviare le richieste,non mi risponde nulla e chiude la connessione?


    TELN = Telnet("login.passport.com","443")
    TELN.write("GET /login2.srf HTTP/1.1\r\n")
    TELN.write("Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2E com,sign-in=" + ACCOUNT + ",pwd=" + PWD + "," + INFO +"\r\n")
    TELN.write("Host: login.passport.com\r\n\r\n")
    LS = TELN.read_all()
    TELN.close()
    - Credo che difficilmente su un forum di discussione "generico" tu possa trovare persone esperte sul protocollo MSN a questi livelli. Prova a cercare aiuto sui gruppi di discussione che su tale protocollo ci hanno lavorato (esempio: il team di gaim).

    - Usare telnetlib per fare un lavoro del genere è un overkill. Una ricerca con google mi ha trovato alcune librerie sicuramente più utili allo scopo:
    http://msnp.sourceforge.net/
    http://auriga.wearlab.de/~alb/msnlib/

    Ciao!
    Volevo sapere dove hai trovato la documentazione per scrivere un software del genere.
    Intendo dire, dove hai trovato i "comandi" da inviare al server msn?
    Per fare questo genere di cose in genere si consultano gli RFC, ovvero dei documenti in cui sono descritti i protocolli e le convenzioni che devono utilizzare.
    Dato che il protocollo MSN è proprietario e non esiste alcuna specifica a riguardo è stata necessaria una operazione di 'reversing' da parte di un gruppo di persone le quali, partendo da un software chiuso, hanno determinato e documentato le specifiche di tale protocollo, specifiche che sono poi state utilizzate ed impiegate per la scrittura di controparti open come gaim o emesene, appunto.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.