免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4848 | 回复: 15

------------做php 登录msn 的东西,有经验的进来指导下可以吗?---------------- [复制链接]

论坛徽章:
0
发表于 2008-07-30 09:49 |显示全部楼层
在网上下了几段代码,现在挑中了这段:还没有调试成功,如有经验的朋友,请指导啊...



  1. <?php
  2. class msn
  3. {
  4.     // messenger.hotmail.com is an exchange server
  5.     // using it will redirect to a server with an open slot
  6.     // using a known server ip will help connect faster

  7.     // commenting out $ssh_login will mean the url to the
  8.     // secure login server will be taken from a secure
  9.     // session. this will slow down connecting a bit.
  10.     // Note: comment out $ssh_login if you experience auth failures

  11.     var $server    =    'messenger.hotmail.com';
  12.     var $port    =    1863;

  13.     var $nexus    =    'https://nexus.passport.com/rdr/pprdr.asp';
  14.     var $ssh_login    =    'login.live.com/login2.srf';

  15.     var $debug    =    0;


  16.     // curl is used for the secure login, if you don't have
  17.     // the php_curl library installed, you can use a curl binary
  18.     // instead. $use_curl needs to be set to 1 to enable this.
  19.     // set $curl to the path where curl is installed.
  20.     // curl can be downloaded here: [url]http://curl.haxx.se/download.html[/url]

  21.     var $curl_bin    =    0;
  22.     var $curl    =    '/usr/local/bin/curl';    // linux
  23.     //var $curl    =    'c:\curl.exe';        // windows

  24.     //Used to prevent the script from hanging
  25.     var $count = 0;
  26.    
  27.     //Used to store the email addresses until all have been collected
  28.     var $email_input = array();
  29.     var $email_processing = array();
  30.     var $email_output = array();

  31.     /**
  32.      *
  33.      * desc    :    Connect to MSN Messenger Network
  34.      *
  35.      * in    :    $passport    =    passport i.e: [email]user@hotmail.com[/email]
  36.      *        $password    =    password for passport
  37.      *
  38.      * out    :    true on success else return false
  39.      *
  40.      */

  41.     function connect($passport, $password)
  42.     {
  43.         $this->trID = 1;

  44.         if (!$this->fp = @fsockopen($this->server, $this->port, $errno, $errstr, 2)) {
  45.             
  46.             die("Could not connect to messenger service");
  47.         
  48.         } else {
  49.               stream_set_timeout($this->fp, 2);
  50.               
  51.             $this->_put("VER $this->trID MSNP9 CVR0\r\n");

  52.             while (! feof($this->fp))
  53.             {
  54.                 $data = $this->_get();

  55.                 switch ($code = substr($data, 0, 3))
  56.                 {
  57.                     default:
  58.                         echo $this->_get_error($code);

  59.                         return false;
  60.                     break;
  61.                     case 'VER':
  62.                         $this->_put("CVR $this->trID 0x0409 win 4.10 i386 MSNMSGR 7.0.0816 MSMSGS $passport\r\n");
  63.                     break;
  64.                     case 'CVR':
  65.                         $this->_put("USR $this->trID TWN I $passport\r\n");
  66.                     break;
  67.                     case 'XFR':
  68.                         list(, , , $ip) = explode (' ', $data);
  69.                         list($ip, $port) = explode (':', $ip);

  70.                         if ($this->fp = @fsockopen($ip, $port, $errno, $errstr, 2))
  71.                         {
  72.                             $this->trID = 1;

  73.                             $this->_put("VER $this->trID MSNP9 CVR0\r\n");
  74.                         }
  75.                         else
  76.                         {
  77.                             if (! empty($this->debug)) echo 'Unable to connect to msn server (transfer)';

  78.                             return false;
  79.                         }
  80.                     break;
  81.                     case 'USR':
  82.                         if (isset($this->authed))
  83.                         {
  84.                             return true;
  85.                         }
  86.                         else
  87.                         {
  88.                             $this->passport = $passport;
  89.                             $this->password = urlencode($password);

  90.                             list(,,,, $code) = explode(' ', trim($data));

  91.                             if ($auth = $this->_ssl_auth($code))
  92.                             {
  93.                                 $this->_put("USR $this->trID TWN S $auth\r\n");

  94.                                 $this->authed = 1;
  95.                             }
  96.                             else
  97.                             {
  98.                                 if (! empty($this->debug)) echo 'auth failed';

  99.                                 return false;
  100.                             }
  101.                         }
  102.                     break;
  103.                 }
  104.             }
  105.         }
  106.         
  107.     }

  108.     //Collects the raw data containing the email addresses
  109.     function rx_data()
  110.     {
  111.         $this->_put("SYN $this->trID 0\r\n");
  112.         
  113.         //Supplies the second MSG code which stops
  114.         //the script from hanging as it waits for
  115.         //more content
  116.         $this->_put("CHG $this->trID NLN\r\n");
  117.         
  118.         $stream_info = stream_get_meta_data($this->fp);
  119.         $email_total = 100;
  120.         //the count check prevents the script hanging as it waits for more content
  121.         while ((! feof($this->fp)) && (! $stream_info['timed_out']) && ($this->count <= 1) && (count($this->email_input) < $email_total))
  122.         {
  123.             $data = $this->_get();
  124.             $stream_info = stream_get_meta_data($this->fp);
  125.             
  126.             if ($data)
  127.             {
  128.                
  129.                 switch($code = substr($data, 0, 3))
  130.                 {
  131.                     default:
  132.                         // uncommenting this line here would probably give a load of "error code not found" messages.
  133.                         //echo $this->_get_error($code);
  134.                     break;
  135.                     case 'MSG':
  136.                        //This prevents the script hanging as it waits for more content
  137.                        $this->count++;
  138.                     break;
  139.                     case 'LST':
  140.                        //These are the email addresses
  141.                        //They need to be collected in email_input
  142.                        
  143.                        $this->email_input[] = $data;
  144.                        if ($this->debug) print("<span class='b'>" . count($this->email_input) . "</span>");
  145.                        
  146.                     break;
  147.                     case 'SYN':
  148.                     $syn_explode = explode(" ", $data);
  149.                     $email_total = $syn_explode[3];
  150.                     break;
  151.                     case 'CHL':
  152.                         $bits = explode (' ', trim($data));

  153.                         $return = md5($bits[2].'Q1P7W2E4J9R8U3S5');
  154.                         $this->_put("QRY $this->trID [email]msmsgs@msnmsgr.com[/email] 32\r\n$return");
  155.                     break;
  156.                     
  157.                 }
  158.             }
  159.         }
  160.         
  161.     }
  162.    
  163.     //This function extracts the emails and screen names from the raw data
  164.     //collected by rx_data
  165.     function process_emails () {
  166.       
  167.       //Neaten up the emails
  168.       
  169.       //$regex = "|^LST\s(\S+?)\s(\S+?)\s\d+?\s\d+?$|";
  170.       foreach($this->email_input as $email_entry) {
  171.         
  172.         //Seperate out the email from the name and other data
  173.         $this->email_processing[] = explode(" ", $email_entry);
  174.                         
  175.       }
  176.       
  177.       //Get rid of the unnecessary data and clean up the name
  178.       foreach($this->email_processing as $email_entry){
  179.         
  180.         $this->email_output[] = array(0 => $email_entry['1'],
  181.                                         1 => urldecode($email_entry[2]));
  182.     }
  183.    
  184.     //var_dump($this->email_processing);
  185.     //var_dump($this->email_output);
  186.       
  187.       
  188.       
  189. }

  190.     //This is a quick way of calling all the seperate functions
  191.     //needed to grab the contact list
  192.     function qGrab ($username, $password) {
  193.       
  194.       //Connect to the MSNM service
  195.       $this->connect($username, $password);
  196.       
  197.       //Get data
  198.       $this->rx_data();
  199.       
  200.       //Process emails
  201.       $this->process_emails();
  202.       
  203.       //send the email array
  204.       return $this->email_output;
  205.       
  206.       
  207.     }


  208.     /*====================================*\
  209.         Various private functions
  210.     \*====================================*/

  211.     function _ssl_auth($auth_string)
  212.     {
  213.         if (empty($this->ssh_login))
  214.         {
  215.             if ($this->curl_bin)
  216.             {
  217.                 exec("$this->curl -m 60 -LkI $this->nexus", $header);
  218.                 $header = implode($header, null);
  219.             }
  220.             else
  221.             {
  222.                 $ch = curl_init($this->nexus);

  223.                 curl_setopt($ch, CURLOPT_HEADER, 1);
  224.                 curl_setopt($ch, CURLOPT_NOBODY, 1);
  225.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  226.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  227.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  228.                 // curl_setopt($ch, CURLOPT_TIMEOUT, 2);

  229.                 $header = curl_exec($ch);

  230.                 curl_close($ch);
  231.             }

  232.             preg_match ('/DALogin=(.*?),/', $header, $out);

  233.             if (isset($out[1]))
  234.             {
  235.                 $slogin = $out[1];
  236.             }
  237.             else
  238.             {
  239.                 return false;
  240.             }
  241.         }
  242.         else
  243.         {
  244.             $slogin = $this->ssh_login;
  245.         }


  246.         if ($this->curl_bin)
  247.         {
  248.             $header1 = '"Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in='.$this->passport.',pwd='.$this->password.','.$auth_string.'"';

  249.             exec("$this->curl -m 60 -LkI -H $header1 https://$slogin", $auth_string);

  250.             $header = null;

  251.             foreach ($auth_string as $key => $value)
  252.             {
  253.                 if (strstr($value, 'Unauthorized'))
  254.                 {
  255.                     echo 'Unauthorised';
  256.                     return false;
  257.                 }
  258.                 elseif (strstr($value, 'Authentication-Info'))
  259.                 {
  260.                     $header = $value;
  261.                 }
  262.             }
  263.         }
  264.         else
  265.         {
  266.             $ch = curl_init('https://'.$slogin);
  267.             curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  268.                             'Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in='.$this->passport.',pwd='.$this->password.','.$auth_string,
  269.                             'Host: login.passport.com'
  270.                             ));


  271.             curl_setopt($ch, CURLOPT_HEADER, 1);
  272.             curl_setopt($ch, CURLOPT_NOBODY, 1);
  273.             //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  274.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  275.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  276.             // curl_setopt($ch, CURLOPT_TIMEOUT, 2);

  277.             $header = curl_exec($ch);

  278.             curl_close($ch);
  279.         }

  280.         preg_match ("/from-PP='(.*?)'/", $header, $out);

  281.         return (isset($out[1])) ? $out[1] : false;
  282.     }


  283.     function _get()
  284.     {
  285.         if ($data = @fgets($this->fp, 4096))
  286.         {
  287.               
  288.          
  289.             if ($this->debug) echo "<div class=\"r\">&lt;&lt;&lt; $data</div>\n";

  290.             return $data;
  291.         }
  292.         else
  293.         {
  294.             return false;
  295.         }
  296.     }


  297.     function _put($data)
  298.     {
  299.         fwrite($this->fp, $data);

  300.         $this->trID++;

  301.         if ($this->debug) echo "<div class=\"g\">&gt;&gt;&gt; $data</div>";
  302.     }


  303.     function _get_error($code)
  304.     {
  305.         switch ($code)
  306.         {
  307.             case 201:
  308.                 return 'Error: 201 Invalid parameter';
  309.             break;
  310.             case 217:
  311.                 return 'Error: 217 Principal not on-line';
  312.             break;
  313.             case 500:
  314.                 return 'Error: 500 Internal server error';
  315.             break;
  316.             case 540:
  317.                 return 'Error: 540 Challenge response failed';
  318.             break;
  319.             case 601:
  320.                 return 'Error: 601 Server is unavailable';
  321.             break;
  322.             case 710:
  323.                 return 'Error: 710 Bad CVR parameters sent';
  324.             break;
  325.             case 713:
  326.                 return 'Error: 713 Calling too rapidly';
  327.             break;
  328.             case 731:
  329.                 return 'Error: 731 Not expected';
  330.             break;
  331.             case 800:
  332.                 return 'Error: 800 Changing too rapidly';
  333.             break;
  334.             case 910:
  335.             case 921:
  336.                 return 'Error: 910/921 Server too busy';
  337.             break;
  338.             case 911:
  339.                 return 'Error: 911 Authentication failed';
  340.             break;
  341.             case 923:
  342.                 return 'Error: 923 Kids Passport without parental consent';
  343.             break;
  344.             case 928:
  345.                 return 'Error: 928 Bad ticket';
  346.             break;
  347.             default:
  348.                 return 'Error code '.$code.' not found';
  349.             break;
  350.         }
  351.     }
  352. }
  353. ?>
  354. <html>
  355. <head>
  356. <title>MSN contactlist reader/grabber. Read and import into a database.</title>

  357. <style type="text/css">
  358. .g {color: green}
  359. .r {color: red}
  360. .b {color: blue}
  361. </style>

  362. </head>
  363. <body>

  364. <?php
  365. error_reporting(E_ALL);

  366. /***********************************************************

  367. USE THE FOLLOWING SQL CODE:

  368. CREATE TABLE `vb_msn_contactlist` (
  369. `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  370. `name` VARCHAR( 100 ) NOT NULL ,
  371. `email` VARCHAR( 150 ) NOT NULL ,
  372. `import_date` DATETIME NOT NULL
  373. );

  374. ************************************************************/

  375. $mysql_dbn = '001'; // the name of the database
  376. $mysql_user = 'root'; // username database
  377. $mysql_pass = 'root'; // password database
  378. $mysql_host = 'localhost'; // host of database (default: localhost)

  379. if (!@mysql_select_db($mysql_dbn, @mysql_connect($mysql_host, $mysql_user, $mysql_pass)))  
  380. {  
  381.       echo 'Failed to connect to the database';
  382.       exit();  
  383. }  


  384. if((isset($_POST['username'])) && (isset($_POST['password'])))
  385. {
  386. //     include('msn_contact_grab.class.php');

  387.     $msn = new msn;

  388.     $returned_emails = $msn->qGrab($_POST['username'], $_POST['password']);

  389.      echo "<table border='1'>";

  390.      foreach($returned_emails as $row)
  391.      {
  392.         // check if email address is existing in the database
  393.         $sql_check = "SELECT id FROM vb_msn_contactlist WHERE email = '" . $row[0] . "'";
  394.         $res_check = mysql_query($sql_check);
  395.         
  396.          if (mysql_num_rows($res_check) == 0)
  397.          {
  398.             // insert email address, contact name and date of import
  399.             $sql = "INSERT INTO vb_msn_contactlist SET email = '" . $row[0] . "', name = '" . addslashes($row[1]) . "', import_date = '" . date('Y-m-d H:i:s') . "'";
  400.             $res = mysql_query($sql) or die(mysql_error());
  401.             
  402.              if (empty($res))
  403.                  echo '<br />Error importing ' . $row[0] . ' to the database.';
  404.          }
  405.         
  406.          echo "<tr><td>".$row['0']."</td><td>".$row['1']."</td></tr>";
  407.      }
  408.   
  409.    echo "</table>";
  410. }
  411. ?>

  412. [color=Green]<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST">
  413.      Username:<input type="text" name="username" /><br>
  414.      Password:<input type="password" name="password" /><br>
  415.          <input type="submit" />
  416. </form>[/color]

  417. </body>
  418. </html>
复制代码

[ 本帖最后由 je1024 于 2008-7-30 10:07 编辑 ]

论坛徽章:
0
发表于 2008-07-30 09:52 |显示全部楼层
一用这个登陆的时候自己的msn就掉线了,证明这个登陆应该是生效的.(这样的判断不知道是不是完全的正确.)

之后的界面就回复到登陆的界面...小弟继续调试,有结果的话会立刻告之.

同时大家尽量的给给建议哦...

论坛徽章:
0
发表于 2008-07-30 09:56 |显示全部楼层
能详细说一下你这个东西是干吗用的吗?

论坛徽章:
0
发表于 2008-07-30 09:59 |显示全部楼层
php 登录msn---如标题所示哦.

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
发表于 2008-07-30 10:02 |显示全部楼层

回复 #1 je1024 的帖子

关注.....:wink:

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
发表于 2008-07-30 10:21 |显示全部楼层
php不是有个开源的msnbot软件吗,可以研究下,应该有登陆msn的部分。

论坛徽章:
0
发表于 2008-07-30 10:23 |显示全部楼层
谢谢啊,,请问前辈们有msn 的api的文档吗?搜索不到啊...

先谢过了.
登陆实现了,不知道哪里弄msn的api 文档,
做到可以msn网页聊天的.

[ 本帖最后由 je1024 于 2008-7-30 11:28 编辑 ]

论坛徽章:
0
发表于 2008-07-30 15:06 |显示全部楼层
登录,发信息都有了...还有接受信息的.

请前辈们给个文档好么?
找不到啊.

论坛徽章:
0
发表于 2008-07-30 16:09 |显示全部楼层
给个例子...
http://www.koolim.com/

是web版的 msn icq yaooim 等等的...

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
发表于 2008-07-30 20:09 |显示全部楼层

回复 #9 je1024 的帖子

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP