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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
做一个有下拉功能的留言版
Oct 09 PHP
常用的php ADODB使用方法集锦
Mar 25 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP实现 APP端微信支付功能
Jun 22 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编程每天必学之验证码
2016/03/03 PHP
jQuery 选择器详解
2015/01/19 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
js实现放大镜特效
2017/05/18 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
使用python实现rsa算法代码
2016/02/17 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
教师推荐信范文
2013/11/24 职场文书
企业文化标语大全
2014/06/10 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
个人年度总结报告
2015/03/09 职场文书
母亲节感言
2015/08/03 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
python实现调用摄像头并拍照发邮箱
2021/04/27 Python