监控服务器脚本:

将恶意攻击IP地址加入黑名单

1、分割日志

使用os.system 执行操作系统命令,使用重定向来分割日志

2.获取访问ip

读日志文件,获取访问ip记录,使用字符串.split来获取访问ip

3.将恶意攻击ip加入黑名单

把所有访问ip加入到list,判断次数,如果超过200,加入黑名单os.system('iptables -I INPUT 1-p tcp -s %s -j DROP'%)

4.每分钟执行一次

time.sleep(60)

5.循环

while true

time模块:

import time
time_now=time.strftime('%Y%m%d%H%M%S')
print(time_now)
import os, time

while True:
ip_list = [] # 存放所有ip的列表
src_log = '/opt/lampp/logs/access_log' # 源日志
new_log = '/opt/lampp/logs/access_log_%s' % time.strftime('%Y%m%d%H%M')
# 新日志的文件名
os.system('cat {s_log} > {n_log} && > {s_log}'.format(s_log=src_log, n_log=new_log)) # 分割每分钟的日志
with open(new_log) as fr: # 打开日志文件
for line in fr: # 循环文件每一行的内容
ip = line.split('-')[0].strip() # 分割字符串,获取ip地址
ip_list.append(ip) # 把所有的ip地址加入到iplist中
for ip in ip_list: # 再循环整个iplist
if ip_list.count(ip) > 20: # 判断ip出现次数是否大于2的加入黑名单
os.system('iptables -I INPUT 1 -p tcp -s %s -j DROP' % ip)
# 执行操行系统命令,把ip地址加入黑名单
for i in range(ip_list.count(ip)):
ip_list.remove(ip) # 从ip_list中把已经加入黑名单的ip全部删掉
time.sleep(60)

将监控服务器脚本做成一个功能函数,直接调用,入参是日志路径

#监控访问日志函数
import os, time
def log_agent(log_name):
while True:
ip_list = [] # 存放所有ip的列表
src_log = log_name # 源日志
new_log = '%s,%s'%(src_log) % time.strftime('%Y%m%d%H%M')
# 新日志的文件名
os.system('cat {s_log} > {n_log} && > {s_log}'.format(s_log=src_log, n_log=new_log)) # 分割每分钟的日志
with open(new_log) as fr: # 打开日志文件
for line in fr: # 循环文件每一行的内容
ip = line.split('-')[0].strip() # 分割字符串,获取ip地址
ip_list.append(ip) # 把所有的ip地址加入到iplist中
for ip in ip_list: # 再循环整个iplist
if ip_list.count(ip) > 20: # 判断ip出现次数是否大于2的加入黑名单
os.system('iptables -I INPUT 1 -p tcp -s %s -j DROP' % ip)
# 执行操行系统命令,把ip地址加入黑名单
for i in range(ip_list.count(ip)):
ip_list.remove(ip) # 从ip_list中把已经加入黑名单的ip全部删掉
time.sleep(60)
log_agen('日志路径')

监控服务器的脚本log_agent的更多相关文章

  1. shell编程-基础

    1.linux 下 Bash 程序开 1.1 怎样写 shell 脚本 1.使用编辑工具编辑shell 脚本,例如 vim,脚本名字一般用.sh 为后缀,不用.sh 为后缀 时编辑的内容为全黑,不会有 ...

  2. shell实现脚本监控服务器及web应用

    实际工作中我们需要知道部署在服务器上的应用有没有问题,但是人为的操作太麻烦有咩有简单的方式呢shell来监控我们服务器运行状态以及服务器上部署的应用,如果出现异常就会自动发送一个邮件给我们,开始搞起. ...

  3. Linux记录-shell实现脚本监控服务器及web应用

    1.apache web 服务器 1 2 3 4 5 6 7 8 9 10 !/bin/bash # 表示请求链接3秒钟,不要返回的测试数据 nc -w 3 localhost 80 &> ...

  4. python3小脚本-监控服务器性能并插入mysql数据库

    操作系统: centos版本 7.4 防火墙 关闭 selinux 关闭 python版本 3.6 mysql版本 5.7 #操作系统性能脚本 [root@localhost sql]# cat cp ...

  5. zabbix自定义脚本监控服务器端口状态

    zabbix可以通过客户端的[net.tcp.port[<ip>,port]]该item监控项来判断本地/远程服务器TCP端口是否正常,不过当时没有想起来,就用了自定义脚本去写的,很久没有 ...

  6. linux 监控服务器脚本

    #!/bin/bash ctime=`date +%x%T`monitor_dir=/home/jk/if [ ! -d $monitor_dir ]; then    mkdir $monitor_ ...

  7. PHP 监控服务器动态

    预期准备 一个139邮箱,收到邮件后,可以免费给你短信提醒.如果你不需要短信提醒功能,用什么邮箱都可以 另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网 ...

  8. 借助mosquitto“实时”远程监控服务器数据库运行状态

    公司的项目还处于开发阶段,我把整个后台服务临时放在阿里云上供前端测试,用的阿里云的ECS云服务器,HTTP请求服务器和数据库服务都安装在一台机子上(穷啊,凑合用),做测试用,配置相当低:单核1Gb.其 ...

  9. shell脚本实例-系统监控

    shell脚本监控网站并实现邮件.短信报警shell进程监控脚本(发送邮件报警)Shell脚本监控服务器在线状态和邮件报警的方法 http://www.jbxue.com/jb/shell/ 11. ...

随机推荐

  1. 分布式唯一ID生成器

    在应用程序中,经常需要全局唯一的ID作为数据库主键.如何生成全局唯一ID? 首先,需要确定全局唯一ID是整型还是字符串?如果是字符串,那么现有的UUID就完全满足需求,不需要额外的工作.缺点是字符串作 ...

  2. java 进销存管理 商户管理 库存管理 springmvc SSM 项目源码

    统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM 普 ...

  3. Nodejs的模块化

    Node.js中的模块化 好处: 复用性高,一次定义,多次使用 前端模块化 AMD AMD的实现需要使用 require.js CMD CMD的实现需要使用 sea.js [ 不更新 ] Common ...

  4. Install.php

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  5. MySQL的删除语句

    虽然现在数据库空间越来越大,但处理数据时候还是有要删除的时候,以下整理了一些最常用的删除语句. 分成两种 一个是删除指定数据,另一个删除所有数据. 一.删除指定数据 DELETE FROM 表名 WH ...

  6. 基于celery的任务管理

    1.celery基本原理 Celery是一个由python编写的简单.灵活.可靠的用来处理大量信息的分布式系统,同时提供了操作和维护分布式系统所需要的工具,说白了就是一个用来管理分布式队列的工具. C ...

  7. LightOJ 1289 LCM from 1 to n(位图标记+素数筛

    https://vjudge.net/contest/324284#problem/B 数学水题,其实就是想写下位图..和状压很像 题意:给n让求lcm(1,2,3,...,n),n<=1e8 ...

  8. CF dp 题(1500-2000难度)

    前言 从后往前刷 update 新增 \(\text{\color{red}{Mark}}\) 标记功能,有一定难度的题标记为 \(\text{\color{red}{红}}\) 色. 题单 (刷过的 ...

  9. Codeforces 512B: Fox And Jumping

    题目链接 题意说的是,有n种卡片,使用第i种卡片可以使当前自己在数轴上的位置移动 l[i],要获得使用第i种卡片的代价是 c[i],求能使自己移动到数轴上任意位置的最小代价,如果不可能则输出-1 当前 ...

  10. Django ormmodel模型字段参考文章

    Model 字段参考 (Model field reference)¶ 本文档包含所有 字段选项 (field options) 的内部细节和 Django 已经提供的 field types . 参 ...