ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Провайдеры предоставляющие доступ по PPPoE зачастую сталкиваются с проблемой, когда кто-то из клиентов поднимает PPPoE сервер смотрящий в локалку провайдера.

Т.к. «левый» PPPoE сервер принимает подключения для любого service-name, то как результат:

абоненты провайдера не могут подключиться по PPPoE и получить доступ к услуге.

Предлагаем вашему вниманию скрипт по поиску «левых» PPPoE серверов.

Файл pppoe_search.pl:

#!/usr/bin/perl

if ($#ARGV<0){
        die "Usage: $0 <iface> [service name] [debug]\n";
}else{
        $iface=$ARGV[0];
        if ($ARGV[1] ne '' && $ARGV[1] ne 'debug'){
                $sn=":".$ARGV[1];
                $debug=$ARGV[2];
        }else{
                $debug=$ARGV[1];
        }
}

open F, "netstat -Wni | grep Link | grep -v tun | grep -v ng | grep -v '*' | grep -v lo0 | grep $iface |" or die "Can't exec finding MAC addresses\n";
while (<F>){
        if ($_=~/^$iface\s+\d+\s\<Link#\d{1,3}\>\s+(\S{17})\s/){
                $mac=$1;
        }
}
if (!$mac){
        die "Can't find MAC for [$iface]. Exit...\n";
}
open F, ">/tmp/ppp.conf";
print F "client:
 set device PPPoE:$iface$sn
 set redial 2 2
";
close F;
open F , "grep -w '/tmp/ppp.conf' /etc/ppp/ppp.conf |" or die "Can't exec grep\n";
while (<F>){
        $c=$_;
}
close F;
if (!$c){
        die "Can't find include client's section\n";
}else{
        print "Found MAC [$mac] at $iface\n";
}
if(($pid = fork)) {
        $SIG{CHLD} = 'IGNORE';
        $cmd=sprintf "/usr/sbin/tcpdump -e -n -c 1 -i %s ether proto 0x8863 and ether dst %s and 'ether[0xF:1]=0x7' 2>&1 |",$iface,$mac;
        if ($debug){
                print "DEBUG: ===>[$cmd]<===\n";
        }
        open F,$cmd or die "Can't start tcpdump\n";
        while (<F>){
                chomp($_);
                if ($debug){
                        print "DEBUG: ===>[$_]<===\n";
                }
                if ($_=~/^.+\s(.{17})\s\>\s(.{17}).+PPPoE\sPADO\s\[(.*)\]\s\[(.*)\]\s\[(.*)\]\s\[Host\-Uniq.+/){
                        print "\nFound asshole on iface $iface (iface's MAC: $2)\n
                        ======================================================\n
                        PPPoE at MAC: [$1]\nComp name: [$3]\nListening service name: [$5]\n
                        ======================================================\n\n";
                }elsif ($_=~/^.+\s(.{17})\s\>\s(.{17}).+PPPoE\sPADO\s\[(.*)\]\s\[(.*)\]\s\[Host\-Uniq.+/){
                        print "\nFound asshole on iface $iface (iface's MAC: $2)\n
                        ======================================================\n
                        PPPoE at MAC: [$1]\nComp name: [$3]\nListening service name: [$4]\n
                        ======================================================\n\n";
                }elsif ($_=~/ Device not configured/){
                        die "Wrong iface name [$iface]\n";
                }
        }
        close F;
}else{
        `/usr/sbin/ppp -foreground client`;
}

Далее в файл /etc/ppp/ppp.conf добавляем строчку:

!include /tmp/ppp.conf

Внимание, эта строка НЕ должна начинаться с пробела.

Осталось сделать файл запускным:

chmod a+x pppoe_search.pl

Ну и запускаем его на исполнение и видим:

Usage: ./getto.pl <iface> [service name] [debug]

Т.е. для того что бы скрипт начал поиск ему необходимо передать параметры: имя интерфейса, на котором будем искать, и имя service-name, который ищем.

Пример:

/getto.pl bge1 myservicename

тоже самое, но в выводом дебага:

/getto.pl bge1 myservicename debug

Скрипт желательно запускать со своего  PPPoE сервера, скрипт исключит мак адрес своего сервера (на котором он был запущен).

Удачного вам поиска 😉

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы: Николаев Дмитрий (virus (at) subnets.ru) и Панфилов Алексей (lehis (at) subnets.ru)

Похожие статьи:

    Не найдено

Прочитано: 10 664 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 3,67 из 5)
Загрузка...
Отправить на почту Отправить на почту

Добавить комментарий

Вам следует авторизоваться для размещения комментария.