zoukankan      html  css  js  c++  java
  • PHP使用纯真IP数据库

    #纯真数据库调用函数(需要下载纯真数据库文件)
    function convertip($ip) { 
      $ip1num = 0;
      $ip2num = 0;
      $ipAddr1 ="";
      $ipAddr2 ="";
      $dat_path = './QQWry.Dat';        //纯真数据库文件位置
      if(!preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $ip)) { 
        return 'IP Address Error'; 
      }  
      if(!$fd = @fopen($dat_path, 'rb')){ 
        return 'IP date file not exists or access denied'; 
      }  
      $ip = explode('.', $ip); 
      $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];  
      $DataBegin = fread($fd, 4); 
      $DataEnd = fread($fd, 4); 
      $ipbegin = implode('', unpack('L', $DataBegin)); 
      if($ipbegin < 0) $ipbegin += pow(2, 32); 
        $ipend = implode('', unpack('L', $DataEnd)); 
      if($ipend < 0) $ipend += pow(2, 32); 
        $ipAllNum = ($ipend - $ipbegin) / 7 + 1; 
      $BeginNum = 0; 
      $EndNum = $ipAllNum;  
      while($ip1num>$ipNum || $ip2num<$ipNum) { 
        $Middle= intval(($EndNum + $BeginNum) / 2); 
        fseek($fd, $ipbegin + 7 * $Middle); 
        $ipData1 = fread($fd, 4); 
        if(strlen($ipData1) < 4) { 
          fclose($fd); 
          return 'System Error'; 
        }
        $ip1num = implode('', unpack('L', $ipData1)); 
        if($ip1num < 0) $ip1num += pow(2, 32); 
    
        if($ip1num > $ipNum) { 
          $EndNum = $Middle; 
          continue; 
        } 
        $DataSeek = fread($fd, 3); 
        if(strlen($DataSeek) < 3) { 
          fclose($fd); 
          return 'System Error'; 
        } 
        $DataSeek = implode('', unpack('L', $DataSeek.chr(0))); 
        fseek($fd, $DataSeek); 
        $ipData2 = fread($fd, 4); 
        if(strlen($ipData2) < 4) { 
          fclose($fd); 
          return 'System Error'; 
        } 
        $ip2num = implode('', unpack('L', $ipData2)); 
        if($ip2num < 0) $ip2num += pow(2, 32);  
          if($ip2num < $ipNum) { 
            if($Middle == $BeginNum) { 
              fclose($fd); 
              return 'Unknown'; 
            } 
            $BeginNum = $Middle; 
          } 
        }  
        $ipFlag = fread($fd, 1); 
        if($ipFlag == chr(1)) { 
          $ipSeek = fread($fd, 3); 
          if(strlen($ipSeek) < 3) { 
            fclose($fd); 
            return 'System Error'; 
          } 
          $ipSeek = implode('', unpack('L', $ipSeek.chr(0))); 
          fseek($fd, $ipSeek); 
          $ipFlag = fread($fd, 1); 
        } 
        if($ipFlag == chr(2)) { 
          $AddrSeek = fread($fd, 3); 
          if(strlen($AddrSeek) < 3) { 
          fclose($fd); 
          return 'System Error'; 
        } 
        $ipFlag = fread($fd, 1); 
        if($ipFlag == chr(2)) { 
          $AddrSeek2 = fread($fd, 3); 
          if(strlen($AddrSeek2) < 3) { 
            fclose($fd); 
            return 'System Error'; 
          } 
          $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); 
          fseek($fd, $AddrSeek2); 
        } else { 
          fseek($fd, -1, SEEK_CUR); 
        } 
        while(($char = fread($fd, 1)) != chr(0)) 
        $ipAddr2 .= $char; 
        $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); 
        fseek($fd, $AddrSeek); 
        while(($char = fread($fd, 1)) != chr(0)) 
        $ipAddr1 .= $char; 
      } else { 
        fseek($fd, -1, SEEK_CUR); 
        while(($char = fread($fd, 1)) != chr(0)) 
        $ipAddr1 .= $char; 
        $ipFlag = fread($fd, 1); 
        if($ipFlag == chr(2)) { 
          $AddrSeek2 = fread($fd, 3); 
          if(strlen($AddrSeek2) < 3) { 
            fclose($fd); 
            return 'System Error'; 
          } 
          $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); 
          fseek($fd, $AddrSeek2); 
        } else { 
          fseek($fd, -1, SEEK_CUR); 
        } 
        while(($char = fread($fd, 1)) != chr(0)){ 
          $ipAddr2 .= $char; 
        } 
      } 
      fclose($fd);  
      if(preg_match('/http/i', $ipAddr2)) { 
        $ipAddr2 = ''; 
      } 
      $ipaddr = "$ipAddr1 $ipAddr2"; 
      $ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr); 
      $ipaddr = preg_replace('/^s*/is', '', $ipaddr); 
      $ipaddr = preg_replace('/s*$/is', '', $ipaddr); 
      if(preg_match('/http/i', $ipaddr) || $ipaddr == '') { 
        $ipaddr = 'Unknown'; 
      } 
      return $ipaddr; 
    }
    #函数调用
    echo convertip('202.96.209.5');
  • 相关阅读:
    CS224n, lec 10, NMT & Seq2Seq Attn
    CS231n笔记 Lecture 11, Detection and Segmentation
    CS231n笔记 Lecture 10, Recurrent Neural Networks
    CS231n笔记 Lecture 9, CNN Architectures
    CS231n笔记 Lecture 8, Deep Learning Software
    CS231n笔记 Lecture 7, Training Neural Networks, Part 2
    pytorch坑点排雷
    Sorry, Ubuntu 17.10 has experienced an internal error
    VSCode配置python插件
    tmux配置与使用
  • 原文地址:https://www.cnblogs.com/boystar/p/4689125.html
Copyright © 2011-2022 走看看