=()= / Говнокод #28304 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
#!/usr/bin/perl -w

# apt install  libdatetime-format-dateparse-perl libemail-sender-perl libemail-mime-perl
use warnings FATAL => 'all';
use strict;
use v5.28;
use utf8;

use Date::Parse;
use Date::Language;
use Date::Language::English;
use Socket;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP qw();
use Email::MIME;
use Encode;

use constant FROM_MAIL => '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="066b676f6a46766372736e286a6965676a">[email protected]</a>';
use constant TO_MAIL => 'postmaster';

# user->ip->error
my %errors;

my $dateLang = Date::Language->new('English');
my $yesterday = time() - 86400;
my %patterns = (
    "Ошибка аутентификаици"            => qr/.+Authentication failed for user (.+?)\. Attempt from IP address ([0-9.]+)\. (.+)$/,
    "Попытка отправки с чужого адреса" => qr/.+Message from authenticated user: <([<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="20410d5a0e60">[email protected]</a>]+)> was rejected, because sender identity was detected as spoofed. \(Source IP address: ([0-9.]+), (From header: <[<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="eec08fc394ae">[email protected]</a>]+?>).*/,
);

while (<>) {
    next unless m/^\[(.+)\](.+)/;
    my $time = $dateLang->str2time($1);
    next unless $time > $yesterday .. 0;
    my $message = $2;
    while ((my $error, my $regex) = each %patterns) {
        next unless $message =~ m/$regex/;
        $errors{$error}{$1}{$2}{$3} += 1;
    }
}

exit 0 if !%errors;

my @message;
while ((my $error, my $userIpLogTimes) = each %errors) {
    push @message, $error;
    while ((my $user, my $ipLogTimes) = each %$userIpLogTimes) {
        push @message, "\tПользователь $user";
        while ((my $ip, my $logTimes) = each %$ipLogTimes) {
            my $hostName = gethostbyaddr(inet_aton($ip), AF_INET) || $ip;
            push @message, "\t\tс IP $ip ($hostName)";
            while ((my $log, my $times) = each %$logTimes) {
                push @message, "\t\t\t$times раз: $log";
            }
        }
    }
}

my $email = Email::MIME->create(
    attributes => {
        content_type => "text/plain",
        charset      => "UTF-8",
    },
    header_str => [
        From    => FROM_MAIL,
        To      => [ TO_MAIL ],
        Subject =>  'Неудачи на почтовике за последние сутки',
    ],
    body       => encode('utf8', join "\n", @message));

sendmail(
    $email,
    {
        from      => FROM_MAIL,
        to        => TO_MAIL,
        transport => Email::Sender::Transport::SMTP->new({ host => 'localhost' })
    }
) || die 'Cant send';

Покритикуйте скрипт

Запостил: MAPTbIwKA MAPTbIwKA, (Updated )

Комментарии (13) RSS

  • вонючитй тупой ворпдресс на сраном пхп сломал чудесный окд на перле

    Вот так и дикари разрушали античные статуи...
    Ответить
    • С днём сисадмина тебя, кстати.
      Ответить
  • > usr

    Прыщебляди экономят на символах? Почему user не назвать папку?
    Ответить
  • Какие же даги тупые. Мужья не разрешают жёнам ездить на такси, где водитель - мужчина.
    Ответить
    • Оставлять своих жен с посторонними мущинами им запрещает шариат.
      Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8