Group: Root Admin
Posts: 2,380
Joined: 14-April 06
From: Mty, Nuevo Leon
Member No.: 38
Bueno hoy quería hacer algo para MSN jugando, con c#, pero la librería java que siempre usé le tenia que hacer muchos cambios para portarla, además que quería algo ligero, así que escribí una lib "highly based" en dotmsn, si a alguien le es útil aun como algo instructivo, puede cogerla . Solo necesitaba que reconociera los mensajes, así que no tiene todos los eventos que debería, pero se pueden agregar fácilmente.
Un ejemplo de uso seria:
Llevando tu log a Twitter
CODE
static void Main(string[] args) { MSNMessenger msn = new MSNMessenger(); msn.Credentials = new Credentials("pepito@hotmail.com", "mipass"); msn.Connect();
msn.NotificationProcessor.ConversationCreate += new NotificationProcessor.ConversationCreateHandler(NotificationProcessor_ConversationCreate);
Console.Read(); }
static void NotificationProcessor_ConversationCreate(object sender, EventArgs args) { SwitchboardSession ss = sender as SwitchboardSession; ss.UserTyping += delegate(object usender, ContactEventArgs uargs) { Console.WriteLine(uargs.Contact.Mail + " esta escribiendo..."); };
Se ponen tres acciones, una es disparada cuando se crea una conversación, la segunda cuando un contacto empieza a escribir y una ultima cuando el usuario recibe un mensaje. Al recibir este es posteado automáticamente en una cuenta de Twitter avisando al usuario.
Para que esto no sea solo postear un source, explicare un poco el protocolo de msnp, que no se por que nunca lo había hecho.. aunque será una intro rapidísima.
Autenticación:
Se debe conecta con messenger.hotmail.com en el puerto 1863, y hacer la llamada:
CODE
VER 1 MSNP9 CVR0
Comando VER
QUOTE
Parámetros: El numero de transacción (autoincremental) La versión soportada del protocolo (MSNP9) Y el tercero no se que sea.
Parámetros: - Numero hexadecimal correspondiente al “locale id” - El OS name - OS versión - La arquitectura - El Id del cliente - La versión del cliente - El parámetro MSMSGS es constante - El login
Siguiente llamada:
CODE
USR 3 TWN I mariol@gmail.com
CODE
Parámetros: - tipo de autenticación (siempre es TWN) - siempre "I" (initiating) - login
La respuesta seria algo como:
CODE
XFR 3 NS 64.4.34.148:1863 0 65.55.219.211:1863
NS significa "notificación server", esta bandera indica que debemos transferirnos a la dirección que se nos da (64.4.34.148:1863). Asi que nos desconectamos y comenzamos transacciones con el nuevo servidor.
Hacemos las llamadas inicialices de igual forma (VER, CVR, USR) y si todo va bien en lugar del XFR (puede volver a redirigirnos y el proceso se repetiría), nos devolverá algo como:
CODE
USR 3 TWN S lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1062764229,kpp=1,kv=5,ver=2.1.0173.1,tpf=43f8a3c9de940c04e3740be46c4d1619
Lo que nos importa es el tercer parámetro. Lo tomamos y ahora tenemos que hacer una conexión con:
En el segundo parámetros nos envía una IP a la debemos conectar para aceptar la conversación, el cuarto parámetro es un string para autenticación, el quinto y sexto las identificaciones de quien inicio la conversación.
Nota: Las transacciones para esta conversación serán completamente independientes de la otra conexión.
* Conectamos al server. Contestamos la llamada:
CODE
ANS 1 marioly@gmail.com 13104222.108235211 1445087126
Lo que nos devolvería algo como:
CODE
ANS 1 OK
Ya estamos listos para conversar con nuestro contacto.
Notas: El server de tiempo en tiempo nos enviara llamadas PNG que seria el analogo a las llamadas PING/PONG que todos conocemos, solo debemos volver:
CODE
QNG
También después de un lapso nos puede enviar "challenges", algo como:
CODE
CHL 0 1557013157198894133
Se supone que para responder debes calcular el hash del código que se envía junto con tu ID de sesión, pero hoy por hoy solo con responder:
CODE
QRY
Te vale.
Debes responder en los próximos 20 segundos de recibir el CHL, y el comando de respuesta debe ir sin nueva linea ( \n ) al final.
En http://www.hypothetic.org/docs/msn/c contaban que este comando era para mantener fuera a los desarrollos de terceros, no se que tan cierto sea.
Bueno, esto es lo básico, perdona que sea breve, estoy corta de tiempo
Group: Hackerss Member
Posts: 9
Joined: 29-December 07
From: Bogotá
Member No.: 3,856
Hola, oye super que publicas esto, leo que tas grave de tiempo, estoy usando el msnp12 con java Hago todo bien hasta el momento de pasar al passport...hago el factory con ssl, y pues mando lo siguiente
pd: lo mando con urlencode(password y mail) pd2:programacion del ssl SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault(); SSLSocket log = (SSLSocket)factory.createSocket(InetAddress.getByName("login.passport.com"),443); pd3:Nu veo el error!!!!!!! pd4:aspera tu firma Bucio pd5:Gracias de antemano