В наше время, как сказал Sintez в предновогоднем номере X, каждый человек должен иметь 7 вещей. Одна из первых - это мобила 🙂 У кого сей нет (или они не хотят порекомендовать эту статью друзьям) - могут пропустить эту статью - сей материал будет для них бесполезен.

Сегодня мы опять вернемся к закладке IRC->eggdrop->scripting 🙂 По моему личному мнению, язык tcl (Tool
Сommand Language) - слишком громоздкий язык. Конечно же, он уступает perl (ни для кого не секрет, что это мой любимый язык). Но... как известно, разработчики eggdrop-бота, не согласны с моим мнением, поэтому постараемся изучить, как tcl, так и perl 😉

Итак, что же мы сегодня будем писАть? И почему для, казалось бы другой "оперы", нам понадобиться мобила? (ты конечно, можешь и не использовать мобилу - отправляя почту с обычного ящика - опять же забегаю вперед - дальше ты все сам поймешь).
Механизм действия скрипта такой: ты, скучая в универе (в школе, в баре за кружкой пива - нужное подчеркнуть) решил поделиться с корешами по IRC - чем ты в данный момент занят =) У большинства операторов сети, стандарта GSM, есть услуга - отправка SMS-сообщений на e-mail. Если у тебя такой оператор - то возможно следующее: твое сообщение, попадая на определенный ящик, и состоящим из первого слова "IRC" - может попасть в IRC (его скажет бот от твоего имени, сообщая всем, чем ты занят). Сейчас я научу тебя писать такой скрипт. Точнее - 2 скрипта:

1. checker.pl - проверка новых сообщений на e-mail
2. sms.tcl - передача сообщения в IRC через бота

1. Perl`овка

Описываю скрипт checker.pl (с комментариями), который будет коннектиться к твоему ящику и проверять наличие новых сообщений. Внимание! Данный скрипт
рассчитан на стягивание одного сообщения (поэтому рекомендую зарегистрировать отдельный ящик для SMS).

#!/usr/bin/perl

### POP3 checker v1.0 by Forb <forb@kamensk.ru>
## Трейдмарк - можешь убрать, я не обижусь 🙂

### Uses modules
use IO::Socket;
## Подключаем IO::Socket

### MAIN variables ###
$positive='\+OK';
$negative='-ERR';
## Строки ответа pop3d (как правило такие)
$server='mail.ru';
$port=110;
$user='vasya';
$password='forSMS';
## Данные, для соединения с pop3-сервером
$success='/home/vasya/eggdrop/scripts/mail.txt';
## Полный путь к файлу, куда будет скидываться SMS (из ящика)

### Main part of script
&sock($user,$password);
## Вызываем коннект к серверу

sub sock {
my($banner,$socket);
my($user,$passwd)=@_;
## Объявляем локальный переменные и параметры процедуры
$socket=IO::Socket::INET->new( PeerAddr => $server,
PeerPort => $port,
Proto => tcp)
or return -1;
$socket->autoflush(1);
## Создаем сокет и отрубаем буферизацию
chomp($banner=<$socket>);
print $socket "USER $user\n";
chomp($banner=<$socket>);
print $socket "PASS $passwd\n";
chomp($banner=<$socket>);
$banner=~s/\r//g;
## Логинимся на сервер, и очищаем ответ от символа возврата каретки
print $socket "LIST\n";
chomp($banner=<$socket>);
$banner=~s/\r//g;
while ($banner ne '.') {
chomp($banner=<$socket>);
$banner=~s/\r//g;
push(@banners,$banner);
}
## Получаем данные о новых сообщениях
$string=$banners[scalar(@banners)-2];
## Берем последний номер сообщения
($num,$size)=split ' ',$string;
chomp($size);
$num=~s/\r//g;
if ($num == 0) { exit }
## Если номер=0 - выходим
if ($size < 1000) {
print $socket "RETR $num\n";
chomp($banner=<$socket>);
$banner=~s/\r//g;
## Если сообщение не превышает 1кб - стягиваем его и очищаем ответ от символа возврата каретки
while ($banner ne '.') {
chomp($banner=<$socket>);
$banner=~s/\r//g;
push(@banner2,$banner);
}
$message=$banner2[scalar(@banner2)-2];
## Выделяем сообщение
open (FILES,">$success") || die print "cant open\n";
## Открываем файл на запись
if ($message=~/^IRC /i) {
print FILES "$message\n"
} else {
print FILES "empty\n"
}
## Если сообщение начинается с "IRC" - пишем его в файл, иначе пишем
"empty"

close(FILES);
print $socket "DELE $num\n";
print $socket "QUIT\n";
close($socket);
## Закрываем файл, удаляем сообщение и закрываем сокет
}
}

Итак, что мы имеем? Perl-скрипт снимет новое сообщение, если оно содержит IRC, или напишет в файл empty в противном случае. Но вручную его запускать никто не будет, поэтому воспользуемся crontab. Пусть он запускается через каждые 10 минут. 

Пишем на твоем шелле команду: "crontab -e", затем нажимаем "i" (вставка), и набираем следующее:

0,10,20,30,40,50 * * * * /home/vasya/eggdrop/scripts/checker.pl 2>&1

(разумеется с правильным путем к скрипту).

И выходим с сохранением (ESC, ":wq" (без кавычек),
Enter). Теперь, скрипт будет запускаться автоматически, через каждые 10 минут.

Продолжение - завтра.

Check Also

Блиц-интервью: Алексей Лукацкий о построении защиты, «Гидре» и формуле взлома

Алексей Лукацкий — именитый эксперт в области ИБ, а также владелец самой узнаваемой шляпы …

Оставить мнение