1. Perl / Говнокод #28304

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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 => '[email protected]';
    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-z.@]+)> was rejected, because sender identity was detected as spoofed. \(Source IP address: ([0-9.]+), (From header: <[.a-z@]+?>).*/,
    );
    
    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, 29 Июля 2022

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

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

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

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

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