php读取msn上的用户信息类


Posted in PHP onDecember 05, 2008

<?php
$msn = new myMSN("h058@test.com", "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:%2F%2Fmessenger.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%3A%2F%2Fmessenger%2Emsn%2Ecom,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 和 MYSQL
Oct 09 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
PHP 函数语法介绍一
Jun 14 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
php获取网页内容方法总结
Dec 04 #PHP
php smarty的预保留变量总结
Dec 04 #PHP
php 页面执行时间计算代码
Dec 04 #PHP
Zend Studio 无法启动的问题解决方法
Dec 04 #PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 #PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 #PHP
discuz论坛 用户登录 后台程序代码
Nov 27 #PHP
You might like
function.inc.php超越php
2006/12/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
python对json的相关操作实例详解
2017/01/04 Python
Python创建xml文件示例
2017/03/22 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
煤矿班组长的职责
2013/12/25 职场文书
开会通知
2015/04/20 职场文书
Python实现滑雪小游戏
2021/09/25 Python
python单向链表实例详解
2022/05/25 Python