Hola, pues llevo más o menos toda la tarde líado con un intento de cliente de msn. Ya sé que hay muchos códigos por google y eso, pero no me gustan, hay algunos que tienen demasiado código basura que no me sirve de nada, he leído bastante sobre los protocolos de MSN y creo que tengo ya una idea de como funcionan y si no me equivoco esto que hice, está correcto, sé que puede optimizarse, y lo haré pero de momento simplemente quería que conectase, el problema es que no lo hace. En el data_arrival del socket una vez conectado he capturado los datos que recibe y me sale ???????????????
No sé que pasará por eso os pido ayuda a ver si sabéis ayudarme un poco, el código es el siguiente:
Dim data, aux, keys As String
Dim vaux As Variant
Private Sub Command1_Click()
Winsock1.Connect "messenger.hotmail.com", 1863
End Sub
Private Sub Winsock1_Connect()
Winsock1.SendData "VER 1 MSNP8 CVR0" & vbCrLf
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData data
Winsock1.GetData aux
data = Left(data, 3)
Select Case data
Case "VER"
Winsock1.SendData "CVR 2 0x0C0A winnt 5.1 i386 MSNMSGR 7.5.0311 MSMSGS " & Text1.Text & vbCrLf
Case "CVR"
'//EL TEXT1.TEXT CONTIENE LA CUENTA CON LA QUE QUIERO CONECTAR
Winsock1.SendData "USR 3 TWN I " & Text1.Text & vbCrLf
Case "XFR" '// AQUÍ LO QUE HAGO ES COGER SOLO
aux = Mid(aux, 9, 18) 'LA PARTE DEL PAQUETE QUE TIENE LOS
vaux = Split(aux, ":") 'DATOS QUE ME INTERESAN
Winsock1.Close
Winsock2.Connect vaux(0), vaux(1)
End Select
End Sub
Private Sub Winsock2_Connect()
Winsock1.SendData "VER 4 MSNP8 CVR0" & vbCrLf
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Winsock2.GetData data
Winsock2.GetData aux
Select Case data
data = Left(data, 3)
Case "VER"
Winsock2.SendData "CVR 5 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS " & Text1.Text & vbCrLf
Case "CVR"
Winsock2.SendData "USR 6 TWN I " & Text1.Text & vbCrLf
Case "USR"
Dim a As Integer
a = Len(aux) - 11
keys = Mid(aux, 11, a)
Winsock3.Connect "login.passport.com", 443
End Select
End Sub
Private Sub Winsock3_Connect()
Winsock3.SendData "GET /login2.srf HTTP/1.0" & vbCrLf & _
"Accept: */*" & vbCrLf & _
"Host: login.passport.com" & vbCrLf & _
"Authorization: Passport1 0.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,signin=" & Text1.Text & ",pwd=password," & keys & vbCrLf
End Sub
Private Sub Winsock3_DataArrival(ByVal bytesTotal As Long)
Winsock3.GetData data
End Sub
Y bueno eso es todo el código, ni que decir tiene que no pasa ni de la primera acción, puse un timer que capturase en todo momento el valor "data" y desde que conecta y envía el primer comando ya el data se vuelve "????????" no sé por que, porque si hago los mismos pasos desde telnet o netcat me va devolviendo bien los valores.
Alguna idea para ayudarme por favor??
Gracias
Lo que pasa es que tenes que convertirlos a unicode.
Strconv(data, vbUnicode)
Saludos
Muchas gracias, por encima lo he probado y ya no me da ese error, pero no llega a completarse el proceso, lo voy a revisar y si no encuentro solución lo publico a ver si podéis ayudarme, gracias por tu ayuda APOKLIPTICO ;)
Saludos
Mira aki:
http://foro.elhacker.net/index.php/topic,174279.msg828579.html#msg828579
OK ;) Ya lo tengo funcionando, muchísimas gracias por tu post KiZaR
Saludos