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创建PDF中文文档
Oct 09 PHP
一个odbc连mssql分页的类
Oct 09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php使用文本统计访问量的方法
May 12 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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
PHP开发中常用的8个小技巧
2008/08/27 PHP
php 三维饼图的实现代码
2008/09/28 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
禁止你的左键复制实用技巧
2013/01/04 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python处理大数字的方法
2015/05/27 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
python 命令行传入参数实现解析
2019/08/30 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
实习生单位鉴定意见
2013/12/04 职场文书
企业项目策划书
2014/01/11 职场文书
工程招投标邀请书
2014/01/26 职场文书
单位委托书范本
2014/04/04 职场文书
工作岗位说明书模板
2014/05/09 职场文书
计算机毕业生求职信
2014/06/10 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
网吧温馨提示
2015/07/17 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Django中session进行权限管理的使用
2021/07/09 Python