gpt4 book ai didi

linux - 减少日志文件搜索的重复输出的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:47 25 4
gpt4 key购买 nike

自从我重新开始编程以来,这个网站帮了我很大的忙,我正在尝试编写一个简单的 perl 脚本,该脚本将从一个目录(多个域)中分析 apache 日志文件,提取每个文件的最后 1000 行日志文件,从日志文件中剥离 IP 地址,然后将它们与已知的 bot 垃圾邮件发送者阻止列表进行比较。

到目前为止,除了一个问题外,我的脚本已经可以正常工作了。假设我在两个日志文件中有 IP 地址 10.128.45.5,脚本当然会依次分析每个日志文件,将 IP 剥离并减少到一个 PER 日志文件,但我想要做的是将其缩小到更多每个实例一个 我运行这个脚本,不管同一个 IP 是否出现在多个日志文件中。

这是我目前得到的代码,如果有点乱,请见谅。

#!/usr/bin/perl

# Extract IP's from apache access logs for the last hour and matches with forum spam bot list.
# The fun work of Daniel Pearson

use strict;
use warnings;
use Socket;

# Declarations
my ($file,$list,@files,%ips,$match,$path,$sort);
my $timestamp = localtime(time);

# Check to see if matching file exists
$list ='list';

if (-e $list) {
Delete the file so we can download a new one if it exists
print "File Exists!";
print "Deleting File $list\n";
unlink($list);
}
sleep(5);

system ("wget http://www.domain.com/list");
sleep(5);

my $dir = $ARGV[0] or die "Need to specify the log file directory\n";

opendir(DIR, "$dir");
@files = grep(/\.*$/,readdir(DIR));
closedir(DIR);

foreach my $file(@files) {
my $sum = 0;
if (-d $file) {
print "Skipping Directory $file\n";
}
else {

$path = "$dir$file";
open my $path, "-|", "/usr/bin/tail", "-1000", "$path" or die "could not start tail on $path: $!";

my %ips;


while (my $line = <$path>) {
chomp $line;
if ($line =~ m/(?!0+\.0+\.0+\.0+$)(([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5]))/g) {

my $ip = $1;

$ips{$ip} = $ip;
}
}
}

foreach my $key (sort keys %ips) {
open ("files","$list");
while (my $sort = <files>) {
chomp $sort;
if ($key =~ $sort) {
open my $fh, '>>', 'banned.out';
print "Match Found we need to block it $key\n";
print $fh "$key:$timestamp\n";
close $fh;
}
}
}
}

如有任何建议,我将不胜感激。

最佳答案

完成任务:

  • 移动my %ips在(之上)foreach my $file (@files) 之外循环。

  • 移动foreach my $key ( sort keys %ips )在(下方)foreach my $file (@files) 之外循环。

关于linux - 减少日志文件搜索的重复输出的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com