Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何使用squid日志从两个不同的IP登录用户_Performance_Bash_Shell_Squid_Log Analysis - Fatal编程技术网

Performance 如何使用squid日志从两个不同的IP登录用户

Performance 如何使用squid日志从两个不同的IP登录用户,performance,bash,shell,squid,log-analysis,Performance,Bash,Shell,Squid,Log Analysis,我有一个squid日志,我必须找出从两个不同IP登录的用户(他们的密码可能被泄露) 我从日志中提取了三个信息(用户、时间、ip),并存储在另一个文件中 1110104 1397367240.280 172.27.71.14 1110104 1397367242.439 172.27.71.14 1110104 1397367245.805 172.27.71.14 1110104 1397367246.120 172.27.71.14 1110104 1397367249.770 172.

我有一个squid日志,我必须找出从两个不同IP登录的用户(他们的密码可能被泄露)

我从日志中提取了三个信息(用户、时间、ip),并存储在另一个文件中

1110104 1397367240.280 172.27.71.14
1110104 1397367242.439 172.27.71.14 
1110104 1397367245.805 172.27.71.14 
1110104 1397367246.120 172.27.71.14 
1110104 1397367249.770 172.27.71.14 
1110104 1397367255.125 172.27.71.14 
1110104 1397367255.503 172.27.71.13 
1110104 1397367257.255 172.27.71.13 
1110104 1397367257.596 172.27.71.13 
1110104 1397367257.956 172.27.71.14 
1110104 1397367258.353 172.27.71.14 
1110104 1397367258.698 172.27.71.14 
1110104 1397367259.079 172.27.71.14 
1110104 1397367260.879 172.27.71.14 
1110104 1397367260.880 172.27.71.14 
1110104 1397367261.250 172.27.71.14 
1110104 1397367261.254 172.27.71.14 
1110104 1397367264.594 172.27.71.13 
1110104 1397367264.620 172.27.71.13 
1110104 1397367264.948 172.27.71.14 
1110104 1397367264.960 172.27.71.14 
1110104 1397367265.331 172.27.71.14 
1110104 1397367265.340 172.27.71.14 
1110104 1397367265.710 172.27.71.14 
1110104 1397367266.072 172.27.71.14 
1110104 1397367266.157 172.27.71.14 
1110104 1397367266.420 172.27.71.14  
现在,因为像这样的线路有数百万条,我的方法需要几个小时

firstLine=`cat data.log | head -1`

user1=`echo $firstLine | cut -d " " -f1`
time1=`echo $firstLine | cut -d " " -f2 | cut -d "." -f1`
ip1=`echo $firstLine | cut -d " " -f3`

while read -r line; do
       user2=`echo $line | cut -d " " -f1`
       time2=`echo $line | cut -d " " -f2 | cut -d "." -f1`
       ip2=`echo $line | cut -d " " -f3`
       if [ "$user1" = "$user2" ] && [ "$ip1" != "$ip2" ] && [ $(($time2-$time1)) -lt 600]  # time diff is lass than 10 minutes
       then
            echo "user "$user1 
            echo "at "`date -d @$time1` " using "$ip1 " and after "$(($time2-$time1))" seconds using "$ip2
       elif [ "$user1" != "$user2" ]
       then
            a1=$a2
            b1=$b2
            c1=$c2
       fi
    done < data.log
这意味着有两个人使用来自两个不同ip的相同用户名和密码

我希望这会使问题更清楚。

你想做的是

  • 按用户ID和时间对行进行排序
  • 迭代行,如果相邻行有不同的IPS,考虑时间Δ
  • 未测试代码

    sort -k1,2 datafile \
      | awk 'BEGIN { user="" ; ip="" ; time=0 }
             user=="" { user=$1 }
             ip=="" { ip=$3 }
             $1 != user { user=$1 ; next }
             $3 != ip && $2-time < 600 { print $0,"vs.",ip,"@",time }
             { time=$2 ; ip=$3 }'
    
    sort-k1,2数据文件\
    |awk'BEGIN{user=”“;ip=“;time=0}
    用户==“”{user=$1}
    ip==”{ip=$3}
    $1 != 用户{user=$1;下一个}
    $3 != ip&&$2-time<600{打印$0,“vs.”,ip,“@”,time}
    {time=$2;ip=$3}'
    

    不过,这可能需要一些修补。

    我不明白你想做什么。您希望从日志文件中得到什么信息?你能用一个例子来编辑这个问题吗?你希望它在处理后看起来像什么?@arco444我已经更新了我的问题哇!我不知道这有多快,但它就像一个符咒,只是在几秒钟内完成了!!非常感谢:)很高兴这对您有用:-)它很快,因为它只会分叉两次,而不是bash脚本中每行大约7次(!)。
    sort -k1,2 datafile \
      | awk 'BEGIN { user="" ; ip="" ; time=0 }
             user=="" { user=$1 }
             ip=="" { ip=$3 }
             $1 != user { user=$1 ; next }
             $3 != ip && $2-time < 600 { print $0,"vs.",ip,"@",time }
             { time=$2 ; ip=$3 }'