PHP 获取MSN好友列表的代码(2009-05-14测试通过)


Posted in PHP onSeptember 09, 2009
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"> 
<head> 
<title>MSN 测试</title> 
<meta name="generator" content="Bluefish 1.0.6"/> 
<meta name="keywords" content="MSN"/> 
<meta name="description" content="MSN test"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<style type="text/css"> 
<!-- 
div { 
font-family: arial, helvetica, sans-serif; 
font-size : 13px ; 
margin: 10px; 
padding: 2px 10px 1px; 
background-color: #C60; 
color: #FFFFFF; 
border-top: 1px solid #C90; 
border-left: 1px solid #C90; 
border-bottom: 1px solid #333; 
border-right: 1px solid #333; 
} 
a:link { 
color: #00FFBE; 
} 
--></style> 
</head> 
<body> 
<div> <?php 
# filename: fm.php 
# purpose: get MSN contact list 
# author: http://qartis.com/?qmsn modified by Druggo 
$username = $_POST['username']; 
$password = $_POST['password']; 
$debug = 0; 
$trid = 0; 
$proto = "MSNP10"; 
# start here 
echo "通讯协议 $proto<br/>"; 
echo "开始登录<br/>"; 
# login now 
$sbconn = fsockopen("messenger.hotmail.com",1863) or die("Can't connect to MSN server"); 
flush(); 
data_out("VER $trid $proto CVR0"); 
data_in(); 
data_out("CVR $trid 0x0409 winnt 5.1 i386 MSNMSGR 8.0.0812 MSMSGS $username"); 
data_in(); 
data_out("USR $trid TWN I $username"); 
$temp = data_in(); 
if (!stristr($temp,":")){ 
if (substr($temp,0,3)==601){ 
#echo "Error: The MSN servers are currently unavailable."; 
echo "很不幸,MSN的服务器又挂了 >.<<br/>"; 
die(); 
} else { 
echo "连接失败!<br/>"; 
fclose($sbconn); 
die(); 
} 
} 
@fclose($sbconn); 
$temp_array = explode(" ",$temp); 
$temp_array = explode(":",$temp_array[3]); 
flush(); 
$sbconn = fsockopen($temp_array[0],$temp_array[1]) or die("error -_-#"); 
data_out("VER $trid $proto CVR0"); 
data_in(); 
flush(); 
data_out("CVR $trid 0x0409 winnt 5.1 i386 MSNMSGR 8.0.0812 MSMSGS $username"); 
data_in(); 
data_out("USR $trid TWN I $username"); 
$temp = data_in(); 
$temp_array = explode(" ",$temp); 
flush(); 
$TOKENSTRING = trim(end($temp_array)); 
#echo "authenticating"; 
echo "身份验证中……<br/>"; 
flush(); 
$nexus_socket = fsockopen("ssl://nexus.passport.com",443); 
fputs($nexus_socket,"GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n"); 
while ($temp != "\r\n"){ 
$temp = fgets($nexus_socket,1024); 
if (substr($temp,0,12)=="PassportURLs"){ 
$urls = substr($temp,14); 
} 
} 
$temp_array = explode(",",$urls); 
$temp = $temp_array[1]; 
$temp = substr($temp,8); 
$temp_array = explode("/",$temp); 
@fclose($nexus_socket); 
$ssl_conn = fsockopen("ssl://".$temp_array[0],443); 
fputs($ssl_conn,"GET /{$temp_array[1]} HTTP/1.1\r\n"); 
fputs($ssl_conn,"Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=".urlencode($username).",pwd=$password,$TOKENSTRING\r\n"); 
fputs($ssl_conn,"User-Agent: MSMSGS\r\n"); 
fputs($ssl_conn,"Host: {$temp_array[0]}\r\n"); 
fputs($ssl_conn,"Connection: Keep-Alive\r\n"); 
fputs($ssl_conn,"Cache-Control: no-cache\r\n\r\n"); 
$temp = fgets($ssl_conn,512); 
if (rtrim($temp) == "HTTP/1.1 302 Found"){ 
#echo "redirection"; 
echo "开始重定向<br/>"; 
flush(); 
while ($temp != "\r\n"){ 
$temp = fgets($ssl_conn,256); 
if (substr($temp,0,9)=="Location:"){ 
$temp_array = explode(":",$temp); 
$temp_array = explode("/",trim(end($temp_array))); 
break; 
} 
} 
@fclose($ssl_conn); 
$ssl_conn = fsockopen("ssl://".$temp_array[2],443); 
fputs($ssl_conn,"GET /{$temp_array[3]} HTTP/1.1\r\n"); 
fputs($ssl_conn,"Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=".urlencode($username).",pwd=$password,$TOKENSTRING\r\n"); 
fputs($ssl_conn,"User-Agent: MSMSGS\r\n"); 
fputs($ssl_conn,"Host: {$temp_array[2]}\r\n"); 
fputs($ssl_conn,"Connection: Keep-Alive\r\n"); 
fputs($ssl_conn,"Cache-Control: no-cache\r\n\r\n"); 
} elseif (rtrim($temp)=="HTTP/1.1 401 Unauthorized"){ 
#echo "invalidcreds"; 
echo "验证失败!<br/>"; 
@fclose($ssl_conn); 
die(); 
} else { 
if (rtrim($temp) != "HTTP/1.1 200 OK"){ 
#echo "Unknown HTTP status code: $temp<br>"; 
echo "未知状态码 $temp<br/>"; 
flush(); 
die(); 
} else { 
#echo "set_bar_len30?"; 
} 
} 
while ($temp != "\r\n"){ 
$temp = fgets($ssl_conn,1024); 
if (substr($temp,0,19)=="Authentication-Info"){ 
$auth_info = $temp; 
$temp = fgets($ssl_conn,1024); 
if (substr($temp,0,14)!="Content-Length"){ 
$auth_info.= fgets($ssl_conn,1024); 
} 
break; 
} 
} 
@fclose($ssl_conn); 
$temp_array = explode("'",$auth_info); 
flush(); 
data_out("USR $trid TWN S {$temp_array[1]}"); 
flush(); 
$temp=data_in(); 
flush(); 
$time_since_initmsg = time(); 
while(!strstr($temp,"ABCHMigrated") && is_string(trim($temp))){ 
if (substr($temp,0,3)=="sid"){ 
$sid = trim(substr($temp,5)); 
} 
if (substr($temp,0,2)=="kv"){ 
$kv = trim(substr($temp,4)); 
} 
if (substr($temp,0,7)=="MSPAuth"){ 
$mspauth = trim(substr($temp,9)); 
flush(); 
} 
$temp = data_in(); 
} 
$temp = data_in(); 
#echo "authenticated<br />"; 
echo "验证通过!<br/>"; 
flush(); 
#data_out("LST 9 RL"); 
#data_in(); 
data_out("SYN $trid 0 0"); 
#echo "retreiving_contact_list<br />"; 
echo "正在获取好友列表……<br/><br/>"; 
flush(); 
stream_set_timeout($sbconn,0,125000); 
/* a lazy man doing this :D */ 
for($i=0;$i<160;$i++) # some say max is 150 
{ 
$temp = data_in(); 
switch (substr($temp, 0, 3)) 
{ 
case "LST": 
$temp_array = explode(" ",$temp); 
$un = substr($temp_array[1], 2); 
$nn = substr($temp_array[2], 2); 
$nn1 = substr($temp_array[2], 0, 1); 
if($nn1 == "F") 
{ 
echo "<a href=\"mailto:$un\">$nn</a><br/>"; 
} 
else 
{ 
echo "曾经的好友: $un<br/>"; 
} 
#echo $temp."<br/>"; 
break; 
default: 
# no nothing 
break; 
} 
} 
echo "列表结束"; 
@fclose($sbconn); 
# end here 
# functions 
function data_out($data){ 
global $sbconn,$debug,$trid; 
fputs($sbconn,$data."\r\n"); 
$trid++; 
if ($debug && !empty($data)){ echo "> ".$data."<br>\r\n";} 
} 
function data_in(){ 
global $sbconn,$debug; 
$temp = fgets($sbconn,256); 
if ($debug && !empty($temp)){echo "< ".$temp."<br>\r\n";} 
return $temp; 
} 
?> 
</div> 
</body> 
</html>

有需要的朋友可以参考下,大约要延迟几秒。
PHP 相关文章推荐
用文本作数据处理
Oct 09 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
php生成RSS订阅的方法
Feb 13 PHP
PHP概率计算函数汇总
Sep 13 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
PHP链表操作简单示例
Oct 15 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
PHP实现本地图片转base64格式并上传
May 29 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
PHP 危险函数全解析
Sep 09 #PHP
php 获取远程网页内容的函数
Sep 08 #PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 #PHP
不要轻信 PHP_SELF的安全问题
Sep 05 #PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 #PHP
php getsiteurl()函数
Sep 05 #PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 #PHP
You might like
PHP去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
利用javascript查看html源文件
2006/11/08 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
微信小程序canvas实现签名功能
2021/01/19 Javascript
python实现可变变量名方法详解
2019/07/01 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
高校学生干部的自我评价分享
2013/11/04 职场文书
早读迟到检讨书
2014/01/24 职场文书
护士在校生自荐信
2014/02/01 职场文书
求职自我评价范文100字
2014/09/23 职场文书
走群众路线剖析材料
2014/10/09 职场文书
倡议书的格式写法
2015/04/28 职场文书
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技