perl anyevent socket监控web日志server
#!/usr/bin/perl use warnings; use strict; use AnyEvent; use AnyEvent::DBI::MySQL; use Config::Tiny; use FindBin; use utf8; use Coro; use Coro::Socket; use Coro::Handle; use lib "$FindBin::Bin/../module"; my $server_config_file = "$FindBin::Bin/../etc/config.ini"; my $config = Config::Tiny->new; my $server_config = $config->read($server_config_file); my $server_log_info = $server_config->{'server_config_info'}; my $username = $server_log_info->{'username'}; my $password = $server_log_info->{'password'}; my $port = $server_log_info->{'server_port'}; my $host = $server_log_info->{'host'}; my $database = $server_log_info->{'database'}; my $server_ip = $server_log_info->{'server_ip'}; $|++; print "Start listening Port:$port", "\n"; my $s = Coro::Socket->new( LocalAddr => $server_ip, # 创建一个侦听socket LocalPort => $port, Listen => 5, Proto => 'tcp' ) or die $@; my @coro; while (1) { my ( $fh, $peername ) = $s->accept; next unless $peername; &doit($fh); } sub doit { my $dbh = AnyEvent::DBI::MySQL->connect( "dbi:mysql:database=$database", "$username", "$password" ); my $fh = shift; push @coro, async { $fh->autoflush(1); while ( my $line = $fh->readline() ) { log_regex_do( $line, $dbh ) } $fh->close; } } sub log_regex_do { my ( $log, $dbh, $cv ) = @_; my ( $log_type, $url, $source, $local, $date, $option, $offer, $user ) = $log =~ /t:(.*)\|me:(.*)\|so:(.*)\|lo:(.*)\|date:(.*)\|opt:(.*)\|of:(.*)\|u:(.*)$/; my $log_class = type_result( $log_type, $dbh, $cv ); if ( defined bool( $local, $user, $dbh ) ) { my ($log_result) = log_result( $url, $dbh ); if ($log_result) { get_result_db( $log_type, $log_result, $url, $source, $user, $date, $option, $offer, $dbh ); } } } sub type_result { my ( $method, $dbh ) = @_; my $cvs = AnyEvent->condvar; my $type; $dbh->do("set names utf8"); $dbh->selectall_hashref( "select * from w3a_log_monitor_type", 'id', sub { my ($ary_ref) = @_; for my $id ( keys %$ary_ref ) { $type = $ary_ref->{$id}->{'id'} if ( $method eq $ary_ref->{$id}->{'log_type_name'} ); } $cvs->send; } ); $cvs->recv; return $type; } sub bool { my ( $local, $user, $dbh ) = @_; my $cv = AnyEvent->condvar; my $count; # $dbh->do("set names utf8"); $dbh->selectcol_arrayref( "select * from w3a_log_monitor where task_name='$user' and task_url='$local'", sub { my ($ref_ary) = @_; $count = @$ref_ary; $cv->send; } ); $cv->recv; return $count; } sub get_result_db { my ( $type, $method_id, $method_url, $method_source, $method_user, $method_date, $method_option, $method_offer, $dbh ) = @_; my $cv = AnyEvent->condvar; my $sth = $dbh->prepare( " insert into w3a_log_monitor_attack ( method_name, method_url, attack_source, attack_user, attack_date, attack_option, attack_offer, log_type )values(?,?,?,?,?,?,?,?) " ); $sth->bind_param( 1, $method_id ); $sth->bind_param( 2, $method_url ); $sth->bind_param( 3, $method_source ); $sth->bind_param( 4, $method_user ); $sth->bind_param( 5, $method_date ); $sth->bind_param( 6, $method_option ); $sth->bind_param( 7, $method_offer ); $sth->bind_param( 8, $type ); $sth->execute( sub { my ($rv) = @_; $cv->send; } ); $cv->recv; } sub log_result { my ( $method, $dbh ) = @_; my $cv = AnyEvent->condvar; my $sum_dbh = $dbh; my @target_id; $dbh->do("set names utf8"); $dbh->selectall_hashref( "select * from w3a_log_method", 'id', sub { my ($ary_ref) = @_; for my $id ( keys %$ary_ref ) { $cv->begin; my $switch = $ary_ref->{$id}->{'method_switch'}; unless ( $switch == 0 ) { if ( $method =~ /$ary_ref->{$id}->{'method_regex'}/i ) { print "Match regular is: ", $ary_ref->{$id}->{'method_regex'}, "\n"; push @target_id, $ary_ref->{$id}->{'id'}; } } $cv->end; } } ); $cv->recv; attack_update( $_, $dbh ) for @target_id; return @target_id; } sub attack_update { my ( $id, $dbh ) = @_; my $cv = AnyEvent->condvar; $dbh->selectcol_arrayref( "select attack_sum from w3a_log_method where id='$id' ", sub { my ($ref_ary) = @_; my $sum = $ref_ary->[0] + 1; $dbh->do( "update w3a_log_method set attack_sum='$sum' where id='$id'"); $cv->send; } ); $cv->recv; }
使用方法如下:
1.服务端监控
2.客户端监控
3.进行XSS模拟
4.查看服务端状态
XSS之前的数据库查询状态
XSS之后的数据库查询状态
转载于:https://blog.51cto.com/mcshell/1362689
perl anyevent socket监控web日志server相关推荐
- perl anyevent socket监控web日志client
此脚本为client端的code,主要实现读取日志中的一些关键词进行过滤,以下介绍几个模块的用途: File::Tail 用于读取日志,功能类似于linux中tail ,只读取最新的日志 AnyEv ...
- 强大的Web日志分析工具_AWSTATS 应用实例
释义: AWStats在Sourceforge发展很快的一个基于Perl的WEB日志分析工具. 相对于另外一个非常优秀的开放源代码的日志分析工具Webalizer,AWStats的优势在于: 1.界面 ...
- 课时 12:可观测性-监控与日志(莫源)
本文主要分为四个部分: 在 K8s 中监控和日志的背景信息: 在 K8s 中监控方案的演进,以及常见的监控方案的提供: 日志采集的一些细节以及常见的日志的开源系统: 课程总结,介绍一下阿里云容器服务上 ...
- 从零开始入门 K8s | 可观测性:监控与日志
作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...
- k8s里面的项目怎么暴露端口让用户访问_从零开始入门 K8s | 可观测性:监控与日志...
作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...
- 《hadoop进阶》web日志系统 KPI指标的分析与实现
推广一下个人的微信公众号[搜索与推荐Wiki] 转载请注明出处: 转载自 Thinkgamer的CSDN博客:blog.csdn.net/gamer_gyt 代码下载地址:点击查看 1:Web日志分 ...
- zabbix监控Web界面
目录 zabbix监控web界面功能说明 zabbix监控配置流程 web界面模块说明 第三方邮箱网页配置告警 本地邮箱告警 结合grafana zabbix监控web界面功能说明 zabbix监控配 ...
- GoAccess - 可视化 Web 日志分析工具
GoAccess - 可视化 Web 日志分析工具. 官方地址: https://www.goaccess.cc/ 一 语法 goaccess [filename] [ options ... ] [ ...
- Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志
Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志 1. 查看集群资源状况 2. 监控集群资源利用率 3. 管理K8s组件日志 4. 管理K8s应用日志 1. 查看集群资源 ...
最新文章
- 体外反搏做_体外反搏治疗的原理
- 【数论】排列组合学习笔记
- Kong APIGW — 安装与配置
- mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
- 配合Opencv2.4.9,CMake3.12.1和VS2010在win10下构建项目踩坑记录
- 泛型类型(Generic Type)
- lua table remove元素的问题
- linux做蓝牙接收器,简单自制蓝牙接收器
- 股票证券交易系统架构分析与设计
- 计算机学院早操规定,宜宾学院早操管理规定
- 使用python计算与你投缘与无缘的生肖
- 大饼“U”形底?ETR开始
- 【51单片机】霹雳灯实验代码
- kaggle TMDB Box Office Prediction
- 苹果xr配置_5000元以内苹果手机推荐:11、XS、XSMax怎么选?
- 看《我的工科女友》感受
- 思科证书申请 CCNA CCNP CCIE
- 什么是auto?auto的作用?
- MATLAB时间序列2(ARIMA,季节性序列及其预报)------2019/8/14
- 《计算机图形学编程(使用OpenGL和C++)》
热门文章
- mysql 5.7 ssd_6T!阿里云MySQL 5.7 存储空间再刷新高
- 单片机全局有必要封装_C语言开发单片机为什么大多数都采用全局变量的形式?...
- matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件
- python里it n_Python3 round(x [,n]) 函数
- 3d打印主要的切片参数类型_3D打印机切片参数详情说明
- C语言编杂志程序,c语言程序错误修改
- 在MySQL查询山东省男生信息_MySQL-查询
- ecshop category.php?id=4,categoryall.php
- 元数据解决分表不可 mysql_MySQL InnoDB技术内幕:内存管理、事务和锁
- apache log4j入门