Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Вопрос? Kclick_client.php

Тема в разделе "Вопросы- ответы", создана пользователем LMakc, 21 мар 2018.

21.03.18 в 01:36
21.03.18 в 06:39
5
601
0
  1. TopicStarter Overlay
    LMakc

    Команда форума VIP Кинотрафик v2

    Регистрация:
    31 мар 2015
    Сообщения:
    981
    Лучших ответов:
    2
    Рейтинги:
    +399 / 13 / -0
    Всем привет. Сегодня яша пометил все мои сайты. ( Решил обновить движки сайтов. На одному из сайтов не смог обновить двиг так как нету в чистом /engine/modules/kclick_client.php

    чтоб заработал сайт нужно ставить этот сайт, без его не работает.

    Код:
    <?php
    /**
    Usage:
        require_once 'kclick_client.php';
        $client = new KClickClient('http://tds.com/api.php', 'CAMPAIGN_TOKEN');
        $client->sendUtmLabels(); # send only utm labels
        $client->sendAllParams(); # send all params
        $client
            ->keyword('[KEYWORD]')
            ->execute();          # use executeAndBreak() to break the page execution if there is redirect or some output
    
    */
    class KClickClient
    {
        private $_token;
    
        const UNIQUENESS_COOKIE = 'uniqueness_cookie';
        /**
         * @var KHttpClient
         */
        private $_httpClient;
        private $_debug = false;
        private $_site;
        private $_params = array();
        private $_log = array();
        private $_excludeParams = array('api_key', 'token', 'language', 'ua', 'ip', 'referrer', 'uniqueness_cookie');
        private $_result;
    
        const VERSION = 2;
        const ERROR = '[KTrafficClient] Something is wrong. Enable debug mode to see the reason.';
    
        public function __construct($site, $token)
        {
            $this->site($site);
            $this->token($token);
            $this->version(self::VERSION);
            $this->fillParams();
        }
    
        public function fillParams()
        {
            $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
            $this->setHttpClient(new KHttpClient())
                ->ip($this->_findIp())
                ->ua(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null)
                ->language((isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : ''))
                ->seReferrer($referrer)
                ->referrer($referrer)
                ->setUniquenessCookie($this->_getUniquenessCookie())
            ;
        }
    
        public function currentPageAsReferrer()
        {
            $this->referrer($this->_getCurrentPage());
            return $this;
        }
    
        public function debug($state = true)
        {
            $this->_debug = $state;
            return $this;
        }
    
        public function seReferrer($seReferrer)
        {
            $this->_params['se_referrer'] = $seReferrer;
            return $this;
        }
    
        public function referrer($referrer)
        {
            $this->_params['referrer'] = $referrer;
            return $this;
        }
    
        public function setHttpClient($httpClient)
        {
            $this->_httpClient = $httpClient;
            return $this;
        }
    
        public function setUniquenessCookie($value)
        {
            $this->_params[self::UNIQUENESS_COOKIE] = $value;
            return $this;
        }
    
        public function site($name)
        {
            $this->_site = $name;
        }
    
        public function token($token)
        {
            $this->_params['token'] = $token;
            return $this;
        }
    
        public function version($version)
        {
            $this->_params['version'] = $version;
            return $this;
        }
    
        public function ua($ua)
        {
            $this->_params['ua'] = $ua;
            return $this;
        }
    
        public function language($language)
        {
            $this->_params['language'] = $language;
            return $this;
        }
    
        public function keyword($keyword)
        {
            $this->_params['keyword'] = $keyword;
            return $this;
        }
    
        public function ip($ip)
        {
            $this->_params['ip'] = $ip;
            return $this;
        }
    
        public function sendUtmLabels()
        {
            foreach ($_GET as $name => $value) {
                if (strstr($name, 'utm_')) {
                    $this->_params[$name] = $value;
                }
            }
        }
    
        public function sendAllParams()
        {
            foreach ($_GET as $name => $value) {
                if (empty($this->_params[$name]) && !in_array($name, $this->_excludeParams)) {
                    $this->_params[$name] = $value;
                }
            }
        }
    
        public function saveUniquenessCookie($value)
        {
            if (!headers_sent()) {
                setcookie($this->getCookieName(), $value, $this->_getCookiesExpireTimestamp(), '/', $this->_getCookieHost());
            }
            $_COOKIE[$this->getCookieName()] = $value;
        }
    
        public function param($name, $value)
        {
            if (!in_array($name, $this->_excludeParams)) {
                $this->_params[$name] = $value;
            }
            return $this;
        }
    
        public function params($value)
        {
            if (!empty($value)) {
                if (is_string($value)) {
                    parse_str($value, $result);
                    foreach ($result as $name => $value) {
                        $this->param($name, $value);
                    }
                }
            }
    
            return $this;
        }
    
        public function reset()
        {
            $this->_result = null;
        }
    
        public function performRequest()
        {
            if ($this->_result) {
                return $this->_result;
            }
            $request = $this->_buildRequestUrl();
            $this->_log[] = 'Request: ' . $request;
            try {
                $result = $this->_httpClient->request($request);
                $this->_log[] = 'Response: ' . $result;
            } catch (KTrafficClientError $e) {
                if ($this->_debug) {
                    throw $e;
                } else {
                    return self::ERROR;
                }
            }
            $this->_result = json_decode($result);
            return $this->_result;
        }
    
        public function execute($break = false, $print = true)
        {
            $content = $this->getContent();
    
            if ($print) {
                $this->updateCookies();
                $headers = $this->sendHeaders();
                echo $content;
            } else {
                return $content;
            }
    
            if ($break && (!empty($content) || $this->checkHeaders($headers))) {
                exit;
            }
        }
    
        public function checkHeaders($headers)
        {
            if (empty($headers)) {
                return;
            }
            foreach ($headers as $header) {
                if (strpos($header, 'Location:') === 0) {
                    return true;
                }
                if ($header == 'HTTP/1.1 404 Not Found') {
                    return true;
                }
            }
            return false;
        }
    
        public function getContent()
        {
            $result = $this->performRequest();
            $content = '';
            if (!empty($result)) {
                if (!empty($result->error)) {
                    $content .=  $result->error;
                }
    
                if (!empty($result->body)) {
                    $content .= $result->body;
                }
            }
    
            if ($this->_debug) {
                $content .= $this->showLog();
            }
            return $content;
        }
    
        public function showLog($separator = '<br />')
        {
            $this->performRequest();
            return implode($separator, $this->_log);
        }
    
        public function getCookieName()
        {
            return hash('sha1', $this->_site);
        }
    
        public function executeAndBreak()
        {
            $this->execute(true);
        }
    
        public function getParams()
        {
            return $this->_params;
        }
    
        public function updateCookies()
        {
            $result = $this->performRequest();
    
            if (!empty($result->info) && !empty($result->info->sub_id)) {
                $startSession =  (!function_exists('session_status') || !session_status());
                if ($startSession && !headers_sent()) {
                    @session_start();
                }
                $_SESSION['sub_id'] = $result->info->sub_id;
                $_SESSION['subid'] = $result->info->sub_id;
            }
    
            if (!empty($result->uniqueness_cookie)) {
                $this->saveUniquenessCookie($result->uniqueness_cookie);
            }
        }
    
        public function sendHeaders()
        {
            $result = $this->performRequest();
            $headers = array();
    
            if (!empty($result->status)) {
                http_response_code($result->status);
            }
    
            if (!empty($result->headers)) {
                foreach ($result->headers as $header) {
                    $headers[] = $header;
                    if (!headers_sent()) {
                        header($header);
                    }
                }
            }
    
            if (!empty($result->contentType)) {
                $header = 'Content-Type: ' . $result->contentType;
                $headers[] = $header;
                if (!headers_sent()) {
                    header($header);
                }
            }
            return $headers;
        }
    
        // @deprecated
        public function updateHeaders()
        {
            $this->sendHeaders();
        }
    
        public function getOffer($params = array())
        {
            $result = $this->performRequest();
            if (empty($result->info->token)) {
                $this->_log[] = 'Campaign hasn\'t returned offer';
                return 'no_offer';
            }
            $params['_lp'] = 1;
            $params['_token'] = $result->info->token;
            return $this->_buildOfferUrl($params);
        }
    
        public function getSubId()
        {
            $result = $this->performRequest();
            if (empty($result->info->sub_id)) {
                $this->_log[] = 'Campaign hasn\'t returned sub_id';
                return 'no_subid';
            }
            return $result->info->sub_id;
        }
    
        public function isBot()
        {
            $this->param('info', true);
            $result = $this->performRequest();
            if (isset($result->info)) {
                return isset($result->info->is_bot) ? $result->info->is_bot : false;
            }
        }
    
        public function isUnique($level = 'campaign')
        {
            $this->param('info', true);
            $result = $this->performRequest();
            if (isset($result->info) && $result->info->uniqueness) {
                return isset($result->info->uniqueness->$level) ? $result->info->uniqueness->$level : false;
            }
        }
    
        public function getBody()
        {
            $result = $this->performRequest();
            return $result->body;
        }
    
        public function getHeaders()
        {
            $result = $this->performRequest();
            return $result->headers;
        }
    
        private function _buildOfferUrl($params = array())
        {
            $request = parse_url($this->_site);
            $lastChar = substr($request['path'], -1);
            if ($lastChar != '/' && $lastChar != '\\') {
                $path = str_replace(basename($request['path']), '', $request['path']);
            } else {
                $path = $request['path'];
            }
            $path = ltrim($path, "\\\/");
            $params = http_build_query($params);
            return "{$request['scheme']}://{$request['host']}/{$path}?{$params}";
        }
    
    
        private function _getCurrentPage()
        {
            if ((isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']  == 443) || !empty($_SERVER['HTTPS'])) {
                $scheme = 'https';
            } else {
                $scheme = 'http';
            }
            return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        }
    
        private function _buildRequestUrl()
        {
            $this->param('info', true);
            $request = parse_url($this->_site);
            $params = http_build_query($this->getParams());
            return "{$request['scheme']}://{$request['host']}/{$request['path']}?{$params}";
        }
    
    
        private function _findIp()
        {
            $ip = null;
            $headers = array('HTTP_X_FORWARDED_FOR', 'HTTP_CF_CONNECTING_IP', 'HTTP_X_REAL_IP', 'REMOTE_ADDR');
            foreach ($headers as $header) {
                if (!empty($_SERVER[$header])) {
                    $tmp = explode(',', $_SERVER[$header]);
                    $ip = trim($tmp[0]);
                    break;
                }
            }
            if (strstr($ip, ',')) {
                $tmp = explode(',', $ip);
                if (stristr($_SERVER['HTTP_USER_AGENT'], 'mini')) {
                    $ip = trim($tmp[count($tmp) - 2]);
                } else {
                    $ip = trim($tmp[0]);
                }
            }
    
            if (empty($ip)) {
                $ip = $_SERVER['REMOTE_ADDR'];
            }
    
            return $ip;
        }
    
        private function _getUniquenessCookie()
        {
            return !empty($_COOKIE[$this->getCookieName()]) ? $_COOKIE[$this->getCookieName()] : '';
        }
    
        private function _getCookiesExpireTimestamp()
        {
            return time() + 60 * 60 * 24 * 31;
        }
    
        private function _getCookieHost()
        {
            if (isset($_SERVER['HTTP_HOST']) && substr_count($_SERVER['HTTP_HOST'], '.') < 3) {
                $host = '.' . str_replace('www.', '', $_SERVER['HTTP_HOST']);
            } else {
                $host = null;
            }
            return $host;
        }
    }
    
    class KHttpClient
    {
        const UA = 'KHttpClient';
    
        public function request($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_NOBODY, 0);
            curl_setopt($ch, CURLOPT_TIMEOUT, 5);
            curl_setopt($ch, CURLOPT_USERAGENT, self::UA);
            $result = curl_exec($ch);
            if (curl_error($ch)) {
                throw new KTrafficClientError(curl_error($ch));
            }
    
            if (empty($result)) {
                throw new KTrafficClientError('Empty response');
            }
            return $result;
        }
    }
    
    class KTrafficClientError extends \Exception {}
    

    Когда удаляю этот файл то вот такая ошибка, решил не сразу эту проблему пришлось немного повозится.

    [​IMG]
    И так, идем в этот файл /engine/data/dbconfig.php листаем пару км в низ , потому я не мог найти сразу причину ошибки. В самом низу удаляем код , все сайт работает.

    Меняем пароли сервера и сайтов. Проверьте свои сайты, по стате медленное падение трафика

    [​IMG]
     
    • Полезно Полезно x 1
  2. yuris

    yuris Местный

    Регистрация:
    21 сен 2015
    Сообщения:
    1.508
    Лучших ответов:
    1
    Рейтинги:
    +620 / 12 / -0
    Ни уя не понял из написанного....
     
    • Нравится Нравится x 1
  3. TopicStarter Overlay
    LMakc

    Команда форума VIP Кинотрафик v2

    Регистрация:
    31 мар 2015
    Сообщения:
    981
    Лучших ответов:
    2
    Рейтинги:
    +399 / 13 / -0
    /engine/modules/kclick_client.php если такого файла нету то тебе оно не надо )
     
  4. yuris

    yuris Местный

    Регистрация:
    21 сен 2015
    Сообщения:
    1.508
    Лучших ответов:
    1
    Рейтинги:
    +620 / 12 / -0
    так тебя ломанули чтоль? вшили какую-то хрень? Так с этого и надо начинать! :D
     
  5. TopicStarter Overlay
    LMakc

    Команда форума VIP Кинотрафик v2

    Регистрация:
    31 мар 2015
    Сообщения:
    981
    Лучших ответов:
    2
    Рейтинги:
    +399 / 13 / -0
    Вроде же написал, хз может не так как надо
     
  6. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.295
    Лучших ответов:
    54
    Рейтинги:
    +5.206 / 74 / -0
    Файл может называться как угодно, для вычистки заразы с файлов движка надо полностью проверить все файлы ДЛЕ, а так же папки uploads, т.к. туда тоже часто заливают php файлы.
     
Яндекс.Метрика