免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3633 | 回复: 15
打印 上一主题 下一主题

perl 程序请求帮忙! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-19 21:48 |只看该作者 |正序浏览
本帖最后由 robinylp 于 2011-04-20 17:27 编辑

#!/usr/bin/perl -w

use strict;
use Data::Dumper;

my @alerts;

my %prtrlinkios = (     "match" => qr/UPDOWN.*Port-channel.*down/,
                        "hosts" => ".*",
                        lifetime => 600
);

push(@alerts, \%prtrlinkios);



my %known;

#print Dumper(@alerts);
while(<STDIN>)
{
        my $zahl == 0;
        my $msg = $_;
        /^[^ ]+ +[^ ]+ +[^ ]+ +([^ ]+).* %(.+)$/;
        my $host = $1 || "";
        my $logline = $2 || $msg;
        for(my $i=0; $i<=$#alerts; $i++) {
                my $match = $alerts[$i]{"match"};
               my $hosts = $alerts[$i]{"hosts"};
                if ($logline =~ /$match/ and $host =~ /$hosts/) {
                        print "Got match!\n";
                        $zahl++;
                        if ($known{"$host:$logline"}) {
                                if ((int $known{"$host:$logline"}) < time()) {
                                        delete($known{"$host:$logline"});
                                } else {
                                        next;
                                }
                        }
                        $known{"$host:$logline"} = time() + $alerts[$i]{"lifetime"};
              open (FD, ">test.txt");
                        print FD "Logged:\n";
                        print FD $msg;
                        print FD "\n".$zahl;
                        close FD;
        }
}
我想要抓取由server发给我的udp包,并且中间有 UPDOWN.*Port-channel.*down 字段的,并进行计数,然后每10分钟输入test.txt文件中。

高手帮忙啊!

在此先谢谢了!

论坛徽章:
0
16 [报告]
发表于 2011-04-21 15:30 |只看该作者
已经有记录在test.txt文件中间了,但是计数的($zahl)还是没有解决,请帮忙看看,对于不同信息的计数都 ...
jason680 发表于 2011-04-21 11:42



   试了一下:

upupupup
Got match!
1upupupup
Got match!
2upupupup
Got match!
3down
Got match!
4down
Got match!
5down
Got match!
6



但是我的test.txt文档里面还是:

Logged:
Message: upupupup

Zahlen: 1
Logged:
Message: down

Zahlen: 4

2个本来都是3.

论坛徽章:
0
15 [报告]
发表于 2011-04-21 14:51 |只看该作者
谢谢 jason680!但是我想要对每个match分别的计数。是不是可以,我一只在想是不是用switch case,因为我有20多个不同的match。还在试试,好像perl没有switch case。

感谢感谢。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
14 [报告]
发表于 2011-04-21 11:42 |只看该作者
#!/usr/bin/perl -w

use strict;
use Data:umper;

my @alerts;

my %prtrlinkios = (     "matc ...
robinylp 发表于 2011-04-20 22:39


已经有记录在test.txt文件中间了,但是计数的($zahl)还是没有解决,请帮忙看看,对于不同信息的计数都是错的。是不是 my $zahl = 0; 的位置有问题,应该放在哪里啊?


打印$zahl没看到有什么问​​题....
你的想法错了...
                       print "Got match!\n";
                        $zahl++;
                        print "$zahl\n";

$ perl get_count.pl
upupupup
Got match!
1
upupupup
Got match!
2
upupupup
Got match!
3
down
Got match!
4
down
Got match!
5
down
Got match!
6
down
Got match!
7
down
Got match!
8

论坛徽章:
0
13 [报告]
发表于 2011-04-20 22:39 |只看该作者
本帖最后由 robinylp 于 2011-04-20 23:05 编辑

#!/usr/bin/perl -w

use strict;
use Data::Dumper;

my @alerts;

my %prtrlinkios = (     "match" => qr/UPDOWN.*Port-channel.*down/,
                        "hosts" => ".*",
                        lifetime => 600
);

push(@alerts, \%prtrlinkios);

my %prtest = (     "match" => qr/down/,
                        "hosts" => ".*",
                        lifetime => 600
);

push(@alerts, \%prtest);

my %uptest = (     "match" => qr/upupupup/,
                        "hosts" => ".*",
                        lifetime => 600
);

push(@alerts, \%uptest);


my %known;

my $zahl = 0;
#print Dumper(@alerts);
while(<STDIN>)
{
        my $msg = $_;
        /^[^ ]+ +[^ ]+ +[^ ]+ +([^ ]+).* %(.+)$/;
        my $host = $1 || "";
        my $logline = $2 || $msg;
        for(my $i=0; $i<=$#alerts; $i++) {
                my $match = $alerts[$i]{"match"};
                my $hosts = $alerts[$i]{"hosts"};
                if ($logline =~ /$match/ and $host =~ /$hosts/) {
                        print "Got match!\n";
                        $zahl++;
                        if ($known{"$host:$logline"}) {
                                if ((int $known{"$host:$logline"}) < time()) {
                                        delete($known{"$host:$logline"});
                                } else {
                                        next;
                                }
                        }
                        $known{"$host:$logline"} = time() + $alerts[$i]{"lifetime"};
                        open (FD, ">>test.txt");
                        print FD "Logged:\n";
                        print FD "Message: $msg\n";
                        print FD "Count: $zahl\n";
                        close FD;
        }
}
}

已经有记录在test.txt文件中间了,但是计数的($zahl)还是没有解决,请帮忙看看,对于不同信息的计数都是错的。是不是 my $zahl = 0; 的位置有问题,应该放在哪里啊?


打入;
upupupup
Got match!
upupupup
Got match!
upupupup
Got match!
down
Got match!
down
Got match!
down
Got match!
down
Got match!
down
Got match!

test.txt输出:

Logged:
Message: upupupup

Count: 1
Logged:
Message: down

Count: 4

计数错误!

论坛徽章:
0
12 [报告]
发表于 2011-04-20 20:31 |只看该作者
本帖最后由 robinylp 于 2011-04-20 20:32 编辑
看得头晕。
2gua 发表于 2011-04-20 20:20



    我知道啊,我只是一个搞网络的,没有想到啊,现在变成网络分析了,还编程了!

所以到这里来求助啊!

各位大侠帮忙啊!

在此先拜谢了!

论坛徽章:
0
11 [报告]
发表于 2011-04-20 20:20 |只看该作者
看得头晕。

论坛徽章:
0
10 [报告]
发表于 2011-04-20 20:05 |只看该作者
其实我在写一个系统消息过滤程序,并且进行统计。

程序实现:收集网络设备发过来的消息,进行分类(端口出错,IP 包被丢弃等),然后进行统计,如在10分钟内有多少条端口出错信息。。。

程序沿用前一个人做的网络信息通过email向admin发送消息这个程序。

论坛徽章:
0
9 [报告]
发表于 2011-04-20 19:45 |只看该作者
本帖最后由 robinylp 于 2011-04-20 22:57 编辑
这个没实现,其实我一直不明白你是让看什么的
zhlong8 发表于 2011-04-20 18:48



    请问一下,这个每10分钟怎么实现(不是用这个lifetime=>600来实现的吗?)? 并且这个程序能不能抓到包。 并且这个计数($zahl)可以这样写吗?

先谢了!

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2011-04-20 18:48 |只看该作者
每10分钟输入test.txt文件中。

这个没实现,其实我一直不明白你是让看什么的
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP