コード例 #1
0
ファイル: users.php プロジェクト: alldevit/GameAP
 /**
  * Проверка подсети админа
  */
 private function _check_subnet()
 {
     if (is_array($this->config->config['admin_ip'])) {
         /* В конфигурации задан список белых IP
          * Если IP, с которого происходит авторизация нет в белом списке,
          * то авторизация неудачна
          */
         if (!in_subnet($this->input->ip_address(), $this->config->config['admin_ip'])) {
             return false;
         }
     } else {
         $ip_ex = explode(' ', $this->config->config['admin_ip']);
         /* В конфигурации задан список белых IP
          * Если IP, с которого происходит авторизация нет в белом списке,
          * то авторизация неудачна
          */
         if (!in_subnet($this->input->ip_address(), $ip_ex)) {
             return false;
         }
     }
     return true;
 }
コード例 #2
0
ファイル: safety_helper.php プロジェクト: mefisto2009/GameAP
 function in_subnet($ip, $net)
 {
     if (is_array($net)) {
         foreach ($net as $net1) {
             if ($return = in_subnet($ip, $net1)) {
                 return $return;
             }
         }
         return false;
     }
     if (strpos($net, "/") > -1) {
         list($net_ip, $net_mask) = explode("/", $net, 2);
         $subnet_octets = array_map("intval", explode(".", $net_ip, 4));
         if (preg_match("/^\\d+\$/", $net_mask)) {
             $mask_octets = str_repeat("1", (int) $net_mask);
             $mask_octets = str_pad($mask_octets, 32, '0');
             $mask_octets = substr(chunk_split($mask_octets, 8, "."), 0, -1);
             $mask_octets = explode(".", $mask_octets, 4);
             $mask_octets = array_map("bindec", $mask_octets);
         } else {
             $mask_octets = array_map("intval", explode(".", $net_mask));
             if (count($mask_octets) !== 4) {
                 return false;
             }
         }
     } else {
         $subnet_octets = explode(".", $net);
         if (count($subnet_octets) !== 4) {
             return false;
         }
         $subnet_octets = array_map("intval", $subnet_octets);
         $mask_octets = array();
         foreach ($subnet_octets as $o) {
             $mask_octets[] = $o ? 255 : 0;
         }
     }
     $subnet_masked = array();
     foreach ($subnet_octets as $k => $cur) {
         $subnet_masked[] = $cur & $mask_octets[$k];
     }
     $ip_octets = array_map("intval", explode(".", $ip, 4));
     if (count($ip_octets) !== 4) {
         return false;
     }
     $ip_masked = array();
     foreach ($ip_octets as $k => $cur) {
         $ip_masked[] = $cur & $mask_octets[$k];
     }
     return $subnet_masked === $ip_masked;
 }