基于Python实现WEB日志生成

您所在的位置:网站首页 python设计验证码 基于Python实现WEB日志生成

基于Python实现WEB日志生成

2023-06-18 02:34| 来源: 网络整理| 查看: 265

文章目录 基于Python实现WEB日志生成1.日志作用2.常见的web服务器日志介绍2.1Apache2.2Ngnix 3.基于python实现日志生成3.1加载依赖3.2定义随机生成的日志信息随机生成 IP地址随机生成 访问资源路径随机生成 状态码随机生成 来源地址随机生成 浏览器信息 3.3生成log数据 总结参考文献

基于Python实现WEB日志生成 1.日志作用

记录访问服务器的远程主机IP地址,可以得知浏览者来自何处 记录浏览者访问web资源,可以了解网站哪些部分最受欢迎 记录浏览者使用浏览器,可以根据大多数浏览者使用浏览器对站点进行优化 记录浏览者访问时间

2.常见的web服务器日志介绍 2.1Apache

1.简介 Apache(音译为阿帕奇)是世界使用最多的Web服务器软件之一。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。Apache是用C语言开发的基于模块化设计的web应用,核心代码不多。多数功能分散在各个模块中

2.日志位置 Apache的配置文件(httpd.conf)中是存在着两个可调配的日志文件的,这两个日志文件分别是访问日志access_log(在Windows上是access.log)和错误日志error_log(在Windows上是error.log)。如果使用 SSL 服务的话,还可能存在 ssl_access_log和ssl_error_log 和 ssl_request_log 三种日志文件。日志文件的路径根据安装方式不同位置也是不一样的,一般都是在Apache安装目录的logs子目录中

默认安装的情况下,Apache的配置文件是在:

windows: C:\Program Files\Apache Software Foundation\Apache2.4\conf\httpd.conf linux: etc/httpd/conf/httpd.conf

3.Apache访问日志格式详解

访问日志access_log记录了所有对Web服务器的访问活动,下面是访问日志access_log中的一个标准记录

192.168.115.5 - - [01/Apr/2018:10:37:19 +0800] “GET / HTTP/1.1” 200 45

日志字段所代表的内容如下:

1.远程主机IP:表明访问网站的是谁 2.空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了 3.空白(登录名):用于记录浏览者进行身份验证时提供的名字。 4.请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。 5.方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。 METHOD: GET、POST、HEAD、…… RESOURCE: /、index.html、/default/index.php、……(请求的文件) PROTOCOL: HTTP+版本号 6.状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。 7.发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。

2.2Ngnix

1.简介 Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

2.日志位置 Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。 nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。

查找Nginx.conf的位置: 执行 sudo nginx -t 就可以获取配置文件的路径。同时如果你的配置文件nginx.conf修改后有错,该命令执行后也会有相应提示,例如“参数无效” Nginx日志路径

/var/log/nginx

3.ngnix日志格式设置 nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:

log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:

Nginx日志格式设置,参考https://blog.51cto.com/shaoniana/2126541

在这里插入图片描述

3.基于python实现日志生成

本案例为基于python语言实现web访问日志的加载,打开jupyter,新建

日志生成.ipynb

进行代码编写。

3.1加载依赖 import random import time import shutil import os os.chdir("./") #切换工作路径为当前目录 3.2定义随机生成的日志信息 随机生成 IP地址 ip_slices = [132, 156, 124, 10, 29, 167, 143, 187, 30, 100] def sample_ip(): slice = random.sample(ip_slices, 4) return ".".join([str(item) for item in slice]) 随机生成 访问资源路径 url_paths = [ "www/2", "www/1", "www/6", "www/4", "www/3", "pianhua/130", "toukouxu/821" ] def sample_url(): return random.sample(url_paths, 1)[0] 随机生成 状态码 status_code = [404, 302, 200] def sample_status(): return random.sample(status_code, 1)[0] 随机生成 来源地址 http_referers = [ "https://www.baidu.com/s?wd={query}", "https://www.sogou.com/web?qu={query}", "http://cn.bing.com/search?q={query}", "https://www.so.com/s?q={query}" ] search_keyword = [ "我的祖国", "西游降魔篇", "阿甘正传", "扬名立万", "杨恩泽" ] def sample_referer(): if random.uniform(0, 1) > 0.2: return "-" refer_str = random.sample(http_referers, 1) # print refer_str[0] query_str = random.sample(search_keyword, 1) # print query_str[0] return refer_str[0].format(query=query_str[0]) 随机生成 浏览器信息

生成userAgent数据: 创建日志文件userAgentcopy文件,notepad++打开该文件,将以下useragent信息粘贴到userAgentcopy中

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" "Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0 " "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101" "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" "Opera/9.80 (Android 2.3.4; Linux; Opera mobi/adr-1107051709; U; zh-cn) Presto/2.8.149 Version/11.10" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

将userAgentcopy上传到jupyter中日志生成文件所在的同级目录下。 在这里插入图片描述读取userAgentcopy文件并加载到列表中,代码如下:

# 读取userAgentcopy文件中的内容,生成一个userAgentlist列表 userAgentlist = [] with open("userAgentcopy",'r',encoding="UTF-8") as f: for line in f.readlines(): line = line.replace("\"","") line = line.replace("\n","") userAgentlist.append(line) # 随机useragent def useragent(): return random.sample(userAgentlist,1) 3.3生成log数据 # 生成当前时间 def get_timestamp(): t = time.localtime() return time.strftime('%Y-%m-%d %H:%M:%S', t) # 产生log def generate_log(count=100,filepath="log",filename="log.txt"): # 日志目录 log_path = os.path.join(os.getcwd(),filepath) # 日志文件路径 log_name = os.path.join(log_path,filename) # 判断日志所在目录是否存在 if not os.path.exists(log_path): os.mkdir(log_path) print(log_path,"已创建") elif os.path.exists(log_path) and os.path.exists(log_name): # 如果日志存在,先删除 print(log_name,"已存在") # os.remove(log_name) # shutil.rmtree(log_name) # 打开日志 with open(log_name,"a+") as f : # 生成日志 while count >= 1: # 获取当前时间 time_str = get_timestamp() # 定义日志格式 log_format = "{ip}\t{localtime}\t\"GET {url} HTTP/1.0\"\t{referece}\t{status1}\t{useragent}" # 生成日志信息 query_log = log_format.format( ip=sample_ip(), url=sample_url(), status1=sample_status(), referece=sample_referer(), localtime=time_str, useragent = useragent() ) # 将日志写入文件 f.write(query_log + "\n") count = count - 1; # 随机休眠 time.sleep(random.uniform(0,2)) # time.sleep(0.5) if __name__ == '__main__': generate_log(count=50,filepath="log",filename="log1.txt") 总结

本文主要介绍常见的web服务器与web日志的格式,并基于python实现了随机日志生成。在实现过程中,主要解决了userAgent的随机生成,本地时间的动态生成。

参考文献

https://blog.51cto.com/shaoniana/2126541 https://blog.csdn.net/qq_41861558/article/details/105252105



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3