Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.06 KB | None | 0 0
  1. <?php
  2. //error_reporting(0);
  3. header("Content-type:text/html;charset=utf-8");
  4. function __autoload($class_name) {
  5. require_once ('/workspace/minecraft/pocket/src/'.str_replace('\\','/',$class_name) . '.php');
  6. }
  7.  
  8. function test($f=array()){
  9. $magic = "\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78";
  10. $re = null;
  11. $config=array_merge(array('ip'=>'192.168.54.245','port'=>19121),$f);
  12. $client = @stream_socket_client("udp://".$config['ip'].":".$config['port'], $errno, $errstr); //非阻塞Socket
  13. if(!$client){
  14. $re = false;
  15. }else{
  16. stream_set_timeout($client , 1);
  17.  
  18. //-----------------0x05 0x06
  19. $r1 = new raklib\protocol\OPEN_CONNECTION_REQUEST_1();
  20. $r1->encode();
  21. $date_send = $r1->buffer;
  22. fwrite($client, $date_send);
  23. $data_receive = fread($client, 65535);
  24. echo "\r\n".'send_id:'.'0x'.dechex($r1::$ID).' send_len:'.strlen($date_send).' receive_len:'.strlen($data_receive)."\r\n";
  25. if ($data_receive != "") {
  26. var_dump('0x'.dechex(ord($data_receive{0})));
  27. $rs1 = new raklib\protocol\OPEN_CONNECTION_REPLY_1();
  28. $rs1->buffer=$data_receive;
  29. $rs1->decode();
  30. var_dump($rs1);
  31. }else{
  32. $re = 'no_data';
  33. }
  34.  
  35. //-----------------0x07 0x08
  36. $r2 = new raklib\protocol\OPEN_CONNECTION_REQUEST_2();
  37. $r2->serverAddress=$config['ip'];
  38. $r2->serverPort=$config['port'];
  39. $r2->encode();
  40. $date_send = $r2->buffer;
  41. fwrite($client, $date_send);
  42. $data_receive = fread($client, 65535);
  43. echo "\r\n".'send_id:'.'0x'.dechex($r2::$ID).' send_len:'.strlen($date_send).' receive_len:'.strlen($data_receive)."\r\n";
  44. if ($data_receive != "") {
  45. var_dump('0x'.dechex(ord($data_receive{0})));
  46. $rs2 = new raklib\protocol\OPEN_CONNECTION_REPLY_2();
  47. $rs2->buffer=$data_receive;
  48. $rs2->decode();
  49. var_dump($rs2);
  50. }else{
  51. $re = 'no_data';
  52. }
  53.  
  54. //-----------------0x09 0x10
  55. $pk = new raklib\protocol\CLIENT_CONNECT_DataPacket();
  56. $pk->clientID=1343475902;
  57. $pk->sendPing=21310322131032;
  58. $pk->encode();
  59.  
  60. $sendPacket = new raklib\protocol\EncapsulatedPacket();
  61. $sendPacket->reliability = 0;
  62. $sendPacket->buffer = $pk->buffer;
  63.  
  64. $packet = new raklib\protocol\DATA_PACKET_0();
  65. if ($sendPacket->needACK) {
  66. $packet->packets[] = clone $sendPacket;
  67. $sendPacket->needACK = false;
  68. } else {
  69. $packet->packets[] = $sendPacket->toBinary();
  70. }
  71. $packet->encode();
  72.  
  73. $date_send = $packet->buffer;
  74. fwrite($client, $date_send);
  75. $data_receive = fread($client, 65535);
  76. echo "\r\n".'send_id:'.'0x'.dechex($pk::$ID).' send_len:'.strlen($date_send).' receive_len:'.strlen($data_receive)."\r\n";
  77. if ($data_receive != "") {
  78.  
  79. //多个合成包
  80. var_dump('0x'.dechex(ord($data_receive{0})));
  81. $packet = new raklib\protocol\DATA_PACKET_0();
  82. $packet->buffer=$data_receive;
  83. $packet->decode();
  84. // var_dump($packet);
  85.  
  86. //压缩包
  87. var_dump($packet->packets[0]);
  88. var_dump('0x'.dechex(ord($packet->packets[0]->buffer{0})));
  89. // $sendPacket = new raklib\protocol\EncapsulatedPacket();
  90. // var_dump($sendPacket->fromBinary($packet->packets[0]->buffer));
  91.  
  92. //数据包
  93. $rs = new raklib\protocol\SERVER_HANDSHAKE_DataPacket();
  94. $rs->buffer=$packet->packets[0]->buffer;
  95. $rs->decode();
  96. var_dump($rs);
  97. }else{
  98. $re = 'no_data';
  99. }
  100.  
  101. //-----------------0x13
  102. $pk = new raklib\protocol\CLIENT_HANDSHAKE_DataPacket();
  103. $pk->address=$config['ip'];
  104. $pk->port=$config['port'];
  105. $pk->sendPing=$rs->sendPing;
  106. $pk->sendPong=bcadd($rs->sendPing, "1000");;
  107. $pk->encode();
  108.  
  109. $sendPacket = new raklib\protocol\EncapsulatedPacket();
  110. $sendPacket->reliability = 0;
  111. $sendPacket->buffer = $pk->buffer;
  112.  
  113. $packet = new raklib\protocol\DATA_PACKET_0();
  114. if ($sendPacket->needACK) {
  115. $packet->packets[] = clone $sendPacket;
  116. $sendPacket->needACK = false;
  117. } else {
  118. $packet->packets[] = $sendPacket->toBinary();
  119. }
  120. $packet->encode();
  121.  
  122. $date_send = $packet->buffer;
  123. fwrite($client, $date_send);
  124. echo "\r\n".'send_id:'.'0x'.dechex($pk::$ID).' send_len:'.strlen($date_send)."\r\n";
  125.  
  126. //-----------------0x82
  127. $pk = new pocketmine\network\protocol\LoginPacket();
  128. $pk->username='forthxu';
  129. $pk->protocol1=27;
  130. $pk->protocol2=27;
  131. $pk->clientId=1299218856;
  132. $pk->slim=true;
  133. $pk->encode();
  134.  
  135. $sendPacket = new raklib\protocol\EncapsulatedPacket();
  136. $sendPacket->reliability = 0;
  137. $sendPacket->buffer = $pk->buffer;
  138.  
  139. $packet = new raklib\protocol\DATA_PACKET_4();
  140. // if ($sendPacket->needACK) {
  141. // $packet->packets[] = clone $sendPacket;
  142. // $sendPacket->needACK = false;
  143. // } else {
  144. $packet->packets[] = $sendPacket->toBinary();
  145. // }
  146. $packet->encode();
  147.  
  148. $date_send = $packet->buffer;
  149. fwrite($client, $date_send);
  150.  
  151. $data_receive = fread($client, 65535);
  152. echo "\r\n".'send_id:'.'0x'.dechex($pk::NETWORK_ID).' send_len:'.strlen($date_send).' receive_len:'.strlen($data_receive)."\r\n";
  153. if ($data_receive != "") {
  154. var_dump('0x'.dechex(ord($data_receive{0})));
  155. }else{
  156. $re = 'no_data';
  157. }
  158.  
  159.  
  160.  
  161. }
  162. fclose($client);
  163. $re='end';
  164. return $re;
  165. }
  166. $f=array();
  167. var_dump(test($f));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement