В наше время, как сказал 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

Эксплоиты в десятку. Обзор самых интересных докладов с мировых ИБ-конференций

В последние годы мы отучились воспринимать Windows как нечто невероятно дырявое. Эта опера…