LINUX.ORG.RU
ФорумAdmin

Демонстрация работы сети в игровом стиле.

 , , , ,


0

1

Сейчас в нашем институте МАТИ как всегда прием абитуриентов. Так вот необходимо собрать стенд и сделать на компьютере програмку с кнопками,которая будет менять параметры на маршрутизаторе cisco. Так вот мее надо сделать такую програмку, как вариант думаю засунуть в screen telnet сессию и туда отправлять команды. Только вот что то -X не выполняет команды. Или же как вариант набросать интерфейс на qt и там при нажатии кнопок вызывать запросы прямо к телнет соединению, но лучше чтобы оно было открыто в screen и можно было это мониторить иногда.

★★

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

Spirit_of_Stallman ★★★
()

Только вот что то -X не выполняет команды

а вместо этого происходит следующее: <тут идут 10 экранов текста с детальным описанием проблемы>
а ssh нет на вашей циске? всё веселее чем telnet...

zolden ★★★★★
()
Ответ на: комментарий от vahtu

Во, ну или xdialog можно использовать. Почитаю, но как мне все таки передать команду правильно? т.к. если один и написать screen -X «nano» то в том скрине пишет неизвестная команда, видимо надо дать команду скрину на запись туда в скрин текста...но какую

Bupyc ★★
() автор топика

Эм... PacketTracer не для таких случаев разве придуман? Под Linux он есть и работает.

DALDON ★★★★★
()
Ответ на: комментарий от Bupyc

Покажи своим студентам Cisco Packet Tracer. Пусть играются.

blexey ★★★★★
()

perl Net::SSH::Expect

Наверняка на питоне и прочих языках есть что-то подобное. Основной момент - нужна работа с ssh и expect.

Вариант похуже - Net::Telnet

router ★★★★★
()

у perl'а есть прекрасный модуль Net::Telnet::Cisco. А еще у cisco есть rsh. С cisco можно отправлять логи на сервер какой-нибудь или вообще пользоваться show archieve log...

dizaster
()
Ответ на: комментарий от DALDON

Нам надо на рабочем стенде кнопками менять параметры маршнутизации на одном из трех железных маршрутизаторов. Еще - я нашел screen -X stuff 'command' отправляет команду но не нажимает ентер...как сделать это?

Bupyc ★★
() автор топика
Ответ на: комментарий от dizaster

А еще у cisco есть rsh.

У них, хвала всем богам, ssh есть. rsh - дыра. Про то, что telnet годится только для отладки, но никак не управления, я промолчу.

router ★★★★★
()
Ответ на: комментарий от Bupyc
#!/usr/bin/perl
use strict;
use Net::SSH::Expect;
use Switch;

sub gc_ssh($) {
    my $conf    = @_[0];
    [...]
        my $ssh=Net::SSH::Expect->new(
            #user   => $conf->{'c_user'},
            user    => "router",
            host    => $conf->{'c_ip'},
            password    => $conf->{'c_pass'},
            #raw_pty    => 1,
            #ssh_option => "v",
            ssh_option  => "-o ConnectTimeout=10",
            timeout => $conf->{'timeout'},
            #exp_debug  => 1
        );
        eval {
            $ssh->login();

            if ( $conf->{'c_en_need'} ) {
                $ssh->waitfor( eval "qr" . $conf->{'c_re_p'} );
                print_log   1, "trying enable";
                $ssh->send( "enable" );
                # enable require password ?
                if ( $conf->{'c_en_rp'} ) {
                    $ssh->waitfor( eval "qr" . $conf->{'c_re_p_p_en'} );
                    $ssh->send( $conf->{'c_en_pass'} );
                }
            }
            print_log(1, "getting running-config" );
            $ssh->send( sprintf ("copy running-config ftp://%s:%s@%s/", $conf->{'ftp_user'}, $conf->{'ftp_pass'}, $conf->{'ftp_host'}) );
            $ssh->waitfor( eval "qr" . $conf->{'c_re_p_h'});
            $out = $ssh->before() . $ssh->match() . $ssh->after() . $ssh->read_all(0);
            $ssh->send( $conf->{'ftp_host'}  );
            $ssh->waitfor( eval "qr" . $conf->{'c_re_p_f'} );
            $out = $ssh->before() . $ssh->match() . $ssh->after() . $ssh->read_all(0);
            $ssh->send( sprintf ("%s_running-config.%s", $conf->{'c_name'},$conf->{'date'}) );
            $ssh->waitfor( eval "qr" . $conf->{'c_re_p_e'} );
            $out .= $ssh->before() . $ssh->match() . $ssh->after() . $ssh->read_all(0);
            print_lines 2, $out;

            [...]
       }

}

    switch ( $opt{'c_ctrl'} ) {
        case 'ssh'  { gc_ssh( \%opt); }
    }

Сам понимаешь, для тестового примера большую часть кода можно выкинуть, в т.ч. все before(), after(), match(), read_all() и т.п.

Основное, на что нужно обратить внимание - login(), send() и waitfor(). waitfor принимает в качестве агрумента регулярное выражение ( например, qr/Username:\s$/ ) и ждёт, пока циска пришлёт подходящую строку. send - отправляет команду в шел циски

router ★★★★★
()
Ответ на: комментарий от Bupyc

Еще - я нашел screen -X stuff 'command' отправляет команду но не нажимает ентер...как сделать это?

после command вставь

Ctrl-V
Enter

Но ИМХО надеяться, что сессия ещё жива, а не отвалилась по таймауту - наивно.

router ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.