PocketMine Plugin - Anti Fake Request

From NAT, 7 Years ago, written in PHP, viewed 791 times.
URL https://code.nat.moe/view/886f9d7d Embed
Download Paste or View Raw
  1. <?php
  2. /*
  3. __PocketMine Plugin__
  4. name=Anti Fake Request
  5. description=Block fake player request.
  6. version=0.1
  7. author=NAT
  8. class=AntiFakeRQ
  9. apiversion=12
  10. */
  11. class AntiFakeRQ implements Plugin{
  12.         private $api,$server;
  13.         public function __construct(ServerAPI $api, $server = false){
  14.                 $this->api = $api;
  15.                 $this->server = ServerAPI::request();
  16.         }
  17.         public function init(){
  18.         }
  19.         public function __destruct(){
  20.         }
  21.         public function packetHandler(Packet $packet){
  22.                 $data =& $packet;
  23.                 $CID = PocketMinecraftServer::clientID($packet->ip, $packet->port);
  24.                 if(isset($this->clients[$CID])){
  25.                         $this->clients[$CID]->handlePacket($packet);
  26.                 }else{
  27.                         if($this->handle("server.noauthpacket.".$packet->pid(), $packet) === false){
  28.                                 return;
  29.                         }
  30.                         switch($packet->pid()){
  31.                                 case RakNetInfo::UNCONNECTED_PING:
  32.                                 case RakNetInfo::UNCONNECTED_PING_OPEN_CONNECTIONS:
  33.                                         if($this->invisible === true){
  34.                                                 $pk = new RakNetPacket(RakNetInfo::UNCONNECTED_PONG);
  35.                                                 $pk->pingID = $packet->pingID;
  36.                                                 $pk->serverID = $this->serverID;
  37.                                                 $pk->serverType = $this->serverType;
  38.                                                 $pk->ip = $packet->ip;
  39.                                                 $pk->port = $packet->port;
  40.                                                 $this->send($pk);
  41.                                                 break;
  42.                                         }
  43.                                         if(!isset($this->custom["times_".$CID])){
  44.                                                 $this->custom["times_".$CID] = 0;
  45.                                         }
  46.                                         $ln = 15;
  47.                                         if($this->description == "" or substr($this->description, -1) != " "){                                         
  48.                                                 $this->description .= " ";
  49.                                         }
  50.                                         $txt = substr($this->description, $this->custom["times_".$CID], $ln);
  51.                                         $txt .= substr($this->description, 0, $ln - strlen($txt));
  52.                                         $pk = new RakNetPacket(RakNetInfo::UNCONNECTED_PONG);
  53.                                         $pk->pingID = $packet->pingID;
  54.                                         $pk->serverID = $this->serverID;
  55.                                         $pk->serverType = $this->serverType . $this->name . " [".count($this->clients)."/".$this->maxClients."] ".$txt;
  56.                                         $pk->ip = $packet->ip;
  57.                                         $pk->port = $packet->port;
  58.                                         $this->send($pk);
  59.                                         $this->custom["times_".$CID] = ($this->custom["times_".$CID] + 1) % strlen($this->description);
  60.                                         break;
  61.                                 case RakNetInfo::OPEN_CONNECTION_REQUEST_1:
  62.                                         if($packet->structure !== RakNetInfo::STRUCTURE){
  63.                                                 console("[DEBUG] Incorrect structure #".$packet->structure." from ".$packet->ip.":".$packet->port, true, true, 2);
  64.                                                 $pk = new RakNetPacket(RakNetInfo::INCOMPATIBLE_PROTOCOL_VERSION);
  65.                                                 $pk->serverID = $this->serverID;
  66.                                                 $pk->ip = $packet->ip;
  67.                                                 $pk->port = $packet->port;
  68.                                                 $this->send($pk);
  69.                                         }else{
  70.                                                 $pk = new RakNetPacket(RakNetInfo::OPEN_CONNECTION_REPLY_1);
  71.                                                 $pk->serverID = $this->serverID;
  72.                                                 $pk->mtuSize = strlen($packet->buffer);
  73.                                                 $pk->ip = $packet->ip;
  74.                                                 $pk->port = $packet->port;
  75.                                                 $this->send($pk);
  76.                                         }
  77.                                         break;
  78.                                 case RakNetInfo::OPEN_CONNECTION_REQUEST_2:
  79.                                         if($this->invisible === true){
  80.                                                 break;
  81.                                         }
  82.         if(!isset($this->blacklist[$packet->ip])){
  83.                 $this->blacklist[$packet->ip] = array(
  84.                 'last' => 0,
  85.           'count' => 0,
  86.           );
  87.         }
  88.         $bl = &$this->blacklist[$packet->ip];
  89.         if(time() - $bl['last'] < 3){
  90.                 $bl['count']++;
  91.                 if($bl['count'] % 500==0){
  92.                         console("[AntiFakeRQ] Block fake request attack from {$packet->ip}, total {$bl['count']}.");
  93.           }
  94.         }
  95.         $bl['last'] = time();
  96.         if($bl['count']<3)
  97.         $this->clients[$CID] = new Player($packet->clientID, $packet->ip, $packet->port, $packet->mtuSize);
  98.                                         $pk = new RakNetPacket(RakNetInfo::OPEN_CONNECTION_REPLY_2);
  99.                                         $pk->serverID = $this->serverID;
  100.                                         $pk->port = $this->port;
  101.                                         $pk->mtuSize = $packet->mtuSize;
  102.                                         $pk->ip = $packet->ip;
  103.                                         $pk->port = $packet->port;
  104.                                         $this->send($pk);
  105.                                         break;
  106.                         }
  107.                 }
  108.         }
  109. }
  110. ?>

Reply to "PocketMine Plugin - Anti Fake Request"

Here you can reply to the paste above

captcha