#!/usr/bin/perl use Digest::MD5 qw(md5 md5_hex md5_base64); use FileHandle; use Socket; use LWP; $login = 'test@msn.com'; $login2 = 'test%40msn.com'; $pass = 'xxxxxx'; ### $ds = 'messenger.hotmail.com'; $port = '1863'; $| = 1; $id = 1; $socket = msnp_connect( $ds, $port ); snd_msg( $socket, "VER 1 MSNP8 CVR0\r\n" ); get_msg( $socket ); snd_msg( $socket, "CVR 2 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS $login\r\n" ); get_msg( $socket ); snd_msg( $socket, "USR 3 TWN I $login\r\n" ); get_msg( $socket ); close( $socket ); $ds = "207.46.110.48"; $socket = msnp_connect( $ds, $port ); snd_msg( $socket, "VER 4 MSNP8 CVR0\r\n" ); get_msg( $socket ); snd_msg( $socket, "CVR 5 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS $login\r\n" ); get_msg( $socket ); snd_msg( $socket, "USR 6 TWN I $login\r\n" ); $tickets = (get_msg( $socket )."\n\n"); $tickets =~ m/lc=(.*)/; $ticket = "lc="."$1"; $link = "https://nexus.passport.com/rdr/pprdr.asp"; my $browser = LWP::UserAgent->new; $response = $browser->get( $link ); $passporturl = $response->headers->header("PassportURLs"); $passporturl =~ m/DALogin=(.*?),/; $dalogin = "https://".$1; $auth = q!Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=!; $auth .= "$login2"; $auth .= ",pwd="; $auth .= "$pass"; $auth .= ","; $auth .= $string; $response = $browser->get($dalogin, 'Authorization' => "$auth"); $final = $response->headers->header("Authentication-Info"); #if ($response->headers->header("Authentication-Info") != '') { # $final = $response->headers->header("Authentication-Info"); #} else { # $final = $response->headers->header("WWW-Authenticate"); #} #print $response->headers->header("Location"); $final =~ m/from-PP='t=(.*)'/; $final = $1; snd_msg( $socket, 'USR 7 TWN S t='.$final."\r\n" ); get_msg( $socket ); close ($socket); exit; sub msnp_connect { my ( $sv, $port ) = @_; my $socket; my $ip = inet_aton( $sv ); my $sockaddr = pack_sockaddr_in( $port, $ip ); socket( $socket, PF_INET, SOCK_STREAM, 0 ); connect( $socket, $sockaddr ); autoflush $socket 1; return $socket; } sub snd_msg { my ( $socket, $buff1 ) = @_; print $socket $buff1; print "TX: $buff1"; } sub get_msg { my ( $socket, $buff1 ) = @_; my $line; my $no = 0; eval { local $SIG{ALRM} = sub { print "timeout" }; alarm $timeout; while ( 1 ) { $line = <$socket>; if ($no <11) { print "RX: $line"; $no++; } if ( $line =~ /$buff1/ ) { last; } } alarm 0; }; alarm 0; if ( $@ ) { if ( $@ =~ /timeout/ ) { print "TIMEDOUT"; exit; } } $line =~ s/[\r\n]//g; return $line; }