docs: def binarySearch(self, ip):
          """
          " binary search method
          " param: ip
          """
          if not ip.isdigit(): ip = self.ip2Long(ip)
  
          if self.__indexLen < 1:
              self.__f.seek(0)
              b = self.__f.read(8)
              self.__sPtr = self.getLong(b, 0)
              endPtr      = self.getLong(b, 4)
              self.__indexLen = endPtr - self.__sPtr
  
          startPtr = self.__sPtr
          indexLen = self.__indexLen
  
          self.__f.seek(startPtr)
          b = self.__f.read(indexLen+12)
  
          l, h, mixPtr = (0, int(indexLen/12), 0)
          while l <= h:
              m   = int((l+h)/2)
              ptr = startPtr + m*12
              self.__f.seek(ptr)
  
              b   = self.__f.read(12)
              sip = self.getLong(b, 0)
              eip = self.getLong(b, 4)
  
              if ip >= sip:
                  if ip > eip:
                      l = m + 1
                  else:
                      mixPtr = self.getLong(b, 8)
                      break;
              else:
                  h = m - 1
  
          if mixPtr == 0: return "N2"
  
          return self.returnData(mixPtr)