Lo que hace este codigo es conectarse al MSN mediante el protocolo del MSN:
Descargar/Ver
En principio lo que hace es pedirte tu cuenta, tu pass, conectarse y te enseña el nick tal y como lo tienes tu en el MSN (ya que por defecto te los pasan codificado...e implementado una funcion que lo descodifica).
El codigo es el siguiente:
Código:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static string cuenta;
static string pass;
public bool IsNumeric(object epresionje)
{
bool isNum;
double retNum;
isNum = Double.TryParse(Convert.ToString(epresionje), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
public string urldecode(string cadena)
{
char p = '%';
string hexa;
long dec;
char asc;
string resultado = "";
Program hen = new Program();
string[] arr = cadena.Split(p);
foreach (string q in arr)
{
if (q.Length > 0)
{
hexa = q.Substring(0, 2);
if (hen.IsNumeric(hexa) == true)
{
dec = Convert.ToInt64(hexa, 16);
asc = Convert.ToChar(dec);
resultado = resultado + asc + q.Substring(2);
}
else
{
resultado = resultado + q;
}
}
}
return resultado;
}
public string depurarip(string direc)
{
string a;
int b;
string c;
a = direc.Substring(9);
b = a.IndexOf(":");
c = a.Substring(0, b);
return c;
}
public string Sacacookie(string resultado)
{
int a;
string b;
int c;
string d;
a = resultado.IndexOf("'t=");
b = resultado.Substring(a + 2);
c = b.IndexOf("'");
d = b.Substring(1, c);
return d;
}
static void Main(string[] args)
{
Console.Write("Introduce tu Cuenta: ");
cuenta = Console.ReadLine();
Console.Write("Introduce la Pass: ");
pass = Console.ReadLine();
string cabecera = "VER 1 MSNP9 MSNP8 CVR0\r\n";
string respuesta = "";
string cab2 = "CVR 2 0x0C0A winnt 5.1 i386 MSNMSGR 6.0.0602 MSMSGS " + cuenta + "\r\n";
string cab3 = "USR 3 TWN I " + cuenta + "\r\n";
string cab4 = "VER 4 MSNP9 MSNP8 CVR0\r\n";
string cab5 = "CVR 5 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS " + cuenta + "\r\n";
string cab6 = "USR 6 TWN I " + cuenta + "\r\n";
string cab7;
string nick;
Byte[] Send6 = Encoding.ASCII.GetBytes(cab6);
Byte[] Rec6 = new Byte[255];
Byte[] Send5 = Encoding.ASCII.GetBytes(cab5);
Byte[] Rec5 = new Byte[255];
Byte[] Send4 = Encoding.ASCII.GetBytes(cab4);
Byte[] Rec4 = new Byte[255];
Byte[] Send3 = Encoding.ASCII.GetBytes(cab3);
Byte[] Rec3 = new Byte[255];
Byte[] Send2 = Encoding.ASCII.GetBytes(cab2);
Byte[] Rec = new Byte[255];
Byte[] SendBytes = Encoding.ASCII.GetBytes(cabecera);
Byte[] RecvBytes = new Byte[255];
int bytes;
string IPnueva;
string cookie;
string cuentaurl = cuenta.Replace("@", "%40");
IPHostEntry address = Dns.GetHostEntry("messenger.hotmail.com");
IPEndPoint Ep = new IPEndPoint(address.AddressList[0], 1863);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// Primera conexión
socket.Connect(Ep);
socket.Send(SendBytes, SendBytes.Length, SocketFlags.None);
bytes = socket.Receive(RecvBytes, RecvBytes.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(RecvBytes, 0, bytes);
//Segunda Conexión
socket.Send(Send2, Send2.Length, SocketFlags.None);
bytes = socket.Receive(Rec, Rec.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec, 0, bytes);
//tercera Conexión
socket.Send(Send3, Send3.Length, SocketFlags.None);
bytes = socket.Receive(Rec3, Rec3.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec3, 0, bytes);
Program o = new Program();
IPnueva = o.depurarip(respuesta);
socket.Close();
Console.WriteLine("\nConectando...");
//Cuarta conexión
IPHostEntry addressa = Dns.GetHostEntry(IPnueva);
IPEndPoint Epo = new IPEndPoint(addressa.AddressList[0], 1863);
Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket2.Connect(Epo);
socket2.Send(Send4, Send4.Length, SocketFlags.None);
bytes = socket2.Receive(Rec4, Rec4.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec4, 0, bytes);
//Quinta conexión
socket2.Send(Send5, Send5.Length, SocketFlags.None);
bytes = socket2.Receive(Rec5, Rec5.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec5, 0, bytes);
//Sexta conexión
socket2.Send(Send6, Send6.Length, SocketFlags.None);
bytes = socket2.Receive(Rec6, Rec6.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec6, 0, bytes);
cookie = respuesta.Substring(12);
//Septima conexión
string tiket;
string head;
cab7 = "Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" + cuentaurl + ",pwd=" + pass + "," + cookie + "\r\n";
WebRequest request = WebRequest.Create("https://login.passport.com/login2.srf");
request.Headers.Add("Authorization", cab7);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
head = Convert.ToString(response.Headers);
tiket = o.Sacacookie(head);
response.Close();
//Ultima conexión
string cab8 = "USR 7 TWN S t=" + tiket + "\r\n";
Byte[] Send8 = Encoding.ASCII.GetBytes(cab8);
Byte[] Rec8 = new Byte[255];
socket2.Send(Send8, Send8.Length, SocketFlags.None);
bytes = socket2.Receive(Rec8, Rec8.Length, SocketFlags.None);
respuesta = Encoding.ASCII.GetString(Rec8, 0, bytes);
nick = respuesta.Substring(cuenta.Length + 10);
string decode;
int fin;
fin = nick.IndexOf("??$");
nick = nick.Substring(0, fin);
decode = o.urldecode(nick);
Console.WriteLine("\n\nTu nick es: {0}",decode);
Console.Read();
}
catch
{
Console.WriteLine("Ocurrió un error");
Console.Read();
}
}
}
}
A partir de esta base se pueden hacer otros proyectos como son versiones del MSN tipo AMSN, se pueden hacer MSN nukers....eso lo dejo a vuestra elección.
Un Saludo.
PD: Quiero dar las gracias a MazarD, sin su ayuda no habria podido conectar con login.passport.com...