Beispiel #1
0
 function _trylock()
 {
     if (!file_exists(LOCK_FILE) && @symlink("/proc/" . getmypid(), LOCK_FILE) !== FALSE) {
         return TRUE;
     }
     if (is_link(LOCK_FILE) && !is_dir(LOCK_FILE)) {
         unlink(LOCK_FILE);
         return _trylock();
     }
     return FALSE;
 }
Beispiel #2
0
 public function index()
 {
     /*if($this->input->is_cli_request()) {
         return FALSE;
       }*/
     if ($this->input->is_cli_request() && !isset($_SERVER['REMOTE_ADDR'])) {
         ignore_user_abort(true);
         set_time_limit(0);
         $this->load->helper('virus');
         define('LOCK_FILE', $this->config->item('lockdir') . 'worker.lock');
         if (!_trylock()) {
             die;
         }
         register_shutdown_function('unlink', LOCK_FILE);
         $this->load->model('home_model');
         /*$virustotal_requests = 0;*/
         $get_queue = $this->home_model->_get_queue();
         if ($get_queue) {
             $this->load->helper('simple_html_dom');
             $this->load->library(array('punycode', 'email'));
             /*$this->load->library('virustotal',array(
                 'key' => $this->config->item('virustotal_key'),
               ));*/
             foreach ($get_queue->result() as $queue) {
                 if (isset($save_result)) {
                     unset($save_result);
                 }
                 if (!$queue->scanned) {
                     if (!_is_url_exist($queue->url)) {
                         $get_domain = split_url($queue->url);
                         if (isset($get_domain['host'])) {
                             $this->home_model->_delete_from_queue(array('id' => $queue->id, 'host' => $get_domain['host']));
                         } else {
                             $this->home_model->_delete_from_queue(array('id' => $queue->id));
                         }
                         unset($get_domain);
                         continue;
                     }
                     $get_domain = split_url($queue->url);
                     if (isset($get_domain['host'])) {
                         $get_domain_host = $get_domain['host'];
                         $get_domain = $this->home_model->_get_result_domain(array('domain' => $get_domain_host));
                         if ($get_domain) {
                             $get_domain_row = $get_domain->row();
                             if (date_diff(date_create($get_domain_row->date), date_create(date('Y-m-d H:i:s', time())))->days > 0) {
                                 $get_domain_data = _avdetect($get_domain_host, 'domain');
                                 usleep(500000);
                                 if ($get_domain_data === FALSE) {
                                     $this->home_model->_delete_from_queue(array('id' => $queue->id, 'host' => $get_domain_host));
                                     /*unset($get_domain,$get_domain_row,$get_domain_data,$get_domain_host);*/
                                     $get_domain = NULL;
                                     $get_domain_row = NULL;
                                     unset($get_domain_data, $get_domain_host);
                                     time_nanosleep(0, 10000000);
                                     continue;
                                 }
                                 $this->home_model->_save_result_domain(array('domain' => $get_domain_host, 'result' => $get_domain_data));
                                 /*unset($get_domain_data);*/
                                 $get_domain_data = NULL;
                             }
                         } else {
                             $get_domain_data = _avdetect($get_domain_host, 'domain');
                             usleep(500000);
                             if ($get_domain_data === FALSE) {
                                 $this->home_model->_delete_from_queue(array('id' => $queue->id, 'host' => $get_domain_host));
                                 /*unset($get_domain,$get_domain_data,$get_domain_host);*/
                                 $get_domain = NULL;
                                 unset($get_domain_data, $get_domain_host);
                                 time_nanosleep(0, 10000000);
                                 continue;
                             }
                             $this->home_model->_save_result_domain(array('domain' => $get_domain_host, 'result' => $get_domain_data));
                             unset($get_domain_data);
                             $get_domain = $this->home_model->_get_result_domain(array('domain' => $get_domain_host));
                             $get_domain_row = $get_domain->row();
                         }
                         $get_domain = NULL;
                     } else {
                         unset($get_domain);
                         $this->home_model->_delete_from_queue(array('id' => $queue->id));
                         time_nanosleep(0, 10000000);
                         continue;
                     }
                     /*if($virustotal_requests < (int)$this->config->item('virustotal_limit')) {*/
                     _request_timeout(10);
                     /*$report = $this->virustotal->getURLReport($queue->url);
                       $virustotal_requests++;
                       if($report && is_object($report)) {
                         if((int)$report->response_code === 0) {
                           $this->virustotal->scanURL($queue->url);
                           $virustotal_requests++;
                         }
                         elseif((int)$report->response_code === 1) {
                           if(date_diff(date_create($this->virustotal->getSubmissionDate($report)),date_create(date('Y-m-d H:i:s',time())))->days === 0) {
                             $save_result = $this->home_model->_save_result($queue->id,$report);
                           }
                           else {
                             $this->virustotal->scanURL($queue->url);
                             $virustotal_requests++;
                           }
                         }
                         else {
                           continue;
                         }
                       }*/
                     $report = _avdetect($queue->url);
                     usleep(500000);
                     if ($report) {
                         $save_result = $this->home_model->_save_result(array('id' => $queue->id, 'result' => $report, 'domain' => $get_domain_row->id));
                     } else {
                         if (isset($get_domain_host)) {
                             $this->home_model->_delete_from_queue(array('id' => $queue->id, 'host' => $get_domain_host));
                             unset($get_domain_host);
                         } else {
                             $this->home_model->_delete_from_queue(array('id' => $queue->id));
                         }
                         /*unset($get_domain_row,$save_result,$report);*/
                         $get_domain_row = NULL;
                         unset($save_result, $report);
                         time_nanosleep(0, 10000000);
                         continue;
                     }
                     /*unset($report);*/
                     $report = NULL;
                     /*if($virustotal_requests >= (int)$this->config->item('virustotal_limit')) {
                           die();
                         }
                       }*/
                 }
                 $get_queue_js = $this->home_model->_get_queue_js(array('id' => $queue->id));
                 if (!$get_queue_js) {
                     $external_js = _parse_external_js($queue->url);
                     if ($external_js) {
                         /*foreach($external_js as $url) {
                             $this->home_model->_add_queue_js(array(
                               'parent' => $queue->id,
                               'url' => $url,
                             ));
                           }*/
                         $this->home_model->_add_queue_js(array('urls' => $external_js, 'parent' => $queue->id));
                         $get_queue_js = $this->home_model->_get_queue_js(array('id' => $queue->id));
                     }
                     unset($external_js);
                 }
                 if ($get_queue_js) {
                     foreach ($get_queue_js->result() as $queue_js) {
                         if ((int) $queue_js->status === 0) {
                             if (!_is_url_exist($queue_js->url)) {
                                 $this->home_model->_delete_from_queue_js(array('id' => $queue_js->id));
                                 continue;
                             }
                             /*if($virustotal_requests < (int)$this->config->item('virustotal_limit')) {*/
                             /*$report_js = $this->virustotal->getURLReport($queue_js->url);
                               $virustotal_requests++;
                               if($report_js && is_object($report_js)) {
                                 if((int)$report_js->response_code === 0) {
                                   $this->virustotal->scanURL($queue_js->url);
                                   $virustotal_requests++;
                                 }
                                 elseif((int)$report_js->response_code === 1) {
                                   if(date_diff(date_create($this->virustotal->getSubmissionDate($report_js)),date_create(date('Y-m-d H:i:s',time())))->days === 0) {
                                     $this->home_model->_save_result_js($queue_js->id,$report_js);
                                   }
                                   else {
                                     $this->virustotal->scanURL($queue_js->url);
                                     $virustotal_requests++;
                                   }
                                 }
                                 else {
                                   continue;
                                 }
                               }*/
                             $report_js = _avdetect($queue_js->url);
                             usleep(500000);
                             if ($report_js) {
                                 $this->home_model->_save_result_js(array('id' => $queue_js->id, 'result' => $report_js));
                             } else {
                                 $this->home_model->_delete_from_queue_js(array('id' => $queue_js->id));
                                 unset($report_js);
                                 continue;
                             }
                             unset($report_js);
                             /*if($virustotal_requests >= (int)$this->config->item('virustotal_limit')) {
                                   die();
                                 }
                               }*/
                         }
                     }
                     /*unset($get_queue_js);*/
                     $get_queue_js = NULL;
                 }
                 if ($queue->scanned || isset($save_result) && $save_result === TRUE) {
                     $this->home_model->_queue_completed(array('id' => $queue->id));
                     _send_mail_url($queue->email, $queue->hash, $queue->url);
                 }
                 time_nanosleep(0, 10000000);
             }
         }
         /*unset($get_queue);*/
         $get_queue = NULL;
         time_nanosleep(0, 10000000);
         $get_old_queue = $this->home_model->_get_old_queue();
         if ($get_old_queue) {
             foreach ($get_old_queue->result() as $old_queue) {
                 $this->home_model->_delete_from_queue(array('id' => $old_queue->id, 'host' => $old_queue->domain));
             }
         }
         $get_old_queue = NULL;
         exit(0);
     }
 }