Trabajar con lightsquid o cómo hacer estadísticas personalizadas para los usuarios

Entonces, tenía una tarea en el trabajo: darle a cada usuario la oportunidad de ver sus registros de Internet. Parece que la tarea es la siguiente: debería debatirse desde todos los lados en cualquier foro y al menos debería haber una solución ya preparada, como máximo, instrucciones paso a paso. Pero no pude encontrar ni uno ni el otro. Entonces tuve que reinventar mi propia rueda. A continuación se muestra una instrucción casi paso a paso para resolver este problema utilizando lightsquid y scripts. Tenga cuidado con muchos scripts.



Que necesitas



  • Servidor Ubuntu instalado (personalmente en mi implementación es la versión 13.04)
  • Apache2 instalado
  • Instalado configurado y ya recolectando estadísticas de calamar (en mi caso es 2.7)




Estipularemos preliminarmente las condiciones:



  • El usuario es identificado por su dirección IP
  • Cada usuario solo puede ver sus propias estadísticas
  • Las estadísticas se muestran a través de la interfaz WEB




Comenzar



Necesita lighsquid él mismo


El primer paso es descargar LightSquid

wget http://downloads.sourceforge.net/project/lightsquid/lightsquid/1.8/lightsquid-1.8.tgz







Descomprímelo. Preferí descomprimir en la raíz / var, de hecho, también puedes en / www (si necesitas gráficos, etc.)

alquitrán -zxf lightsquid-1.8.tgz / var / lightsquid




Establecemos recursivamente 755 derechos para el usuario y grupo www-data en el directorio y su contenido

chmod -R 755 / var / lightsquid

chown -R www-data: www-data / var / lightsquid





Hacemos que los scripts del programa sean ejecutables:

chmod + x * .cgi

chmod + x * .pl





Si realmente necesita gráficos, debe instalar el paquete libgd-gd2-perl

sudo apt-get install libgd-gd2-perl




Ahora necesitas modificar la configuración de LightSquid.

nano /var/lightsquid/lightsquid.cfg




Editar rutas en la sección VARIABLES GLOBALES

# ruta a archivos `cfg` adicionales

$ cfgpath =" / var / lightsquid ";

# ruta a la carpeta `tpl`

$ tplpath =" / var / lightsquid / tpl ";

# ruta a la carpeta `lang`

$ langpath =" / var / lightsquid / lang ";

# ruta a la carpeta `report`

$ reportpath =" / var / lightsquid / report ";

#ruta de acceso.log

$ logpath = "/ var / log / squid";

# ruta a la carpeta `ip2name`

$ ip2namepath =" / var / lightsquid / ip2name ";





En la sección VARIABLES WEB, configure el idioma de interfaz deseado. En este caso, ruso.

$ lang = "ru";




Bueno, todo el calamar de luz debería estar listo para funcionar. Si tiene registros de calamar, puede analizarlos para poder verlos más tarde en el informe:

/ var / lightsquid # ./lightparser.pl access.log.59 && ./lightparser.pl access.log.58 && ./lightparser.pl access.log.57 && ./lightparser.pl access.log.56 &&. /lightparser.pl access.log.55 && ./lightparser.pl access.log.54 && ./lightparser.pl access.log.53 ... etc.




El proceso en sí



Porque LightSquid con la ayuda de scripts cgi genera archivos etiquetados html, luego los entrega al servidor, el servidor al usuario y el usuario, a su vez, ve TODAS las estadísticas de TODOS los usuarios - esto no es bueno. Por lo tanto, hay una tarea, "interceptar" la salida, hacer sus propios archivos html con preferencia y cortesanas y entregar el archivo procesado al usuario.



Primer script PHP


Crea un archivo:



nano /var/www/index.php




Tendremos el primer script en PHP: esta será la página de inicio que mostrará al usuario la primera página "procesada" de ligsquid. Ingresamos los datos:



<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/index.sh ".$ip_host.$year.$month.$day;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







El principio es el siguiente. Recibimos cualquier parámetro a través de PHP, en este caso el año, mes, día, en la página de inicio estos parámetros están vacíos, pero si cambia a otro mes o año, se completarán inmediatamente.

A continuación, nosotros mismos averiguaremos la IP del host que solicitó esta página. Necesitamos esta IP para formar datos SOLAMENTE en ella, y en general para navegar de alguna manera entre los archivos que creamos, porque vincularemos el nombre del archivo a su dirección IP.

A continuación, formamos una cadena. Que lanza el siguiente script (descrito a continuación) y le transfiere los parámetros de IP, año, mes, día.

Llamamos a este script para ejecución.



Mostramos la página html. Tenga en cuenta que el nombre de la página se forma a partir de la dirección IP del host y el prefijo "log_file.html"



Segundo script de shell


Este script implementará el lanzamiento del script cgi de lightsquid y escribirá el resultado de la ejecución (script cgi) en un archivo separado. Y luego inicializa el lanzamiento de otro script con la transferencia de parámetros (sobre lo cual a continuación).



Crea un archivo

nano /var/lightsquid/my_scr/index.sh




Haciéndolo ejecutable

chmod + x index.sh





Una nota importante, como el script debe ejecutarse bajo los derechos del usuario de www-data. Luego, debe agregar la siguiente línea al archivo / etc / sudoers en el bloque de especificación de privilegios de usuario #:

www-data TODOS = (TODOS) NOPASSWD: /var/lightsquid/my_scr/index.sh





A continuación, escribimos los datos en el archivo.

#!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #

str="log_file"
param="year="$2"&month="$3"&day="$4

LOG_FILE=/var/lightsquid/my_tmp/$1$str.html
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
/var/lightsquid/index.cgi
}> $LOG_FILE 2>&1
/var/lightsquid/my_scr/index.py $1

      
      







Razyasnyu:

Obtener los parámetros de IP, año, día, mes

en la variable escribe la cadena «log_file»

Formular una solicitud y escribirla en una variable

Ejecutar el script cgi que se suministran los parámetros, el resultado del script se guarda en un archivo llamado host IP + «log_file.html»

Llamamos a otro script, le pasamos parámetros.



Tercer script de Python


Porque la página generada contiene muchos enlaces innecesarios e incorrectos (por ejemplo, se refiere a cgi que no podemos interceptar), y así sucesivamente, este archivo debe corregirse. reemplace todos los enlaces con los nuestros y elimine un par de líneas.



Crea un archivo:

nano /var/lightsquid/my_scr/index.py




Hacemos que el archivo sea ejecutable.

chmod + x index.sh





Escribimos los siguientes datos en él:



#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 
#       lightsquid

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 


i = 0
for i in range(count_line): #  0     
if "day_detail.cgi" in lines[i]:  #       cgi
        lines[i] = lines[i].replace('day_detail.cgi','day_detail.php') #   ,      
    if "group_detail.cgi" in lines[i]: #     
        lines[i] = " <code><TD> </TD></code>"  #             
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "month_detail.cgi" in lines[i]:
        lines[i] = lines[i].replace('month_detail.cgi','month_detail.php')
    if "graph.cgi" in lines[i]:
        lines[i] = " "
    if "topsites.cgi" in lines[i]:
        lines[i] = lines[i].replace('topsites.cgi','topsites.php')


file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close

      
      







En general, la sangría (cuatro espacios) es muy importante en Python para aquellos que no saben :)

Permítanme explicar un poco el script.

Obtenemos la dirección IP del usuario que solicitó las estadísticas (esta dirección IP se transmite aquí desde el script anterior).

A continuación, abrimos el archivo generado por el script lightsquid cgi, averigua

cuántas líneas contiene

, hacemos un bucle, en este bucle verificamos que cada línea cumpla con nuestros requisitos. Es decir, cambia las rutas de los enlaces de cgi a php, además, no necesitaba que los usuarios no vieran los grupos, por lo que generalmente hago que esta columna esté vacía ().

Bueno, eso es todo, volvemos a escribir el archivo ya procesado.



Y así, descubrí una forma de cómo debería hacerse todo. Pero se necesitan 27 scripts para funcionar completamente. Por supuesto, era posible meter todo en un solo guión y, en general, habría resultado solo 3, pero no me compliqué la vida. A continuación me gustaría dar el resto de los scripts, pero con un breve análisis de los mismos y sin pasos innecesarios para crearlos (ya que acciones similares se describieron anteriormente).



El resto de los saltos



Todo lo relacionado con bigfiles


bigfiles.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_bigfiles.sh ".$ip_host.$year.$month.$day;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







my_bigfiles.sh


#!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #

str="log_file"
param="year="$2"&month="$3"&day="$4"&user="$1


LOG_FILE=/var/lightsquid/my_tmp/$1$str.html
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
/var/lightsquid/bigfiles.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_bigfiles.py $1


      
      







my_bigfiles.py


#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 


i = 0
for i in range(count_line): #  0     
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "user_detail.cgi" in lines[i]:
        lines[i] = lines[i].replace('user_detail.cgi','user_detail.php')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      







Todo lo relacionado con day_detail


bigfiles.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_day_detail.sh ".$ip_host.$year.$month.$day;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>


      
      









!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #
str="log_file"  #   
param="year="$2"&month="$3"&day="$4  #       

LOG_FILE=/var/lightsquid/my_tmp/$1$str.html  #       
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
 /var/lightsquid/day_detail.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_day_detail.py $1  #   ,      ;)


      
      









#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 
#       lightsquid
#    ip    

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
    #len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 

for i in range(count_line): #  0     
    if "tr bgcolor=" + "\42" + "cornsilk" + "\42" in lines[i] or "tr bgcolor=" + "\42" + "beige" + "\42" in lines[i]:  #     1  2 ,   
        if seach_ip in lines[i+3]: continue   #     ip     ,        
        else:
            lines[i] = " "
            lines[i+1] = " "
            lines[i+2] = " "
            lines[i+3] = " "
            lines[i+4] = " "
            lines[i+5] = " "
            lines[i+6] = " "
            lines[i+7] = " "
            lines[i+8] = " "
            lines[i+9] = " "
            lines[i+10] = " "
            lines[i+11] = " "
            lines[i+12] = " "
            lines[i+13] = " "
            lines[i+14] = " "
            lines[i+15] = " "
            lines[i+16] = " "
    if "user_time.cgi" in lines[i]:
        lines[i] = lines[i].replace('user_time.cgi','user_time.php')
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "user_detail.cgi" in lines[i]:
        lines[i] = lines[i].replace('user_detail.cgi','user_detail.php')
    if "topsites.cgi" in lines[i]:
        lines[i] = " "
    if "bigfiles.cgi" in lines[i]:
        lines[i] = " "
    if "group_detail.cgi" in lines[i]: #     
        lines[i] = " <TD> </TD>"  #             
    if "get.cgi" in lines[i]:
        lines[i] = lines[i].replace('get.cgi?png=datetime','datetime.png')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      





Considero necesario aclarar este guión.

El script obtiene la IP del usuario que solicitó los datos.

Porque el archivo que genera cgi es del mismo tipo, decidí vincular la búsqueda de la línea que necesitaba al color de la línea, hay dos "cornsilk"



y "beige"



. Si hay una línea de este tipo donde hay este color, entonces movemos tres líneas hacia abajo, hay una dirección IP. Comparamos uno o el incorrecto, y si no es el indicado, simplemente borramos las 16 líneas. (Esto es exactamente lo que toma la descripción de una línea en el informe).



Todo lo relacionado con month_detail


month_detail.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$mode = " {$_GET['mode']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_month_detail.sh ".$ip_host.$year.$month.$mode;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







my_month_detail.sh


!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #
str="log_file"  #   
param="year="$2"&month="$3"&mode="$4  #       


LOG_FILE=/var/lightsquid/my_tmp/$1$str.html  #       
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
 /var/lightsquid/month_detail.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_month_detail.py $1 $3  #   ,      ;)


      
      







my_month_detail.py


#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 
month = sys.argv[2]
#       lightsquid
#    ip    

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
    #len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 

for i in range(count_line): #  0     
    if "tr bgcolor=" + "\42" + "cornsilk" + "\42" in lines[i] or "tr bgcolor=" + "\42" + "beige" + "\42" in lines[i]:  #     1  2 ,   
        if seach_ip in lines[i+3]: continue   #     ip     ,        
        else:
            if month == "all":  #   .      ,     ,     ,    
                lines[i] = " "
                lines[i+1] = " "
                lines[i+2] = " "
                lines[i+3] = " "
                lines[i+4] = " "
                lines[i+5] = " "
                lines[i+6] = " "
                lines[i+7] = " "
                lines[i+8] = " "
                lines[i+9] = " "
                lines[i+10] = " "
                lines[i+11] = " "
                lines[i+12] = " "
                lines[i+13] = " "
                lines[i+14] = " "
            else:
                lines[i] = " "
                lines[i+1] = " "
                lines[i+2] = " "
                lines[i+3] = " "
                lines[i+4] = " "
                lines[i+5] = " "
                lines[i+6] = " "
                lines[i+7] = " "
                lines[i+8] = " "
                lines[i+9] = " "
                lines[i+10] = " "
                lines[i+11] = " "
                lines[i+12] = " "
                lines[i+13] = " "
                lines[i+14] = " "
                lines[i+15] = " "

for i in range(count_line): #  0     
    if  lines[i]<> " ":
        if "index.cgi" in lines[i]:
            lines[i] = lines[i].replace('index.cgi','index.php')
        if "user_time.cgi" in lines[i]:
            lines[i] = lines[i].replace('user_time.cgi','user_time.php')
        if "graph.cgi" in lines[i]:
            lines[i] = '<TD></TD>'
        if "user_month.cgi" in lines[i]:
            lines[i] = lines[i].replace('user_month.cgi','user_month.php')
        if "user_detail.cgi" in lines[i]:
            lines[i] = lines[i].replace('user_detail.cgi','user_detail.php')
        if "get.cgi" in lines[i]:
            lines[i] = lines[i].replace('get.cgi?png=datetime','datetime.png')
        if "get.cgi" in lines[i]:
            lines[i] = lines[i].replace('get.cgi?png=graph','graph.png')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      





En este script, casi lo mismo que se describió anteriormente, solo que la diferencia es esta, se reciben diferentes parámetros (año y mes), por lo tanto, el número de líneas que forman los datos es diferente. dependiendo del parámetro recibido, month = sys.argv[2]



elegimos la acción.



Todo lo relacionado con los topsites


topsites.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$mode = " {$_GET['mode']}";
$order = " {$_GET['order']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_topsites.sh ".$ip_host.$year.$month.$mode.$order;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>


      
      







my_topsites.sh


#!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #\
$5 #\
$6 #
str="log_file"  #   

if [ $5 = "hits" -o $4 = "size" ]
then
param="year="$2"&month="$3"&day=&mode="$4"&order="$5
else
param="year="$2"&month="$3"&mode="$4  #       
fi


LOG_FILE=/var/lightsquid/my_tmp/$1$str.html  #       
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
 /var/lightsquid/topsites.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_topsites.py $1  #   ,      ;)


      
      





Aquí es un poco más complicado, también se pasan diferentes parámetros al script, y dependiendo de los parámetros aceptados por el script, forma una solicitud al script cgi.



my_topsites.py


!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 


i = 0
for i in range(count_line): #  0     
    if "whousesite.cgi" in lines[i]: #     
        lines[i] = " <TD> </TD>"  #             
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "topsites.cgi" in lines[i]:
        lines[i] = lines[i].replace('topsites.cgi','topsites.php')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      







Todo lo relacionado con user_detail


user_detail.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$mode = " {$_GET['mode']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_user_detail.sh ".$ip_host.$year.$month.$day.$mode;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







user_detail.sh


#!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #\
str="log_file"  #   

if [ $4 = "month" -o $4 = "year" ]
then
param="year="$2"&month="$3"&user="$1"&mode="$4  #       
else
param="year="$2"&month="$3"&day="$4"&user="$1
fi


LOG_FILE=/var/lightsquid/my_tmp/$1$str.html  #       
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
 /var/lightsquid/user_detail.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_user_detail.py $1  #   ,      ;)


      
      







user_detail.py


#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 

i = 0
for i in range(count_line): #  0     
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "user_time.cgi" in lines[i]:
        lines[i] = lines[i].replace('user_time.cgi','user_time.php')
    if "bigfiles.cgi" in lines[i]:
        lines[i] = lines[i].replace('bigfiles.cgi','bigfiles.php')
    if "get.cgi" in lines[i]:
        lines[i] = lines[i].replace('get.cgi?png=datetime','datetime.png')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      







Todo lo relacionado con user_month


user_month.php


<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";

$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_user_month.sh ".$ip_host.$year.$month;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







user_month.sh


#!/bin/sh
$1 #ip 
$2 #
$3 #

str="log_file"
param="year="$2"&month="$3"&user="$1

LOG_FILE=/var/lightsquid/my_tmp/$1$str.html
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
/var/lightsquid/user_month.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_user_month.py $1

      
      







user_month.py


#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 
#       lightsquid
#    ip    

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 


i = 0
for i in range(count_line): #  0     
    if "user_detail.cgi" in lines[i]:  #       cgi
        lines[i] = lines[i].replace('user_detail.cgi','user_detail.php') #   ,      
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')
    if "graph.cgi" in lines[i]:
        lines[i] = lines[i].replace('graph.cgi','graph.php')


file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close

      
      







Todo lo relacionado con user_time


user_time.php



<?php
$year = " {$_GET['year']}";
$month = " {$_GET['month']}";
$day = " {$_GET['day']}";
$mode = " {$_GET['mode']}";
$ip_host = "{$_SERVER['REMOTE_ADDR']}";
$str = "sudo /var/lightsquid/my_scr/my_user_time.sh ".$ip_host.$year.$month.$mode;
echo exec($str);
include "/var/lightsquid/my_tmp/".$ip_host."log_file.html"
?>

      
      







user_time.sh


#!/bin/sh
$1 #ip 
$2 #
$3 #
$4 #\
str="log_file"  #   

if [ $4 = "month" -o $4 = "year" ]
then
param="year="$2"&month="$3"&user="$1"&mode="$4  #       
else
param="year="$2"&month="$3"&day="$4"&user="$1
fi


LOG_FILE=/var/lightsquid/my_tmp/$1$str.html  #       
{
export REQUEST_METHOD=GET
export QUERY_STRING=$param
 /var/lightsquid/user_time.cgi
}> $LOG_FILE 2>&1

/var/lightsquid/my_scr/my_user_time.py $1  #   ,      ;)


      
      







user_time.py


#!/usr/bin/env python
#coding: utf-8

import sys #  sys         

ip_host = sys.argv[1] #  IP 
#       lightsquid
#    ip    

seach_ip = ip_host

path_file = '/var/lightsquid/my_tmp/'+ ip_host + 'log_file.html' #    

count_line = sum(1 for l in open(path_file, 'r')) #    
#len(open(path_file, 'r').readlines())            #       

file = open(path_file, 'r') #  
lines = file.readlines()    #    
file.close()                # 


i = 0
for i in range(count_line): #  0     
    if "index.cgi" in lines[i]:
        lines[i] = lines[i].replace('index.cgi','index.php')

file = open('/var/lightsquid/my_tmp/' + ip_host + 'log_file.html','w')
file.writelines(lines)
file.close


      
      







Salir





Bueno, eso es todo, espero que nadie se canse de la cantidad de guiones. Espero que este artículo ayude a alguien a resolver el mismo problema y tal vez lo mejore.



All Articles