python分析nginx日志的ip,url,status
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,Python 脚本如下:#!/usr/bin/env python#_*_coding:utf-8 _*___author__ = 'lvnian'#!/usr/bin env python# cod
千家信息网最后更新 2025年01月21日python分析nginx日志的ip,url,status
Python 脚本如下:
#!/usr/bin/env python#_*_coding:utf-8 _*___author__ = 'lvnian'#!/usr/bin env python# coding: utf-8import MySQLdb as mysqlimport sys, osdb = mysql.connect(user="root",passwd="xxxxx@2015",db="intest",host="192.168.10.12") #数据库连接信息db.autocommit(True)cur = db.cursor()cur.execute('set names utf8')dict_list = {}with open('access.log') as logfin: for line in logfin: arr = line.split(' ') # 获取ip url 和status ip = arr[0] url = arr[6] status = arr[8] # ip url 和status当key,每次统计+1 dict_list[(ip,url,status)] = dict_list.get((ip,url,status),0)+1 # 转换成列表 ip_list = [(k[0],k[1],k[2],v) for k,v in dict_list.items()] # 按照统计数量排序,排序后保存到数据库。 for insert in sorted(ip_list,key=lambda x:x[3],reverse=True):#如果只想提取前十行的话可以[:10]即可。 print insert #测试用的,可以不要。整个功能是输出一行,然后保存到数据库。 sql = 'insert loginfo values ("%s","%s","%s","%s")' % insert print sql cur.execute(sql)
创建对应的表(在上一篇的基础之上)
python分析nginx日志的ip(来源)
use intest;show tables; CREATE TABLE `loginfo` ( `ip` text DEFAULT NULL, `url` longtext DEFAULT NULL, `status` varchar(200) DEFAULT NULL, `count_num` varchar(200) DEFAULT NULL);
脚本执行后数据库内看到的结果如下:
mysql> select * from loginfo where count_num >3 limit 5 ;+----------------+-----------------------+--------+-----------+| ip | url | status | count_num |+----------------+-----------------------+--------+-----------+| 121.42.0.85 | / | 200 | 39 || 121.42.0.37 | / | 403 | 34 || 121.42.0.39 | / | 403 | 34 || 222.95.248.220 | HTTP://www.baidu.com/ | 200 | 26 || 23.251.49.10 | www.baidu.com:443 | 400 | 21 |+----------------+-----------------------+--------+-----------+5 rows in set (0.00 sec)mysql>
添加一个时间字段脚本改为如下
#!/usr/bin/env python#_*_coding:utf-8 _*___author__ = 'lvnian'#!/usr/bin env python# coding: utf-8import MySQLdb as mysqlimport sys, os,timeimport datetimeaddtime = datetime.datetime.now()db = mysql.connect(user="root",passwd="xxxx@2015",db="intest",host="192.168.10.12") #数据库连接信息db.autocommit(True)cur = db.cursor()cur.execute('set names utf8')dict_list = {}with open('access.log') as logfin: for line in logfin: arr = line.split(' ') # 获取ip url 和status ip = arr[0] url = arr[6] status = arr[8] # ip url 和status当key,每次统计+1 dict_list[(ip,url,status)] = dict_list.get((ip,url,status),0)+1 # 转换成列表 ip_list = [(k[0],k[1],k[2],v,addtime) for k,v in dict_list.items()] # 按照统计数量排序,排序后保存到数据库。 for insert in sorted(ip_list,key=lambda x:x[3],reverse=True):#如果只想提取前十行的话可以[:10]即可。 print insert #测试用的,可以不要。整个功能是输出一行,然后保存到数据库。 sql = 'insert loginfo values ("%s","%s","%s","%s","%s")' % insert print sql cur.execute(sql)#到数据库输出查询如下123.125.160.217 这个ip经常乱***别的服务器曝光一下,如见此ip访问log,请直接拨打911
数据库修改
数据库增加一个字段 alter table loginfo add time datetime not Null; or重新建库 CREATE TABLE `loginfo` ( `ip` text, `url` longtext, `status` varchar(200) DEFAULT NULL, `count_num` varchar(200) DEFAULT NULL, `time` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据
数据库
排序
统计
脚本
输出
一行
信息
功能
字段
数量
utf-8
十行
测试
日志
分析
基础
时间
服务器
来源
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sati数据库
上海移动软件开发报价
修改数据库中密码
sql数据库合并行
社会软件开发热门话题
不能检索期刊论文的数据库
方舟为什么无法查询到服务器信息
今天服务器被攻击
政企网络安全管理
国家网络安全宣传周专题展板
三种主流app软件开发方式介绍
系统镜像无法连接服务器
2016网络安全立法研究
深圳市宝利康网络技术公司
微信小程序对接服务器
青海物流平台软件开发
甲骨文云服务器安全策略设置
软件开发破局
安徽工业软件开发公司
小程序可以挂在自家服务器上吗
arcgis数据库按县域分割
sql数据库数据量超出导出权限
高第网络技术(北京)有限公司
网络安全防护竞赛工作横道图
软件开发要多少工资待遇
数据库中的属性是指
昌平区推广软件开发要求
遂溪呼叫中心厂商软件开发
保山bim软件开发工程
入侵网站拿数据库违法吗