返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2545|回复: 0

[原创] shell脚本-分析httpd访问日志(linux日志)-by swztdza

[复制链接]
发表于 2020-2-28 15:59:28 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
#! /bin/bash
#BY swztdza
if [ -z $1 ];then
    echo '脚本后面请输入httpd访问日志绝对路径'
else

if [ -z $2 ];then #ip地址解析模块的禁用,没有参数为不禁用
    BL5=1
else
    BL5=0
fi

BL1=0
#--------------------------------以下正文---------------------------------------
for i in `sed -n '1,10000p' $1 | awk '{print$4,$5,$1,$(NF-2),$(NF-3),$(NF-4)}'`
#获取httpd访问日志的第4列,第5列和第一列的全部信息,然后赋值给循环变量

do

BL1=`expr $BL1 + 1`
#每次循环一次,此变量加一

    if [ $BL1 -eq6 ];then
    #当此变量(BL1)等于6时,则换行显示(表示已经显示了6列,需要换行)

#-------------------------------------------------------------------------------
#-----------------分析第6列的相关字符,以便辨识出访问设备----------------------
        if [ $i== "Win64"  ];then
            BL4="1"
        elif [ $i== "NT" ];then
            BL4="1"
        elif [ $i== "Win64;" ];then
            BL4="1"
        elif [ $i== "Windows" ];then
            BL4="1"
        elif [ $i== "(KHTML," ];then
            BL4="2"
        else
            BL4="0"
        fi
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
#--------------将分析出来的辨识符号汇总,并进行总分析,并赋值变量BL6------------
        if [$BL3  == "1" ];then
            BL6=`echo-e "\e[31mWindows System\e[0m"`
        elif [$BL3  == "3" ];then
            BL6=`echo-e "\e[34mAndroid System\e[0m"`
        elif [$BL4  == "1" ];then
            BL6=`echo-e "\e[31mWindows System\e[0m"`
        elif [$BL4  == "2" ];then
            BL6=`echo-e "\e[33mWindows OR MAC System\e[0m"`
        elif [$BL7  == "1" ];then
            BL6=`echo-e "\e[31mWindows System\e[0m"`
        elif [$BL7  == "4" ];then
            BL6=`echo-e "\e[34mAndroid OR Linux System\e[0m"`
        else
            BL6=`echoOther system`
        fi
#-------------------------------------------------------------------------------

        i=`echo" "` #隐藏此列常规输出
        echo $i      #不能去掉,否则会出现脚本错误

        if [ $BL5== "1" ];then  #ip地址解析显示模块,为1时代表不禁用

            echo"ip所在地: "$BL2
        fi

        echo"访问系统辨识: "$BL6  #显示辨识系统的汇总信息
        BL1=0  #将此变量归零,重新循环!

    else
    #当此变量(BL1)不等于6时,则不换行显示(还没有显示超过6列,不需要换行)

#-------------------------------------------------------------------------------
#--------------------ip地址解析模块,如有更好的解析网址后续会修改--------------
        if [ $BL5== "1" ];then
            if [$BL1 -eq 3 ];then   #循环至第三次才开始解析
                BL2=`curl-s http://ip.tool.chinaz.com/$i | grep "w50-0" | sed -n '2p' | awk'{print $3,$4}' | sed 's/w50-0">//' | sed 's/<\/span>//'`
            fi
        fi
#-------------------------------------------------------------------------------

#------------------------------------------------------------------------------
#------------------分析第4列的相关字符,以便辨识出访问设备----------------------
        if [ $BL1-eq 4 ];then
            if [$i == "Windows"  ];then
                BL3="1"
            elif[ $i == "NT" ];then
                BL3="1"
            elif[ $i == "Mobile"];then
                BL3="3"
            else
                BL3="0"
            fi
#-------------------------------------------------------------------------------

            i=`echo" "`  #隐藏此列常规输出
        fi

#------------------------------------------------------------------------------
#-----------------分析第5列的相关字符,以便辨识出访问设备----------------------
        if [ $BL1-eq 5 ];then
            if [$i == "WOW64;"  ];then
                               BL7="1"
            elif[ $i == "SE"  ];then
                               BL7="1"
            elif[ $i == "x86_64;"  ];then
                               BL7="4"
                       else
                               BL7="0"
                       fi
#-------------------------------------------------------------------------------

            i=`echo" "`  #隐藏此列常规输出
        fi

        echo -n$i  #不换行显示常规输出
        echo -n" " #每次添加一个空格
    fi

#sleep 0.1  #暂停时间,看需求修改

done
fi
#-------------------------for循环体结束---------------------------------------

echo " " #换行
echo -e '\e[32m日志分析结束\e[0m'

BL4=`cat $1 | wc -l` #获取日志的行数

echo -e "分析时间:\e[31m"$SECONDS"\e[0m 秒"
echo -e "分析条目: \e[31m"$BL4"\e[0m 个"


游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表