Perl для системного администрирования



              

Получение почты - часть 6


for (reverse @received){

chomp;

parseline($_J;

if (Idefined $ehelo and Idefined $validname and I defined $validip){ print "$_\n";

}

else { write;

> }

format STDOUT =

(«««« ««««« 5«««««««« 5«<««««««

$ehelo,$validname,Svalidip sub parseline { my $line = $_;

и "нормальный" -- от НЕЮ (REAL [IP])

if (/from\s+(\w\S+)\s-\((\S+)\s*\[(\d+V\d+V \d+\.\d+)/){

($ehelo.$validname,$validip) = ($1.$2. $3); >

невозможно выполнить обратное разыменование -- от

НЕЮ ([IP]) elsif (/from\s+(\w\S+)\s+\(\[(\d+V\d+\.\d+V \d+)\]/)!

(Sehelo,Svalidname,$validip) = ($1,undef, $2); }

ft exim -- из [IP] (helo=[HELO IP]) elsif

(/ from\s+\[(\d+\.\d+\.\d+\.\d+)\]\s+\(helo=\[(\dA.\d+\Ad+\.\d+)\]/){

($validip,$ehelo,$validname) = ($1,$2, undef); >

ft Sun Internet Mail Server -- из [IP] by HELD

elsif (/from\s+\[(\d+V\d+V\d+V\d+)\]\s+by\s+(\S+)/){

($validip,$ehelo,$validname) = ($1,$2, undef); }

ft Microsoft SMTPSVC -- из HELD - (IP) elsif

(/from\s+(\S+)\s+-\s+(\d+V\d+V\d+V\d+)\s+/){

($ehelo,$validname,$validip) = ($1,$2, $3); } else { ft punt!

$ehelo = Svalidname = $validip = undef; }

return [Sehelo,$validname,Svalidip]; }

Первым делом из сообщения выбираются (при помощи unf old()) заголовки

Received:. Метод unf old () удаляет из заданных строк символы новой строки и символы продолжения. Это делается для упрощения анализа.

Все строки просматриваются в обратном порядке (по сравнению с тем, как они были найдены в сообщении). По существу, движение идет от центра сообщения к периферии, т. к. каждая система, через которую оно проходило, добавляла еще один уровень заголовков Received:. Большая часть работы выполняется подпрограммой &parseline. Используя несколько регулярных выражений, попробуем выделить следующее из заголовков Received::

Имя узла HELO/EHLO

Имя, представленное в обмен на HELO или EHLO при SMTP-«беседе».

«Действительный» IP-адрес

IP-адрес клиента, замеченный агентом передачи почты во время соединения. Он, скорее всего, будет «действительным», поскольку




Содержание  Назад  Вперед