Linux 从用户代理字符串确定哪个浏览器发出请求
我正在尝试编写一个批处理文件,用于从日志文件中读取和提取用户代理,我可以使用以下代码执行此操作,但我需要给出发出请求的浏览器的数字计数,并使用gnu plot,绘制一个每个浏览器请求数的条形图。我对浏览器的请求有点纠结。如果您能提供一些帮助或指导,我将不胜感激 干杯Linux 从用户代理字符串确定哪个浏览器发出请求,linux,batch-file,awk,gnuplot,logfile,Linux,Batch File,Awk,Gnuplot,Logfile,我正在尝试编写一个批处理文件,用于从日志文件中读取和提取用户代理,我可以使用以下代码执行此操作,但我需要给出发出请求的浏览器的数字计数,并使用gnu plot,绘制一个每个浏览器请求数的条形图。我对浏览器的请求有点纠结。如果您能提供一些帮助或指导,我将不胜感激 干杯 #!/bin/bash # All we're doing here is extracting the user agent field from the log file and 'piping' it through s
#!/bin/bash
# All we're doing here is extracting the user agent field from the log file and 'piping' it through some other commands. The first sort is to # enable uniq to properly identify and count unique user agents. The final sort orders the result by number and name (both descending).
awk -F\" '{print $6}' access.log | sort | uniq -c | sort -fr > extracteduseragents.txt
要获得更友好的浏览器名称,您可以使用,例如与来自的
browscap.csv
文件一起使用
然后您可以使用如下脚本sanitize_ua.py
:
#!/usr/bin/env python
import sys
from pybrowscap.loader.csv import load_file
browscap = load_file('browscap.csv')
for ua in sys.stdin:
browser = browscap.search(ua)
if browser:
print "'{} {}'".format(browser.name(), browser.version())
并从命令行运行,如
awk -F\" '{print $6}' access.log | sort | python sanitize_ua.py | uniq -c | sort -fr
当然,在
uniq
之前搜索所有用户代理效率很低,但它应该显示工作原理。当然,您也可以编写一个python脚本来完成所有的处理。您到底在坚持什么?获取该输出并将其输入gnuplot?@EtanReisner谢谢您的回复,在提取用户代理字符串(由上述代码完成)后,我想确定是哪个浏览器发出了请求?用户代理字符串是浏览器标识符。如果需要,您可以手动将这些字符串映射到更友好的名称,但仅此而已。在网页上进行UA嗅探是一种强烈反对的做法,这是有原因的。