Скрипт kill'а интерфейсов

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Yam
сержант
Сообщения: 226
Зарегистрирован: 2008-10-11 19:19:24
Откуда: 2:5093/41

Re: Скрипт kill'а интерфейсов

Непрочитанное сообщение Yam » 2008-10-13 20:02:04

Лет несколько назад в связке mpd+freenibs наваял скриптик, для терминации клиентов с нулевым балансом по команде нибса, слегка модифицировал сейчас, должен к твоей задаче подойти

Код: Выделить всё

#!/usr/local/bin/php
#
<?
    $naspasswd = "superpuperkey\n";
    $linktype = "pptp";
    $linkcount = 20;
    $nasip = "127.0.0.1";
    $nastelnetport = 2004;

    $userip = $argv[1];

    $port = 0;
    $found = false;

    $sock = socket_create (AF_INET, SOCK_STREAM, 0);

    socket_connect ($sock, $nasip, $nastelnetport);

    socket_write ($sock,$naspasswd, strlen($naspasswd));

    $out = socket_read ($sock, 2048);
    $out = socket_read ($sock, 2048);
    $out = socket_read ($sock, 2048);
    $out = socket_read ($sock, 2048);

    while (($port < $linkcount) and ($found != true)) {

        $in = "link ".$linktype.$port."\n";
        socket_write ($sock, $in, strlen($in));
        usleep(1000);

        $in = "show iface\n";
        socket_write ($sock, $in, strlen($in));
        usleep(1000);

        $out = socket_read ($sock, 2048);
        usleep(1000);

        if (preg_match("/.+Addresses.+:.+".$userip."/i", $out, $m) == 1 ) {
            $found = true;
        } else {
            $found = false;
            $port++;
        };
    };

    if ($found == true){

        $in = "link ".$linktype.$port."\n";
        socket_write ($sock, $in, strlen($in));
        usleep(1000);

        $out = socket_read ($sock, 2048);
        usleep(1000);

        $in = "close\n";
        socket_write ($sock, $in, strlen($in));
        usleep(1000);

    socket_close($sock);
    exit;
?>
mpd должен быть запущен с ключем -с XXXX, где XXXX то же самое число что и $nastelnetport в скрипте, $linkcount - соответствует максимально возможному количеству линков (их количество ты задал в mpd.conf). Скрипт принимает ip_юзера в качестве параметра, цепляется на порт mpd перебирает все линки заданного типа и как находит линк с совпадающим ip_юзера, отсылает команду mpd на закрытие интерфейса. По сути использует 3 команды: link pptp0, show iface, close. Юзер корректно отваливается.

Давно ж это было )

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: Скрипт kill'а интерфейсов

Непрочитанное сообщение Гость » 2008-10-13 20:09:21

если bundle static, то destroy bundle
если bundle template, то close link
(возможно я ошибаюсь)
Поиграйся с close/destroy.

Код: Выделить всё

[] sh su
Current daemon status summary
Iface   Bund            Link    LCP     Device          User            From
ng0     foo     Up     foolink1 Opened  l2tp    UP                      XX.XX.XX.XX
        bar     Down
ng1     bar-2   Up     barlink1 Opened  l2tp    UP                      YY.YY.YY.YY
это на mpd5.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Скрипт kill'а интерфейсов

Непрочитанное сообщение LMik » 2008-10-13 20:19:18

B@cZ писал(а):
Гость писал(а):брутальный способ: ngctl shutdown ng4:

но лучше, конечно, через консольку mpd.

а так, клонируемые интерфейсы (список - ifconfig -C) убиваются по ifconfig <ifname> destroy
Если mpd запущен как служба, можно как-то через консоль это делать? Если да, то напиши, пожалуйста, как.
Ну так а что вам мешает ходить скриптом в телнет консоль? маны почитайте и в путь...
На карайний случай можно и в веб скриптом ходить дергать.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!