Задать вопрос
  • Правка PHP скрипта, в роутере Asus, за вознаграждение?

    lFaTaL1Ty
    @lFaTaL1Ty Автор вопроса
    Итак решение было найдено и работа оплачена, к сожалению человек даже не хабравчанин (все таки поразительно какое огромное сообщество может помочь учитывая что многие просто читают, а не только пишут.)

    От автора
    Изменения для того, что бы выключать пользователей по дневному лимиту:

    В файле «FileExtractor.php» создадим дополнительную функцию «getUserTrafByThisDay» (чтобы особо не вдаваться, за основу возьмём уже готовую функцию «getUserTrafByDay» немного изменив её), получится:

    FileExtractor.php
    public function getUserTrafByThisDay(&$totalDay, &$totalIP) {
            $thisdate = date('Y-m-d');
            $handle1 = fopen($this->world.$thisdate, "r");
            $handle2 = fopen($this->city.$thisdate, "r");
            $sum['win'] = '0';
            $sum['wout'] = '0';
            $sum['cin'] = '0';
            $sum['cout'] = '0';
            while ($userinfo = fscanf($handle1, "%s\t%s\t%s\n")) {
                 $userByIp[$userinfo[0]]['win'] = $userinfo[1];
                  $userByIp[$userinfo[0]]['wout'] = $userinfo[2];
                  $sum['win'] = bcadd($sum['win'], $userinfo[1]);
                  $sum['wout'] = bcadd($sum['wout'], $userinfo[2]);
                   if (isset($totalIP[$userinfo[0]])) {
                       $totalIP[$userinfo[0]]['win'] = bcadd($totalIP[$userinfo[0]]['win'], $userinfo[1]);
                       $totalIP[$userinfo[0]]['wout'] = bcadd($totalIP[$userinfo[0]]['wout'], $userinfo[2]);
                   }
    	   else {
                       $totalIP[$userinfo[0]]['win'] = $userinfo[1];
                       $totalIP[$userinfo[0]]['wout'] = $userinfo[2];
                       $totalIP[$userinfo[0]]['cin'] = '0';
                       $totalIP[$userinfo[0]]['cout'] = '0';
                  }
            }
            while ($userinfo = fscanf($handle2, "%s\t%s\t%s\n")) {
                 $userByIp[$userinfo[0]]['cin'] = $userinfo[1];
                 $userByIp[$userinfo[0]]['cout'] = $userinfo[2];                    
                 $sum['cin'] = bcadd($sum['cin'], $userinfo[1]);
                 $sum['cout'] = bcadd($sum['cout'], $userinfo[2]);
                  if (isset($totalIP[$userinfo[0]])) {
                      $totalIP[$userinfo[0]]['cin'] = bcadd($totalIP[$userinfo[0]]['cin'], $userinfo[1]);
                      $totalIP[$userinfo[0]]['cout'] = bcadd($totalIP[$userinfo[0]]['cout'], $userinfo[2]);
                  }
                  else {
                       $totalIP[$userinfo[0]]['cin'] = $userinfo[1];
                       $totalIP[$userinfo[0]]['cout'] = $userinfo[2];
                  }
            }
            fclose($handle1);
            fclose($handle2);
            $trafByDay[$thisdate] = $userByIp;
            $totalDay[$thisdate] = $sum;
            unset ($userByIp);
            unset ($sum);
            return $trafByDay;
        }
    
    


    Убрали сканирование файлов в директории, теперь считываем файл с именем в виде текущей даты.

    Соответственно в скрипте, который устанавливает лимит «limit.php» меняем название функции, строка 31:

    $trafByDay = $fe->getUserTrafByDay($totalDay, $totalIP);

    на

    $trafByDay = $fe->getUserTrafByThisDay($totalDay, $totalIP);


    Если кому нибудь из пользователей не жалко поделитесь инвайтом с человеком.
    У меня к сожалению такой возможности нет, а человек толковый. Его почта rvk@polly.com.ua
    Ответ написан
    Комментировать
  • Правка PHP скрипта, в роутере Asus, за вознаграждение?

    lFaTaL1Ty
    @lFaTaL1Ty Автор вопроса
    Сам скрипт
    <?php class Limit { private $limitFile = "billing/limit"; private $users = "/usr/local/etc/ethers"; private $userMAC; private $userLimit; private function getLimit() { $handle = fopen($this->limitFile, "r"); while ($userinfo = fscanf($handle, "%s\t%s\t%s\t%s\n")) { $this->userLimit[$userinfo[0]]['in'] = $userinfo[1]; $this->userLimit[$userinfo[0]]['out'] = $userinfo[2]; $this->userLimit[$userinfo[0]]['total'] = $userinfo[3]; } fclose($handle); } private function getUserMAC() { $handle = fopen($this->users, "r"); while ($userinfo = fscanf($handle, "%s\t%s\n")) { $this->userMAC[$userinfo[1]] = $userinfo[0]; } fclose($handle); } public function disableUsers() { $this->getLimit(); $this->getUserMAC(); include_once("FileExtractor.php"); $fe = new FileExtractor(); $trafByDay = $fe->getUserTrafByDay($totalDay, $totalIP); foreach ($this->userLimit as $ip => $limit) { if (isset ($this->userMAC[$ip]) && isset ($totalIP[$ip]) && ( bccomp(bcdiv($totalIP[$ip]['win'], '1048576'), $limit['in']) == 1 || bccomp(bcdiv($totalIP[$ip]['wout'], '1048576'), $limit['out']) == 1 || bccomp(bcdiv(bcadd($totalIP[$ip]['win'], $totalIP[$ip]['wout']), '1048576'), $limit['total']) == 1 ) ){ shell_exec('iptables -D MAC_IP -s '.$ip.' -m mac --mac-source '.$this->userMAC[$ip].' -j RETURN'); } } } } $limit = new Limit(); $limit->disableUsers(); ?>
    Ответ написан
    Комментировать