Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 50

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

ЕстСствСнно, Ρ‡Ρ‚ΠΎ Π² Perl имССтся мноТСство срСдств Ρ€Π°Π±ΠΎΡ‚Ρ‹ с элСктронной ΠΏΠΎΡ‡Ρ‚ΠΎΠΉ. По элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскоС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ систСмных администраторов ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎ наступлСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ события. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сообщСний элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ организуСтся рСгулярная автоматичСская рассылка ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, счСтов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΡ‡Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ стандартными модулями - Net::SMTP для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний ΠΈ Net::POP3 для ΠΈΡ… получСния. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ сообщСниС элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹:


use Net::SMTP; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ e-mail my $mail_server = 'shokhirev.com'; # ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр my $to_user = ' [email protected]'; # ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ my $from_user = ' [email protected]'; # ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ $smtp = Net::SMTP->new(Host=>$mail_server);# соСдиняюсь $smtp->mail($from_user); # ΠΏΠΈΡˆΡƒ $smtp->to($to_user); # ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ $smtp->data(); # письмо $smtp->datasend("To: $to_user\n"); # $smtp->datasend("Subject: Lectures on Perl 5\n"); $smtp->datasend("\n"); $smtp->datasend("Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅ΠΌ ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° intuit.ru\n"); $smtp->datasend("курса Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎ Perl 5\n"); $smtp->dataend(); # Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽ $smtp->quit; # ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡΡŒ


Если Π½ΡƒΠΆΠ½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик Π½Π° сСрвСрС, Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса Net::POP3 Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ. НапримСр, Ρ‚Π°ΠΊΡƒΡŽ:


use Net::POP3; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс для получСния e-mail my $mail_server = 'shadrinsk.net'; # ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр my $user = 'mshock'; # ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик my $password = 'secret'; # ΠΏΠ°Ρ€ΠΎΠ»ΡŒ $pop = Net::POP3->new($mail_server); # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡΡŒ if ($pop->login($user, $password) > 0) {# Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡΡŒ my $numbers = $pop->list; # ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Π½ΠΎΠΌΠ΅Ρ€Π° писСм foreach my $numbers (keys %$numbers) {# ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ my $message = $pop->get($numbers); # ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ письмо print @$message; # ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽ Π΅Π³ΠΎ $pop->delete($numbers); # ΡƒΠ΄Π°Π»ΡΡŽ с сСрвСра } } $pop->quit; # ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡΡŒ


На сСрвСрах CPAN Π΅ΡΡ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с элСктронной ΠΏΠΎΡ‡Ρ‚ΠΎΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сСрвСры. На Perl написана свободно распространяСмая почтовая систСма с web-интСрфСйсом Open WebMail (openwebmail.org). На Π½Π΅ΠΌ ΠΆΠ΅ написана ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· самых извСстных ΠΈ эффСктивных сСрвСрных систСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ спама - SpamAssassin.

БистСмы ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями (instant messaging), ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΏΠ΅ΠΉΠ΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ распространСниС: ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ людСй Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ICQ, Jabber, AOL Instant Messenger ΠΈΠ»ΠΈ Yahoo!Messenger. Π’ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ… Π½Π° сайтС CPAN ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Perl-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со всСми этими систСмами. Π₯отя этот ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° взаимодСйствиС людСй, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ извСщСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ событии. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ сообщСниС с использованиСм ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями XMPP/Jabber (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Net::Jabber Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° CPAN). Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ послС соСдинСния с Jabber-сСрвСром отправляСтся сообщСниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π° послС получСния ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ:


use Net::Jabber; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ класс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Jabber use utf8; # Π² Jabber ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ UTF-8 my $server = 'jabber.shadrinsk-city.ru'; # сСрвСр my $port = 5222; # ΠΏΠΎΡ€Ρ‚ my $username = 'perl'; # ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ my $password = 'password'; # Π΅Π³ΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ my $resource = 'jud'; # рСсурс my $to_user = ' [email protected]'; # ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ my $client = new Net::Jabber::Client(); # создаСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° $client->SetCallBacks( # ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий: onconnect => \&on_connect, # ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ onauth => \&on_auth, # ΠΏΡ€ΠΈ рСгистрации message => \&on_message, # ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния ); $client->Execute( # соСдиняСмся с сСрвСром hostname=>$server, port=>$port, username=>$username, password=>$password, resource=>$resource, register=>1, connectsleep=>0, connectattempts=>1, ); # Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² on_message sub on_connect { # выполнится ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ сСрвСру print "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ $server:$port\n"; } sub on_auth { # выполнится ΠΏΡ€ΠΈ рСгистрации Π½Π° сСрвСрС print "ЗарСгистрирован ΠΊΠ°ΠΊ $username\n"; $client->MessageSend( # ΠžΠ’ΠŸΠ ΠΠ’Π›Π―Π•Πœ Π‘ΠžΠžΠ‘Π©Π•ΠΠ˜Π• to=> $to_user. '/' .$resource, subject=>'сообщСниС ΠΎΡ‚ Perl', body=>'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Jabber!' ); } sub on_message { # выполнится ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния my $sid = shift; # ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ ΠΈ тСкст my $message = shift; # ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ: print "Π’Π΅ΠΌΠ°:", $message->GetSubject(), "\n"; print "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅:", $message->GetBody(), "\n"; $client->Disconnect(); # ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ сСрвСра exit(0); # ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ }


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся ΠΏΡ€ΠΈΠ΅ΠΌ программирования, распространСнный ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ срСдС: главная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ бСсконСчный Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, для рСагирования Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями Jabber прСдоставляСт Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ срСдств для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ общСния, Π° Perl Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ.

Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Perl для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шлюзов ΠΌΠ΅ΠΆΠ΄Ρƒ IP-сСтями ΠΈ бСспроводными сСтями. На Perl написан свободно распространяСмый ΠΏΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΉ шлюз Sendpage (www.sendpage.org). Класс Net::SNPP занимаСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ сообщСний Π½Π° ΠΏΠ΅ΠΉΠ΄ΠΆΠ΅Ρ€ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ SNPP (Simple Network Paging Protocol), Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Net::SMS слуТит для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со слуТбой SMS-сообщСний для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² GSM-Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠ°Π»ΠΎ ΠΊΠΎΠ³ΠΎ удивляСт, Ρ‡Ρ‚ΠΎ вскорС послС появлСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° CPAN Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Perl-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ.

ΠšΡ€ΡƒΠΏΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΆΠΈΠ²Ρ‹ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌΠΎΠΌ: сСтСвоС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ - это Π΅Π΅ ΠΎΡ€Π³Π°Π½Ρ‹, Π° Π»ΠΈΠ½ΠΈΠΈ связи - Π½Π΅Ρ€Π²Π½Ρ‹Π΅ Π²ΠΎΠ»ΠΎΠΊΠ½Π°. Π‘Π΅Ρ‚ΡŒ Π΅ΠΆΠ΅ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎ мСняСт своС состояниС, Π΅Π΅ составныС части ΠΌΠΎΠ³ΡƒΡ‚ "Π±ΠΎΠ»Π΅Ρ‚ΡŒ" ΠΈ "ΠΎΡ‚ΠΌΠΈΡ€Π°Ρ‚ΡŒ", ΡΠ΅Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ "Π·Π°Π΄Ρ‹Ρ…Π°Ρ‚ΡŒΡΡ" ΠΎΡ‚ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ объСма ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (сСтСвого Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°). Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° состояния сСти, Π΅Π΅ обслуТивания ΠΈ диагностики нСисправностСй ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ слуТСбныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НСкоторыС ΠΈΠ· Π½ΠΈΡ… написаны Π½Π° языкС Perl. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях Perl примСняСтся для "склСивания" Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ систСму управлСния ΡΠ΅Ρ‚ΡŒΡŽ. Если Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Perl Π±Ρ‹Π» создан систСмным администратором, Ρ‚ΠΎ станСт понятным, ΠΏΠΎΡ‡Π΅ΠΌΡƒ имССтся Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ связанных с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ сСтями. Π’ качСствС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти стандартный класс Net::Ping, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ хоста ΠΏΠΎ Π΅Π³ΠΎ IP-адрСсу. Π’ ОБ MS Windows это дСлаСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:


perl -MNet::Ping -e"print Net::Ping->new()->ping('10.0.0.1')"


Π’ Π½Π΅ΠΉ запускаСтся компилятор perl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (-M) Net::Ping ΠΈ выполняСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (-e), Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. А Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ выводится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ обращСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ping класса Net::Ping с IP-адрСсом Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ адрСс хоста ΠΈ Π΄Π²Π΅ 1, Ссли хост Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, ΠΈΠ»ΠΈ Π΄Π²Π° 0, Ссли ΠΎΠ½ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ».

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ срСдства управлСния ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ сСтями основаны Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ SNMP (Simple Network Management Protocol), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP. Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ срСдства построСны ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ пСриодичСского опроса Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π°Π³Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° запросы ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡƒΡŽ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ сСти устройства - ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ собираСмой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (управляСмыС устройства ΠΈ ΠΈΡ… характСристики) ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈ числовыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Object IDentifier, OID), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ производитСлями устройств Π² соотвСтствии со стандартами описания "Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ" MIB (Management Information Base). ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ SNMP ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎ сСти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ с устройств, Π½ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этими устройствами, измСняя ΠΈΡ… характСристики. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SNMP ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ комплСксами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами ΠΈ Π‘Π£Π‘Π”. На Perl написаны ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ c SNMP-Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ. Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ сказанного ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π°Π³Π΅Π½Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ характСристики - описаниС систСмы ΠΈ врСмя Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹:


use Net::SNMP; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SNMP my ($session, $error) = Net::SNMP->session( # сСанс Ρ€Π°Π±ΠΎΡ‚Ρ‹ -hostname => '192.168.82.83', # с хостом, -community => 'public', # Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ -port => 161 # ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ ); defined($session) or die ("Ошибка сСанса SNMP: $error"); # Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎ # ΠΊΠΎΠ΄Ρƒ (OID) ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° MIB: info('1.3.6.1.2.1.1.1.0', 'sysDescr'); # описаниС систСмы info('1.3.6.1.2.1.1.3.0', 'sysUpTime'); # врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ $session->close(); # Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ сСанс sub info { # ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запроса ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ my ($OID, $caption) = @_; # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: ΠΊΠΎΠ΄ ΠΈ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° my $response = $session->get_request($OID); unless (defined($response)) { # Ссли всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ print 'Ошибка запроса: ', $session->error(); } else { # Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚: printf "$caption/$OID:\n\t%s\n", $response->{$OID}; } }


Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ОБ MS Windows Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация:


sysDescr/1.3.6.1.2.1.1.1.0: Hardware: x86 Family 6 Model 8 Stepping 6 AT/AT COMPATIBLE - Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free) sysUpTime/1.3.6.1.2.1.1.3.0: 1 hour, 05:14.11


Для отслСТивания состояния сСти имССтся ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ слоТности. Π‘Π±ΠΎΡ€ΠΎΠΌ ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ сСти ΠΈ Π΅Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ основанныС Π½Π° SNMP систСмы: Big Sister (bigsister.sourceforge.net), Cricket (cricket.sourceforge.net) ΠΈ MRTG (www.mrtg.org), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ свободно ΠΈ написаны Π½Π° языкС Perl.