PHP 模拟登陆MSN并获得用户信息
2015-01-24信息快讯网
一个可以获取msn上用户信息的代码
<?php /* * PHP100中文网,整体提供,测试通过 */ $msn = new myMSN([email protected], "123"); // MSNv9 class myMSN { private $server = "messenger.hotmail.com"; private $port = 1863; private $nexus = "https://nexus.passport.com/rdr/pprdr.asp"; private $sshLogin = "login.live.com/login2.srf"; //loginnet.passport.com/login2.srf private $getCode = null; private $_ip = null; private $_port = null; private $connect = null; private $trID = 1; private $maxMessage = 4096; private $userName = null; private $passWord = null; private $debug = true; function myMSN($userName="", $passWord="") { if (!empty($userName) && !empty($passWord)) { $this->userName = $userName; //$this->passWord = urlencode($passWord); $this->passWord = $passWord; $this->startTalk(); } } function put($data) { if ($this->isConnect()) { fputs($this->connect, $data); $this->trID ; if ($this->debug) print("<div style='color:green;font-size:13px;'>>>>{$data}</div>"); } } function get() { if ($data = @fgets($this->connect, $this->maxMessage)) { if ($this->debug) print("<div style='color:red;font-size:13px;'><<<{$data}</div>"); return $data; } else { return false; } } function isConnect() { if (!is_null($this->connect)) return true; else return false; } function close() { @fclose($this->connect); } function startTalk() { if ($this->connect = fsockopen($this->server, $this->port, $errno, $errstr, 2)) $this->verTalk(); } function verTalk() // MSN 协议协商 { $this->put("VER {$this->trID} MSNP9 CVR0 rn"); $data = $this->get(); //echo $data; if (false !== strripos($data, "VER")) $this->envTalk(); } function envTalk() // 环境协商 { $this->put("CVR {$this->trID} 0x0409 winnt 5.0 i386 MSNMSGR 7.0.0816 MSMSGS {$this->userName} rn"); $data = $this->get(); //echo $data; if (false !== strripos($data, "CVR")) $this->reqTalk(); } function reqTalk() // 请求确认 { $this->put("USR {$this->trID} TWN I {$this->userName} rn"); $data = $this->get(); // XFR 3 NS 207.46.107.41:1863 0 65.54.239.210:1863 XFR 3 NS 207.46.107.25:1863 U D //echo $data; if (false !== strripos($data, "XFR")) { list(, , , $serv) = explode(" ", $data); // 分析服务器 list($ip, $port) = explode(":", $serv); // 分析IP和端口 $this->_ip = $ip; $this->_port = $port; $this->reLink($ip, $port); } else { //echo $data; // USR 3 TWN S ct=1205292058,rver=5.0.3270.0,wp=FS_40SEC_0_COMPACT,lc=1033,id=507,ru=http://messenger.msn.com,tw=0,kpp=1,kv=4,ver=2.1.6000.1,rn=1lgjBfIL,tpf=b0735e3a873dfb5e75054465196398e0 list(, , , , $this->getCode) = explode(" ", trim($data)); //echo $data; if (empty($this->sshLogin)) $this->reLoginTalk(); // 重新获取登陆服务器地址 else $this->getLoginCode($this->sshLogin); } } function reLink($server, $port) // 重置连接 { $this->connect = null; $this->server = $server; $this->port = $port; $this->trID = 1; $this->startTalk(); } function reLoginTalk() // 重新获取服务器地址 { $ch = curl_init($this->nexus); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $header = curl_exec($ch); //print_r($header); curl_close($ch); preg_match ('/DALogin=(.*?),/', $header, $out); // 捕捉服务器登陆匹配 //print_r($out); if (isset($out[1])) { $this->getLoginCode($out[1]); } else { //return false; exit("无法捕捉到登陆服务器的URL"); } } function getLoginCode($slogin) // 获取登陆代码 { //echo($this->getCode); if (!is_null($this->getCode)) { $ch = curl_init("https://" . $slogin); $loginInfo = array( "Authorization: Passport1.4 rgVerb=GET,OrgURL=http://messenger.msn.com,sign-in=" . $this->userName . ",pwd=" . $this->passWord . "," . $this->getCode, "Host: login.passport.com" ); curl_setopt($ch, CURLOPT_HTTPHEADER, $loginInfo); //print_r($loginInfo); //$this->getCode = null; curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $header = curl_exec($ch); //print_r($header); preg_match ("/from-PP='(.*?)'/", $header, $out); //print_r($out); if (isset($out[1])) { $this->loginAction($out[1]); } else { //return false; exit("无法捕捉到登陆代码的信息"); } } else { return false; } } function loginAction($loginCode) // 登陆工作 { $this->put("USR {$this->trID} TWN S {$loginCode} rn"); // USR |trID| SSO S |t=code| $data = $this->get(); //echo $data; //print_r($data); //$this->put("SYN {$this->trID} 0 rn"); //$this->put("CHG {$this->trID} NLN rn"); //print_r($this->get()); } } ?>
php防攻击代码升级版
php 传值赋值与引用赋值的区别
服务器web工具 php环境下
php cookie的操作实现代码(登录)
PHP 图片文件上传实现代码
几款免费开源的不用数据库的php的cms
PHPCMS的使用小结
php下使用curl模拟用户登陆的代码
php 仿Comsenz安装效果代码打包提供下载
dedecms系统的广告设置代码 基础版本
DedeCMS 核心类TypeLink.class.php摘要笔记
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
php 论坛采集程序 模拟登陆,抓取页面 实现代码
PHP日期时间函数的高级应用技巧
抓取YAHOO股票报价的类
PHP 采集心得技巧
PHP获取当前文件所在目录 getcwd()函数
php 购物车实例(申精)
PHP 编写的 25个游戏脚本
PHPMyAdmin 快速配置方法
php mssql 分页SQL语句优化 持续影响
php mssql 日期出现中文字符的解决方法
php mssql 时间格式问题
PHP MSSQL 存储过程的方法
php mssql 数据库分页SQL语句
php读取msn上的用户信息类
关于DISCUZ不用通行证登陆得内容介绍第1/2页
php中的登陆login