PHP模拟登陆MSN并获得用户信息
2023-06-13 09:14:09 时间
<?php
/*
*PHP100中文网,整体提供,测试通过
*/
$msn=newmyMSN(php100@php100.com,"123");
//MSNv9
classmyMSN{
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;
functionmyMSN($userName="",$passWord=""){
if(!empty($userName)&&!empty($passWord)){
$this->userName=$userName;
//$this->passWord=urlencode($passWord);
$this->passWord=$passWord;
$this->startTalk();
}
}
functionput($data){
if($this->isConnect()){
fputs($this->connect,$data);
$this->trID;
if($this->debug)
print("<divstyle="color:green;font-size:13px;">>>>{$data}</div>");
}
}
functionget(){
if($data=@fgets($this->connect,$this->maxMessage)){
if($this->debug)
print("<divstyle="color:red;font-size:13px;"><<<{$data}</div>");
return$data;
}else{
returnfalse;
}
}
functionisConnect(){
if(!is_null($this->connect))
returntrue;
else
returnfalse;
}
functionclose(){
@fclose($this->connect);
}
functionstartTalk(){
if($this->connect=fsockopen($this->server,$this->port,$errno,$errstr,2))
$this->verTalk();
}
functionverTalk()//MSN协议协商{
$this->put("VER{$this->trID}MSNP9CVR0rn");
$data=$this->get();
//echo$data;
if(false!==strripos($data,"VER"))
$this->envTalk();
}
functionenvTalk()//环境协商{
$this->put("CVR{$this->trID}0x0409winnt5.0i386MSNMSGR7.0.0816MSMSGS{$this->userName}rn");
$data=$this->get();
//echo$data;
if(false!==strripos($data,"CVR"))
$this->reqTalk();
}
functionreqTalk()//请求确认{
$this->put("USR{$this->trID}TWNI{$this->userName}rn");
$data=$this->get();//XFR3NS207.46.107.41:1863065.54.239.210:1863XFR3NS207.46.107.25:1863UD
//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;//USR3TWNSct=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);
}
}
functionreLink($server,$port)//重置连接{
$this->connect=null;
$this->server=$server;
$this->port=$port;
$this->trID=1;
$this->startTalk();
}
functionreLoginTalk()//重新获取服务器地址{
$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{
//returnfalse;
exit("无法捕捉到登陆服务器的URL");
}
}
functiongetLoginCode($slogin)//获取登陆代码{
//echo($this->getCode);
if(!is_null($this->getCode)){
$ch=curl_init("https://".$slogin);
$loginInfo=array(
"Authorization:Passport1.4rgVerb=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{
//returnfalse;
exit("无法捕捉到登陆代码的信息");
}
}else{
returnfalse;
}
}
functionloginAction($loginCode)//登陆工作{
$this->put("USR{$this->trID}TWNS{$loginCode}rn");//USR|trID|SSOS|t=code|
$data=$this->get();
//echo$data;
//print_r($data);
//$this->put("SYN{$this->trID}0rn");
//$this->put("CHG{$this->trID}NLNrn");
//print_r($this->get());
}
}
?>
相关文章
- PHP时间函数总结
- PHP session_start():开启Session
- MySQL与PHP的基础与应用专题之数据控制
- Redis实战:PHP开发者必备技能(redis实战php)
- Linux切换PHP版本:快速而安全的方法(linux切换php版本)
- 解决PHP连接MySQL乱码问题(php连接mysql乱码)
- 学习PHP玩转MySQL数据库(php操作mysql方法)
- PHP的AES加密类详解编程语言
- Linux下搭建完善的PHP开发环境(linux搭建php环境)
- PHP连接MySQL:完成数据库操作的基本语句(php连接mysql语句)
- PHP 5连接MSSQL:快速、方便、高效的数据库解决方案(php5mssql)
- PHP结合MySQL实现数据库事务锁定机制(php mysql 锁)
- 利用Redis和PHP实现高效数据处理(redis php 使用)
- PHP程序实现MSSQL数据库的连接(php程序连接mssql)
- 针对初学PHP者的疑难问答(1)
- php面向对象的方法重载两种版本比较
- 第二章PHP入门基础之php代码写法
- php调用MySQL存储过程的方法集合(推荐)
- php模拟ping命令(phpexec函数的使用方法)
- php另类上传图片的方法(PHP用Socket上传图片)
- 浅析php数据类型转换
- php中给js数组赋值方法
- php的webservice的wsdl的XML无法显示问题的解决方法
- php中session使用示例
- php模拟用户自动在qq空间发表文章的方法
- PHP实现采集抓取淘宝网单个商品信息
- PHP速成大法