700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python基于nginx访问日志并统计IP访问量

Python基于nginx访问日志并统计IP访问量

时间:2019-01-19 23:17:51

相关推荐

Python基于nginx访问日志并统计IP访问量

如果想看看Nginx有多少IP访问量,有哪些国家访问,并显示IP地址的归属地分布,python可以结合使用高春辉老师【免费版 IP 地址数据库】,Shell可以使用nali,我这边主要使用python语言来实现需求,并将查询结果以邮件形式发送,也是为了学习和回顾python语言。很感谢高春辉老师提供的免费版IP地址数据库。

一、Ningx日志如下:

41.42.97.104--[26/Feb/:03:35:40-0500]"GET/root/HTTP/1.1"30120"/09""Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/40.0.2214.115Safari/537.36"-0.56241.42.97.104--[26/Feb/:03:35:41-0500]"GET/crossadkla.xmlHTTP/1.1"3040"/""Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/40.0.2214.115Safari/537.36"-0.00099.122.189.203--[26/Feb/:03:35:42-0500]"GET/root/HTTP/1.1"30120"/11""Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/40.0.2214.115Safari/537.36"-0.56299.122.189.203--[26/Feb/:03:35:44-0500]"GET/crossadkla.xmlHTTP/1.1"3040"/""Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/40.0.2214.115Safari/537.36"-0.00099.122.189.203--[26/Feb/:03:35:44-0500]"GET/crossadkla.xmlHTTP/1.1"3040"/""Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/40.0.2214.115Safari/537.36"-0.000

二、下载免费版 IP 地址数据库

#wget/17mon/17monipdb.zip#unzip17monipdb.zip

三、IP库常见问题FAQ

示例代码:

importosfromipipimportIPfromipipimportIPXIP.load(os.path.abspath("mydata4vipday2.dat"))printIP.find("118.28.8.8")IPX.load(os.path.abspath("mydata4vipday2.datx"))printIPX.find("118.28.8.8")

执行输出:

中国天津天津鹏博士中国天津天津鹏博士39.128399117.185112Asia/ShanghaiUTC+8120000

IP库guihub地址:/17mon/python

四、Python 统计代码

#encoding=utf8importre,sys,os,csv,smtplibfromipipimportIPfromipipimportIPXfromemailimportencodersfromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportMIMEBasefromemail.mime.textimportMIMETextfromoptparseimportOptionParserreload(sys)sys.setdefaultencoding('utf-8')printsys.getdefaultencoding()nginx_log_path="/app/nginx/logs/apptest_www.access.log"pattern=pile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')defstat_ip_views(log_path):ret={}f=open(log_path,"r")forlineinf:match=pattern.match(line)ifmatch:ip=match.group(0)ifipinret:views=ret[ip]else:views=0views=views+1ret[ip]=viewsreturnretdefrun():ip_views=stat_ip_views(nginx_log_path)max_ip_view={}fileName='out.csv'f=open('out.csv','w+')b='IP,国家,访问数总数'print>>f,bforipinip_views:IP.load(os.path.abspath("17monipdb.dat"))count=IP.find("%s"%(ip))conut_s=count.split()countery=conut_s[0]views=ip_views[ip]c='%s,%s,%s'%(ip,countery,views)print>>f,ciflen(max_ip_view)==0:max_ip_view[ip]=viewselse:_ip=max_ip_view.keys()[0]_views=max_ip_view[_ip]ifviews>_views:max_ip_view[ip]=viewsmax_ip_view.pop(_ip)print"IP:",ip,"国家:",countery,"访问数:",viewsprint"总共有多少IP:",len(ip_views)print"最大访问IP数:",max_ip_viewg=""d='总共有多少IP:%s'%(len(ip_views))e='最大访问IP数:%s'%(max_ip_view)print>>f,gprint>>f,dprint>>f,edefsendMail(html,emailaddress,mailSubject,from_address="other@"):mail_list=emailaddress.split(",")msg=MIMEMultipart()msg['Accept-Language']='zh-CN'msg['Accept-Charset']='ISO-8859-1,utf-8'msg['From']=from_addressmsg['to']=";".join(mail_list)msg['Subject']=mailSubject.decode("utf-8")txt=MIMEText(html,'html','utf-8')txt.set_charset('utf-8')msg.attach(txt)file=MIMEBase('application','octet-stream')file.set_payload(open(fileName,'rb').read())encoders.encode_base64(file)file.add_header('Content-Disposition','p_w_upload;filename="%s"'%os.path.basename(fileName))msg.attach(file)smtp=smtplib.SMTP("")smtp.sendmail(msg["From"],mail_list,msg.as_string())smtp.close()if__name__=='__main__':run()fileName='out.csv'cmd='iconv-fUTF8-tGB18030%s-o%s.bak&&mv%s.bak%s'%(fileName,fileName,fileName,fileName)os.system(cmd)Content='DearALL:<br>&nbsp;&nbsp;附件内国家IP访问数据分析统计,请查收!<br>&nbsp;&nbsp;如有任何问题,请及时与我联系!'Subject='[分析]国家创建数据IP分析统计'sendMail(html=Content,emailaddress='kuangl@',mailSubject=Subject)

五、执行结果

utf-8IP:41.42.97.104国家:埃及访问数:2IP:99.122.189.203国家:美国访问数:3总共有多少IP:2最大访问IP数:{'99.122.189.203':3}

六、邮件发送结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。