Кабинет
1. Практически резюме
2. Quest игры
3. Joomla!
  · Joomla! LocalLinker
4. Мои работы
  · Low-traffic KharkovForum.com
  · Краситель таблиц
  · Http-лог Eserv
  · Спам-фильтр под Eserv
  · Удаление архивов видеонаблюдения
  · Конвертор расходных документов
  · Перевод LJ moods
  · Логотипы IDO group
  · Переводчик транслита
  · Переводчик дат
5. HTML в BBC
6. Это я люблю (± 100)
7. Страница памяти
Последние новости
 17.05.10 Вернулись из путешествия по Средней Азии! Киргизстан (Бишкек, Ош, Иссык-Куль) - Узбекистан (Ташкент, Хива, Бухара, Самарканд) - Та... »»
Поиск

Вид из окна
Турция. Автостопом в реанимационной машине
Быстрый переход
Московский туроператор предлагает индивидуальные туры европа Антикризисные цены!
По доступной цене: шторы рулонные Киев.
Недвижимость чехия
Полезно
Достопримечательности Украины Система Orphus
Статистика
Rambler's Top100
      Прихожая    Гостиная    Кабинет    Библиотека    Детская    Выход
Спам-фильтр  

<!-- о скрипте -->

Это скрипт спам-фильтра под Eserv. Он очень прост, иногда банит нормальные письма, но в 95% работает правильно и свою главную задачу выполняет - недает спаму и вирусам расползаться "по офису".


Суть работы:
  1. Скрипт берет файл с письмом из одной директории, проверяет его на наличие словосочетаний (по файлу $smapmerz), если находит - меняет адрес получателя и добавлет в тему спец. знак ($spammark).
  2. Затем перекладывает письмо в другую папку, для разбора его уже непоследстванно Eserv тоссером.
  3. Попутно он также ведет лог (файл - MMDDspam.log) всех обработанных им писем, от кого они были, какого размера и по какому условию признаны спамом.

Исходный код:
#!/usr/local/bin/perl

$smapmerz="spamerz.txt"; # файл спамеров
$spammark=".:~:."; # отметка спамерского письма
$to_check_dir="D:/Eserv2/mail/spool/to_check";# директория к проверке
$spool_dir="D:/Eserv2/mail/spool";# директория к проверке
$log_dir="D:/Eserv2/log";# директория лог файла
$fstr=150; # в скольки первых строках проверять.
$i=$ii=$j=$size=0;
$month_num='';
$subjtext='';
$returnmess='';
@mid_en=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

open (FILE, "$smapmerz") || die "Can't open file $smapmerz: \n $! \nand\n $^E";
 chomp(@line=);
close (FILE);

opendir (DIR, "$to_check_dir") || die "couldn't open $to_check_dir : $!\n";
 while ( defined ($file[$ii]=readdir DIR)) {
  $delpos=$subjpos=0;$spam='no';$reason='';
  if ($file[$ii]=~ /POP3|LOCAL/ && -f "$to_check_dir/$file[$ii]") {
   open (MESS, "<$to_check_dir/$file[$ii]") || die "Can't open file {+} 
   {+} $to_check_dir/$file[$i] : \n $! \nand\n $^E";
    @message=;
   close (MESS);
   $fstr=$#message; 
   for ($i=0;$i<$fstr;$i++) {
    if ($message[$i]=~ /For: /i && $delpos==0) {
     $delpos=$i;
     $to_adr=$';
    }
    if ($message[$i]=~ /(Subject:)/i) {
     $subjpos=$i;
     $subjtext=$';
     if ($subjtext eq '') { # тему письма надо заполнять иначе буду считать спамом
      $spam='yes'; 
     }
    }
    if ($message[$i]=~ /Return-Path: /i) {
     $return=$';
    }
    if ($message[$i]=~ /Received: /i) {
     ($domain)=$message[$i]=~ /\.([a-zA-z1-9]*\.(?:com|ru|net|org|edu|ua))/;
    }

    for ($j=0;$j<$#line;$j++) {
     if ($spam eq 'no') {
      if ($message[$i]=~ /$line[$j]/i) {
       $spam='yes';
       $reason=$line[$j];
      }
     }
    }
   }
   $now=scalar(localtime);
   &SplitTime($now);
   GetMonthEnNumber($now{"month_now"});
   my $day_now;
   if ($now{"day_now"}<10) { $day_now="0".$now{"day_now"}; }
   else  { $day_now=$now{"day_now"}; }
   $tt=$now{"hour_now"}.":".$now{"minute_now"}.":".$now{"second_now"};
   $flog=$month_num. $day_now."spam.log";
   if ($spam eq 'yes') {
    $message[$delpos]="For: spam\@shanglipharma\.com\n";
    $message[$subjpos]="Subject: $spammark ".$subjtext;
    $logmess=";SPAM;";
    $filename="";
    my ($temp);
    $temp=int(rand(100));
    $filename="admin\@shanglipharma.com!".$now{"day_now"}."-".$now{"day_now"}. {+}
	{+} "-02-".$now{"hour_now"}."-".$now{"minute_now"}."-".$now{"second_now"}. {+}
	{+} "!".$temp."!LOCAL!.eml";
   } else {
    $logmess=";    ;";
    $reason=chomp($to_adr);
    $reason='';
   }   
   open (FILE, ">>$spool_dir/$file[$ii]") || die "Can't open file {+} 
   {+} $to_check_dir/$file[$i] : \n $! \nand\n $^E";
    for ($k=0;$k<=$fstr;$k++) {
     print FILE "$message[$k]";
    }
   close (FILE);
   $size=(-s "$to_check_dir/$file[$ii]");
   unlink("$to_check_dir/$file[$ii]");
   open (FILE, ">>$log_dir/$flog") || die "Can't open file $to_check_dir/$file[$i] {+} 
   {+} : \n $! \nand\n $^E";
    print FILE "$tt$logmess$file[$ii];$reason;$size;\n";
   close (FILE);
  }
 }
closedir (DIR);

sub SplitTime { # Делаем из даты хеш
 $now=~ s/  / /g; # Убираем двойные пробелы
 $now=~ s/ /:/g; # Заменяем пробелы на двоеточия
 @now=split(/:/,$now);
 $now{"week_now"}=$now[0];
 $now{"month_now"}=$now[1];
 $now{"day_now"}=$now[2];
 $now{"hour_now"}=$now[3];
 $now{"minute_now"}=$now[4];
 $now{"second_now"}=$now[5];
 $now{"year_now"}=$now[6];
}

sub GetMonthEnNumber {
 foreach $i (0 .. $#mid_en){
  if ($_[0] eq $mid_en[$i]){$month_num=$i+1;};
 };
 if ($month_num<10) {$month_num = "0$month_num";};
 return $month_num;
}

Содержание файла spamerz.txt (выборка):
Проверка производится рег. выражением, поэтому в файле можно их использовать.
...
\.exe
\sgirls
webcam
\.pif
American Language
technet-online.com
xxxletter.com
\sadult
778-9894
163.com
dailyforyourinformation.com
dailyforyourinformation.net
dailyforyourinfo.com
dailyforyourinfo.net
dailyf-y-i.com
dailyf-y-i.net
dlyfyinfo.com
dlyfyinfo.net
dlyforyi.com
dlyforyi.net
dlyfyi.com
CLICK HERE!
prodigy.net
mailcity.com
www.tochki.net
...

Содержание файла 0310sapm.log (выборка):
$ следует понимать как @
...
12:15:00;    ;admin$shanglipharma.com!1!10-03-03-12-11-33!LOCAL!.eml;;7101;
12:15:00;SPAM;Rosanna.Battson$waterdropz.com!POP3!898835!1;sklad$shanglipharma.com;1989;
12:15:01;    ;ejdwbyi$public.mtu.ru!POP3!898910!2;;19596;
12:15:01;    ;pldbyg$mail.ru!POP3!899005!4;;9047;
12:15:01;SPAM;bounce$freesmut4u.com!POP3!899025!5;\sadult;12822;
12:15:02;SPAM;brenda$fyispecials.com!POP3!899160!6;fyispecials.com;4733;
12:15:02;SPAM;bill$fyispecials.com!POP3!899205!7;fyispecials.com;2083;
12:15:02;SPAM;editoruexihav$033909.freepass.com!POP3!899240!8;freepass.com;11061;
12:15:06;SPAM;bill$fyispecials.com!POP3!899561!10;fyispecials.com;2224;
12:15:06;    ;fwp$a-teleport.com!POP3!899586!11;;1461;
12:15:06;SPAM;MDarrah$antispring.com!POP3!899610!12;sklad$shanglipharma.com;1980;
12:15:07;    ;ys$fdcexport.com!POP3!899720!16;;2713;
12:15:08;    ;exports$afdil.com!POP3!899749!17;;2952;
13:10:01;SPAM;null$maillist.ru!POP3!4185050!1;\.exe;26794;
13:45:00;    ;rs$fdcexport.com!POP3!6327545!1;;2658;
13:50:00;SPAM;pev$mail.zp.ua!POP3!6514446!1;\.exe;71706;
14:00:00;    ;pawan$shanglipharma.com!5!10-03-03-13-55-41!LOCAL!.eml;;2719;
17:35:00;SPAM;gxaotxf$yahoo.com!POP3!20267030!1;American Language;16927;
17:55:00;SPAM;bounce$freesmut4u.com!POP3!21458815!1;\sadult;10720;
18:15:02;    ;utt$ic.kharkov.ua!POP3!22543910!2;;56069;
18:30:00;SPAM;Winnifred.Other$waterdropz.com!POP3!23544945!1;sklad$shanglipharma.com;3449;
18:55:00;SPAM;brenda$fyispecials.com!POP3!24975191!1;fyispecials.com;2418;
19:10:03;SPAM;yqfvsud$geocities.com!POP3!25692750!1;American Language;7893;
19:20:01;    ;pawan$shanglipharma.com!6!10-03-03-19-11-32!LOCAL!.eml;;1669;
19:50:00;SPAM;editorcjprjyvk$033910.freepass.com!POP3!27959560!1;freepass.com;11786;
21:00:00;SPAM;CollegeCourses$t-back.com!POP3!32189830!1;emailbucks.com;13029;
22:10:00;SPAM;bill$fyispecials.com!POP3!36360235!1;fyispecials.com;4886;

Что дальше?
  1. Делаете пересылку с адреса spam@qwerty.com на адрес вашего сис. админа (если он у вас есть).
  2. Ставите в Outlook'е правило удалять/перемещать в спец. папку письма содержащие отметку $spammark в теме. Я предпочитаю их перемещать и еще раз быстро просматривать перед удалением. Если что всегда можно достать письмо и переслать его по нужному адресу. Иногда я еще жалуюсь на спамеров админам free-web-mail'ов и часто они удаляют ящики соответствующим пользователям.
<!-- примечание -->
  1. Знак {+} означает что вы должны соединить эту и следующую строки в одну без пробелов.
  2. Где взять Eserv? http://www.eserv.ru
  3. Как организовать складирование приходящей почты в папку to_check? Спрашивайте на форуме разработчиков Eserv'a.
<!-- спасибо! -->
: BBCode
: HTML


<!-- внимание! -->
  • Код, текст и фотографии размещенные на этом сайте принадлежат их автору - Сапронову Артёму Александровичу.
  • Допускается использование материалов сайта в личных целях.
  • Приветствуется распространение с обязательным указанием активной гиперссылки на страницу, с которой взят материал.
  • Запрещается внесение изменений в исходный текст (в том числе синонимизация и рерайт).
  • Использование материалов сайта в коммерческих целях без согласования с автором запрещено.
  • Обращайте внимание на даты. Некоторые страницы морально устарели.
  • Автор не несет отвественности за любые возможные последствия связанные с использованием материалов сайта.
  • С предложениями, замечаниями или пожеланиями обращайтесь по email.

© 14.01.2003 Артем Сапронов
http://www.sapronov.com

Http-лог Eserv ↑↓  ← Ctrl →  Удаление архивов видеонаблюдения 
Лучше весь век учиться, нежели пребыть незнающим.
[ ЕКАТЕРИНА II ]