Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Estadísticas de Conexiones RADIUS y MRTG

Última Actualización: 28 de Diciembre de 2.000 - Jueves

15/Ene/03: Este proyecto está abandonado; ya no me resulta necesario, ni se ve interés por parte de otras personas.

En esta página se describe una librería software cuyo fin es analizar los ficheros de detalle generados por un servidor RADIUS y extraer información útil: tráfico generado, número de llamadas, duración de las llamadas, números de teléfono, etc. La librería se ha ampliado para obtener datos de otras fuentes no RADIUS, como archivos de logs MRTG.

Los ISPs que utilicen MRTG para obtener estadísticas deberían leer mi página web sobre el truncado de datos que realiza este programa.

Esta librería puede invocarse tanto como CGI como desde la línea de comando. En cualquier caso, su salida es en formato HTML.


Lista de Correo

15/Ene/03: Esta lista está cerrada; el proyecto ya no me resulta necesario, ni se ve interés por parte de otras personas.

La librería conexiones dispone de una lista de correo de muy bajo tráfico, para intercambio de trucos, sugerencias, bugs, etc. En dicha lista se publican, también novedades como la aparición de una nueva versión o la corrección de algún problema importante.


Invocación

Esta librería puede invocarse de varias formas:

  • Línea de comandos:

    Simplemente se indica el nombre del usuario cuyos datos se desean buscar.

    A partir de la versión 14, se puede especificar la fecha inicial y, opcionalmente también, la fecha final a considerar, en formato aaaammddhhmm.

  • Como CGI desde un servidor Web:

    • Como usuario normal:

      Un usuario normal puede ver la información que el sistema tiene sobre sus conexiones ejecutando el CGI sin ningún parámetro. El programa identificará al usuario por su IP actual.

      Si el usuario escribe un asterisco ("*") al final de la URL, o bien selecciona el enlace "Archivo Histórico", se le mostrarán los datos acumulados de los meses anteriores, si el administrador ha habilitado esa funcionalidad.

    • Como administrador:

      La librería dispone de una "Puerta Trasera" gracias a la cual un administrador puede tener acceso a todos los datos de un usuario o una IP determinada. Para ello debe teclearse al final de la URL del GCI la cadena "?clave=login", o bien la cadena "?clave=IP". La "clave" es la clave que el administrador definió cuando compiló el código.

      El "login" es el identificador del usuario que queremos analizar. La librería mostrará sus datos actuales, nos dará acceso también al archivo histórico y nos informará de si el usuario está conectado o no en estos momentos, y con qué dirección IP.

      Como en el caso anterior, escribiendo un asterisco ("*") al final de la URL, o bien seleccionando el enlace "Archivo Histórico", se muestran los datos acumulados de los meses anteriores, si el administrador ha habilitado esa funcionalidad.


Configuración y Enlazado

Versión 19

La configuración de la librería se realiza enlazándola con la configuración que deseamos utilizar. Por conveniencia se va a describir el caso más habitual, si bien la librería es más flexible y pueden adoptarse otros esquemas.

Una vez descomprimida, debemos irnos al directorio de la librería y editar el fichero "conf.c". En ese fichero hay que definir varios valores que serán utilizados por la librería. No deben modificarse los parámetros que no se indiquen. En orden de aparición:

  • t_ip_usuario IP_USUARIO[]

    Aquí escribimos la equivalencia entre direcciones IP fijas y usuarios determinados. Esto es útil cuando tenemos usuarios monitorizados por MRTG, o cuando queremos que una IP determinada pueda acceder a los datos de un usuario concreto.

  • char *ISP[] Aquí ponemos la lista de CPIs asociados a ese ISP. Básicamente se pone "@cpi", si ello aparece en los ficheros de logs. Si, por ejemplo, tenemos usuario sin nada, usuarios con "@abc" y usuarios con "@xxs" en los logs, pues definimos esas tres cadenas aquí.

  • t_accounting accounting[]

    Esta es la parte más importante y delicada, ya que estamos indicando las fuentes de datos que vamos a utilizar. Cada fuente aparece en una línea, y en cada línea la distribución es:

    • Path del fichero de detalle o de log, o bien del programa que hay que ejecutar.

    • La lista de CPIs a aplicar a ese fichero. Típicamente se escribirá ISP, pero se pueden definir CPIs diferentes para cada fichero de log, por si los tenemos separados (que es lo lógico).

    • Puntero al formato del fichero. Es decir, con el "&" delante. Los tipos de fichero definidos en la actualidad son:

      • MRTG: Entrada MRTG.

      • RADIUS: Entrada RADIUS estándar.

      • RADIUS_IPLUS: Como el anterior, pero considerando el caso especial de Infovía Plus.

      • RADIUS_IPLUS_CACHE: Igual que el caso anterior, pero utilizando el sistema caché.

Una vez configurado adecuadamente el fichero "conf.c" escribimos make config y procedemos a responder a las preguntas que se nos van planteando:

  • Compilador de C: Elegimos nuestro compilador habitual. Debería ser gcc :-).

  • Opciones de compilación: Si estamos usando GCC, podemos dejar las opciones como están. Si usamos otro compilador, habrá que probar qué opciones funcionan. El ordenador nos mostrará varias posibilidades.

  • Parámetros de enlazado: Básicamente hay que decirle que queremos que busque librerías también en el directorio de trabajo. Esa opción es la que se muestra por defecto. Si estamos usando un enlazador diferente del de GNU... tú mismo.

  • Direcciones IP: Aquí ponemos la lista de direcciones IP a las que permitimos acceso al instalar el CGI. Se identifican como subcadenas. Por ejemplo, si nuestra clase C es "195.111.222.*", escribimos "195.111.222.". Se pueden poner varias cadenas si se separan por un espacio.

  • Archivos históricos: Debemos especificar el directorio donde residen los archivos históricos, si estamos empleando esa opción.

  • Clave CGI: Si instalamos el CGI debemos darle una clave de acceso. La clave debe ser aleatoria y difícil de adivinar. Un usuario que sepa la clave puede solicitar información sobre cualquier usuario, y no está limitado a tener una IP perteneciente a algunos de los rangos que se definieron más arriba.

  • ¿Usar gráficos? Para utilizar gráficos debemos instalar la librería GD. Si elegimos que sí, se nos preguntará el tipo de gráficos que deseamos generar. Se recomienda el empleo de gráficos PNG, por ser muchísimo más compactos, además de por cuestiones de licencia.

  • Path del CGI: Aquí le decimos el directorio donde debe instalarse el CGI.

Podemos reconfigurar el sistema tantas veces como sea necesario repitiendo los pasos anteriores.

Una vez completada la instalación, ejecutamos "make". Si queremos instalar el CGI, ejecutamos "make install". Debemos comprobar que, una vez instalado, el CGI tiene permisos de ejecución para el usuario bajo cuyo UserID se ejecuta el servidor web.


Pruebas de funcionamiento

Antes de instalar la librería de forma que sea accesible desde Internet, como CGI, es conveniente que todo está funcionando como debe:

  • Pruebas a realizar como root y desde el directorio donde se compile la librería:

    • Escribimos "./userstats". Debe mostrarse en pantalla la lista de usuarios RADIUS que se han conectado a lo largo del mes en curso, junto con algunos datos estadísticos.

      Si no funciona: Probablemente no estén bien configuradas las rutas de acceso a los ficheros de detalle RADIUS, o no estamos ejecutando el programa como root.

    • Elegimos un usuario cualquiera de la lista anterior, eliminamos lo que haya tras la arroba (@) (si lo hay), y ejecutamos "./conexiones usuario", donde usuario es el usuario elegido.

      Debería aparecernos un documento en formato HTML, con información pormenorizada de dicho usuario. Verifiquemos que datos como el número de conexiones, etc., son reales y coinciden con lo mostrado en la prueba anterior.

      Si no funciona: Si aparecen todos los valores a cero, es muy posible que no hayamos configurado adecuadamente los campos de CPI (ISP).

      Esta prueba debe repetirse al menos tantas veces como CPIs estemos evaluando, comprobando usuarios de todos ellos.

    • Instalamos la librería como root, con "make install".

      Si no funciona: O el directorio del CGI que hemos especificado en la configuración es erróneo, o no estamos ejecutando la operación como root.

    • Probamos la librería en su nueva localización, ejecutando "/path_al_cgi/conexiones usuario". Esto es equivalente a la prueba anterior, y pretende comprobar que estamos instalando la librería correctamente.

      Si no funciona: Si la prueba anterior funcionaba y ésta no, no hemos instalado la librería adecuadamente. ¿Lo haces como root?.

  • Pruebas a realizar con el UserID bajo el cual se ejecuta el servidor web:

    • Ejecutamos el CGI desde un navegador, sin ningún parámetro. Nos debería aparecer una página web de respuesta.

      Es normal y correcto que nos diga que no puede encontrar información sobre la conexión, si no estamos conectados desde una cuenta RADIUS.

      Si no funciona:

      • Si nos dice que no somos usuarios del proveedor, no hemos especificado correctamente las máscaras IP a utilizar.

      • Si nos dá un error de "prohibido", el servidor web no tiene permisos para ejecutar la librería. Hay que hacer un "chmod +x" sobre ella y volver a intentarlo.

      • Si nos aparece un "internal server error", pero nos funcionaron correctamente todas las pruebas realizadas... :-¿???

    • Nos conectamos a través de un usuario RADIUS (Infovía Plus, etc) y probamos a ejecutar el CGI de nuevo. Debería aparecernos información sobre nosotros y las conexiones que hemos realizado durante el mes en curso.

      Si no funciona: Si no aparece todos los datos a cero, es muy posible que el usuario bajo el que se ejecuta el servidor web no tenga permiso de lectura sobre los logs. Es imprescindible que ese usuario tenga permiso de escritura sobre los logs, y de entrada en todos los directorios por encima de ellos.

  • Ejecución en el web como administrador:

    • Ahora ejecutamos el CGI, pero eñadiéndole al final "?clave=usuario", donde la clave es la que hayamos elegido a la hora de configurar la librería, y usuario el usuario es un usuario válido sin la arroba (@) ni nada que le siga. Si estamos entrando desde RADIUS, el usuario elegido no debería coincidir con el usuario RADIUS que estemos empleando.

      Nos debería aparecer una página HTML mostrando información de ese usuario.

      Si no funciona: Si nos aparece información sobre el usuario que estamos usando desde RADIUS o nos dice que no puede encontrar información sobre la conexión, y el usuario especificado se ha conectado alguna vez en el mes en curso, tenemos un problema de clave o hemos tecleado mal el usuario (o le hemos añadido la @, cosa que no se debe hacer).


Configuración avanzada

Una vez que tenemos la librería funcionando, es el momento de sacarle el máximo partido. Para ello procedemos a instalar en un "cron" el script "diario", que se encarga de:

  1. Generar archivos históricos mensuales de nuestros usuarios, que luego serán accesibles a través del CGI.

  2. Rotar los logs de forma diaria, de manera que sean más sencillos y rápidos de tratar y procesar gracias al empleo de la tecnología caché desplegada en la versión 19 de la librería.

El tema más complicado y proclive a errores en esta etapa es el tema de los permisos en los ficheros, y del usuario bajo el cual se va a ejecutar el script "diario". Evidentemente dicho script, que se ejecuta con un "cron", debe tener la capacidad de realizar su trabajo. Ello puede implicar, incluso, algunos riesgos de seguridad que el administrador de sistemas debe conocer para poder valorar adecuadamente las variables puestas en juego.

El script "diario" está diseñado para ser ejecutado de forma diaria, a las 0:00 de cada día (en el cambio de día). Está diseñado para ser ejecutado desde un "cron", no desde la línea de comandos, pero es seguro ejecutarlo desde la línea de comandos EXCEPTO que estemos en el día 1 de un mes cualquiera. Eso es así porque el script trata de un modo especial los día 1, al intentar regenerar los archivos históricos de los usuarios. La ejecución del script en cualquier otro momento tiene efectos secundarios "seguros". Ello nos permitirá comprobar su correcto funcionamiento antes de pasarlo al "cron", que se encargará de ejecutarlo todas las medianoches.

cc


Comandos y opciones disponibles


Interioridades

Interfaz lee_log:

Esta interfaz es la utilizada por todos los módulos que proporcionan datos de entrada a la librería. Ajustándose a esta interfaz, cualquier programador puede dotar a la librería de entradas arbitrarias, ajustadas a sus necesidades.

  • void abre_log(char *f_detalle, char *usuario)

    Abre el fichero especificado por f_detalle. Sólo devuelve los registros que correspondan al usuario usuario. Si se desea acceder a todos los registros, se pasa "". Cualquier error es ignorado hasta que se intenta leer un registro.

  • void cierra_log(void)

    Cierra el log abierto.

  • log_estado lee_registro(registro_log *registro)

    Esta función devuelve el siguiente registro. Los registros se devuelven en el orden en que fueron almacenados. En caso de error el contenido de registro no es confiable.

  • time_t timestamp(void)

    Devuelve el timestamp de este fichero de log. Es utilizado para la verificación caché. En caso de error, de que el fichero no tenga una existencia física, etc., se devuelve 0.

Los tipos de datos t_log, registro_log y log_estado se definen en "lee_log.h".

Interfaz lee_log_cache:

Esta interfaz es un superconjunto de la anterior, y está diseñada para poder utilizar un sistema caché intermedio, con los archivos de registro preprocesados. De esta forma la librería es más rápida.

  • void abre_log(char *f_detalle, char *usuario,t_log original)

    Equivalente a abre_log de la interfaz lee_log, pero en este caso intenta evitar el acceso al fichero original mediante el empleo de una caché intermedia. El módulo se responsabiliza de verificar la validez de la caché y proceder a su reconstrucción si es preciso. original proporciona el punto de anclaje con los logs originales, para el caso de que la caché no sea válida y deba reconstruirse.

  • void cierra_log(void)

    Equivalente a la interfaz lee_log.

  • log_estado lee_registro(registro_log *registro)

    Equivalente a la interfaz lee_log.

  • time_t timestamp(void)

    Equivalente a la interfaz lee_log. El timestamp devuelto es el de la fuente original, no el de la caché.

Interfaz salida:

Esta interfaz proporciona diferentes posibilidades de visualización. Cada módulo es un formato de salida diferente.

  • void salida_cabecera(t_salida_cabecera *datos,time_t fecha,time_t expiracion)

    Visualiza información sobre el cliente que está consultando los datos, como su IP, la versión de su navegador, etc. fecha contiene la fecha que se considera como última modificación de los datos que se van a mostrar, y expiración es el período de validez que se está proponiendo.

  • void salida_conexiones(t_salida_conexiones *datos)

    Visualiza el grueso de la información de conexiones. Esta rutina puede invocarse varias veces, con datos diferentes.

  • void salida_final(void)

    Esta rutina es invocada al final de la visualización.

Los tipos de datos t_salida_cabecera y t_salida_conexiones se definen en "salida.h".

Interfaz salida_grafico:

Los módulos de este tipo proporcionan una visualización gráfica, no de texto.

  • void inicializa_grafico(void)

    Inicializa la salida gráfica.

  • void dibuja_grafico(char *f_detalle,char *nombre,t_log *log)

    Traza el objeto gráfico.

  • void envia_grafico(void)

    Finaliza la salida gráfica.

Interfaz called_id:

Esta interfaz devuelve el nombre asociado a un número de teléfono concreto. Consta de una única estructura del tipo t2n, declarada en called_id2.h.

  • t2n called_id[]

    Estructura que asocia un texto a un número de teléfono.

Rutinas lee_log

  • void inicializa_registro(registro_log *registro)

    Inicializa todos los campos del registro, dándoles su valor por defecto.

  • void abre_log_cache(char *f_detalle)

    Abre un fichero como lectura, utilizando un mecanismo de caché para reducir las llamadas al sistema y ganar velocidad. Los errores se ignoran hasta que se intenta leer.

    Si f_detalle contiene algún espacio, intenta ejecutar el proceso indicado con la porción antes del espacio, pasándole como parámetros lo que haya tras el espacio. La salida de dicho proceso se toma como si fuera el fichero de entrada.

  • void cierra_log_cache(void)

    Cierra el fichero anterior.

  • log_estado lee_log_cache(char *linea)

    Devuelve una línea entera del fichero. No incluye el '\n' final. Un '\r' que precede a un '\n' es ignorado. Si el fichero acaba sin un '\n', devuelve un LOG_EOF, y el contenido de linea no es confiable.

  • log_estado lee_log_binario_cache(void *c,int len)

    Devuelve un cierto número de caracteres del fichero. No los interpreta de ninguna manera. En caso de que ocurra un error o el fichero acabe antes de leer esos caracteres, se lee hasta donde se pueda, nada más, y se devuelve un LOG_EOF.

  • time_t lee_log_timestamp(void)

    Nos dá el timestamp de la última modificación para ese fichero.

Rutinas tiempo

Permiten fijar intervalos a la hora de elegir qué registros nos interesan. Dan valores a las variables globales "time_t tiempo_inicial" y "time_t tiempo_final"

  • time_t str2tiempo(char *tiempo)

    Devuelve el número de segundos desde 01/01/1970 para una cadena en formato "AAAAMMDDhhmm".

  • void tiempo2str(char *buf,time_t tiempo)

    Rellena una cadena con el tiempo en formato "AAAAMMDDhhmm" que se corresponde con tiempo como el número de segundos desde 01/01/1970.

  • time_t dia1_este_mes(time_t tiempo)

    Nos proporciona el tiempo en segundos que se corresponde al primer segundo del mes en que cae tiempo.

  • time_t dia1_siguiente_mes(time_t tiempo)

    Nos proporciona el tiempo en segundos que se corresponde al primer segundo del mes siguiente al mes en que cae tiempo.

  • time_t clipping_mensual(void)

    Fija para las variables globales tiempo_inicial y tiempo_final apropiadas para un período de un mes. Básicamente "tiempo_inicial=dia1_este_mes(ahora)" y "tiempo_final=dia1_siguiente_mes(ahora)".

    Si estamos en las cuatro primeras horas del mes, toma como base el mes anterior. Esto se emplea para poder generar o refrescar los archivos históricos.

  • void activa_clipping_mensual(int argc,char *argv[])

    Si se le pasa un parámetro, lo considera tiempo inicial. El final será el instante actual. Si se le pasan dos parámetros, el primero será el tiempo inicial y el segundo el tiempo final. Los tiempos están en formato "AAAAMMDDhhmm".

    Si no se le pasa ningún parámetro, se utiliza clipping_mensual().

Rutinas version

El fin de estas rutinas es proporcionar información sobre la versión que se está ejecutando de la librería.

  • const unsigned char *version_html(void)

    Nos proporciona un texto HTML.

  • const unsigned char *version_txt(void)

    Nos proporciona un texto en ASCII.

  • const unsigned char *version(void)

    Nos proporciona un texto con la versión de la librería.

  • const unsigned char *version_fecha(void)

    Nos da un texto con la fecha de la librería.

  • const time_t libreria_timestamp()

    Esta rutina nos dá el timestamp en el momento de compilar la librería. Utilizado, por ejemplo, para decidir si la salida HTML debe renovarse o no debido a posibles cambios en la gestión de la librería. También se emplea como uno de los criterios para decidir si los ficheros caché están o no actualizados.

Rutinas util

Diversas rutinas optimizadas. Se redefinen las rutinas estándar para que la librería emplee las rutinas optimizadas, usando #undef y #define.

  • unsigned char *strchr_jcea(unsigned char *s,int c)

    Devuelve un puntero a la posición de la cadena s donde aparece el carácter c. Si no aparece, devuelve NULL. Semejante a strchr().

  • int strcmp_jcea(unsigned char *s1,unsigned char *s2)

    Dice si una cadena es mayor o menor que otra. Semejante a strcmp().


Caller ID

En la distribución se incluye un programa en C y un script que, usando las funcionalidades de la librería "CONEXIONES", realiza un listado de usuarios que conectan a través de varios números de teléfono diferentes. Ello puede indicar, por ejemplo, que una misma cuenta de acceso está siendo empleada por varias personas distintas. Debe compilarse el programa en C con algo similar a

gcc conexiones_solaris_sparc.o caller_id.c -o caller_id (Solaris/Sparc)
gcc conexiones_linux_x86.o caller_id.c -o caller_id (Linux/x86)

Para obtener el listado se ejecutará el script "caller_id.sh".


Versión 14

La configuración de este módulo se realiza enlazando la librería con los datos concretos de cada instalación en particular. Los cambios respecto a la versión 13 son muy numerosos, tanto en posibilidades de configuración como en su estructura. Por ejemplo, numerosas variables que en la versión 13 sólo podían contener un valor, ahora son matrices de tamaño ilimitado. Los valores que se pueden configurar son los siguientes:

  • char *RED[]

    Las clases C a las que se les permite acceder como "Usuario". El resto de direcciones son rechazadas con un mensaje de "Usted no es un usuario nuestro". Cuando se especifica una clave válida en la URL del CGI, siempre se permite el acceso.

    El último elemento es NULL.

  • char *CLAVE

    La clave de administrador para el CGI. Conociendo esa clave se puede consultar la información de cualquier usuario y de cualquiera de nuestras IPs, así como los archivos históricos correspondientes.

  • char *D_HISTORICO

    Directorio donde se almacenan los archivos históricos de los usuarios.

  • typedef struct { char *ip; char *usuario; } t_ip_usuario; extern t_ip_usuario IP_USUARIO[]
  • Esta estructura permite asignar un usuario concreto a una IP fija. De esta forma es posible, por ejemplo, que un usuario que se monitoriza con MRTG pueda consultar sus estadísticas sin necesidad de que aparezca un registro START en el RADIUS.

    El último elemento es {NULL, NULL}.

  • typedef struct { void (*abre_log) (char *f_detalle, char *usuario); void (*cierra_log) (void); log_estado (*lee_registro) (registro_log *registro); } t_log; typedef struct { char *path; char *AT_ISP; t_log *log; } t_accounting; t_accounting accounting[]
  • Esta estructura contiene toda la información necesaria para localizar y procesar los archivos de logs. path indica su Path de acceso, AT_ISP indica si debe añadirse algún sufijo en plan @isp, y cuál es. log es un puntero a una estructura que contiene punteros a las rutinas para acceder a ese fichero de log:

    • void (*abre_log) (char *f_detalle, char *usuario)

      Esta rutina abre un archivo de log. Sólo se permite tener un archivo de log abierto simultaneamente. f_detalle es el path del archivo, y usuario es el usuario cuyos registros nos interesan. Si es una cadena vacía "" indicamos que estamos interesados en todos los registros de todos los usuarios.

    • void (*cierra_log) (void)

      Cierra el registro de log abierto.

    • log_estado (*lee_registro) (registro_log *registro)

      Devuelve un registro.

    El último elemento es {NULL, NULL, NULL}.

  • int main_conexiones(int argc,char *argv[],char *env[])

    Esta rutina es la que se llama para realizar la gestión de logs. Es llamada por una rutina main externa, proporcionada por el usuario de la librería, para que éste pueda realizar el procesado previo que estime conveniente.

La librería se distribuye con un fichero "Makefile". Por lo tanto basta con teclear "make" para generar la librería y un par de ejecutables de demostración.


Versión 13

La configuración de este módulo se realiza enlazando la librería con los datos concretos de cada instalación en particular. Los valores que se pueden configurar son los siguientes:

  • char *RED

    La clase C a la que se le permite acceder como "Usuario". El resto de direcciones son rechazadas con un mensaje de "Usted no es un usuario nuestro". Cuando se especifica una clave válida en la URL del CGI, siempre se permite el acceso.

    Siempre debe existir.

  • char *CLAVE

    La clave de administrador para el CGI. Conociendo esa clave se puede consultar la información de cualquier usuario y de cualquiera de nuestras IPs, así como los archivos históricos correspondientes.

    Siempre debe existir.

  • char *AT_ISP

    Aquí se indica la coletilla a añadir al login de usuario a la hora de buscarlo en los ficheros de detalle RADIUS. Típicamente es algo de la forma "@ISP".

    Siempre debe existir.

  • char *D_HISTORICO

    Directorio donde se almacenan los archivos históricos de los usuarios.

    Siempre debe existir.

  • void (*abre_log) (char *f_detalle)
    void (*cierra_log) (void)
    log_estado (*lee_registro) (registro_log *registro)

    Estas funciones son stubs para permitir ampliar la librería con acceso a información RADIUS adicional, como una base de datos o un sistema remoto.

    Siempre deben existir.

  • int main(int argc,char *argv[],char *env[])

    Esta función es la primera en ejecutarse de la librería. Normalmente invoca directamente la rutina "main_conexiones". No obstante puede sustituirse por lo que sea necesario. Por ejemplo, puede emplearse para realizar un programa para un propósito concreto, que sólo emplee las rutinas de acceso a los ficheros de detalle RADIUS.

    Siempre debe existir.

  • char *CSIVs[]

    Esta tabla permite configurar la librería con las direcciones locales de los ficheros RADIUS de detalle.

    Siempre debe definirse, al menos, un fichero. No es necesario que exista, pero debe definirse algo en este campo.

En la distribución se incluye un archivo "conex_conf.c", con una configuración de ejemplo. Copie dicho fichero a otro llamado, por ejemplo, "radius.c", adáptelo a sus necesidades y enlace todos los modulos con un comando similar al siguiente:

gcc conexiones_solaris_sparc.o radius.c -o conexiones (Solaris/Sparc)
gcc conexiones_linux_x86.o radius.c -o conexiones (Linux/x86)

Por último, el fichero se instala en el directorio CGI correspondiente, y se comprueba que el UserID que lo ejecute desde el servidor web, tendrá permisos para acceder a los ficheros RADIUS y a los archivos históricos.


Configuraciones Especiales

Todas las configuraciones locales se definen a través de un fichero como el "conex_conf.c" que se incluye de ejemplo. Dichas configuraciones son lo bastante flexibles como para poder emplear la librería en entornos muy variados.

En algunos casos, no obstante, la adaptación a un problema en particular no es obvia.

  • Más de una clase C

    La versión 13 sólo maneja adecuadamente clases IP A, B y C, y sólo una clase simultaneamente. Si un proveedor, entonces, tiene más de una clase C, el programa se configurará con una de ellas, y las otras serán rechazadas.

    Este problema se solucionará en versiones subsiguientes si existe demanda. En cualquier caso, cuando el administrador utiliza la clave de acceso CGI, o la librería es ejecutada directamente desde la línea de comando, no se comprueba la clase. Por lo tanto, este problema, cuando la librería se utiliza con fines de administración, no es tal.

  • El ISP no tiene diversos CPI's asociados

    La versión 13 de la librería exige que siempre se añada una coletilla al identificador de usuario, a la hora de buscarlo en los logs. Por ejemplo, el usuario "jcea" será buscado en los logs como "jcea@argo". Esta situación es bastante típica.

    Sin embargo existen numerosos proveedores que hospedan un único CPI, por lo que no añaden ninguna coletilla. No se puede quitar la coletilla, ya que esta versión (13) la exige. Lo que sí se puede hacer es utilizar las funciones STUB para interceptar la función de lectura de registro, añadiendo la coletilla de forma interna. Por ejemplo:

    ...
    char *AT_ISP="@pepito";
    ...
    log_estado lee_registro_con_parche(registro_log *registro) {
    log_estado estado;
    
      estado=lee_registro_detalle_radius(registro);
    
      /*
      ** Cuidado con el overflow
      */
      strcat(registro->nombre,AT_ISP);
      return estado;
    }
    ...
    void (*abre_log) (char *f_detalle)=abre_log_detalle_radius;
    void (*cierra_log) (void)=cierra_log_detalle_radius;
    log_estado (*lee_registro) (registro_log registro)=lee_registro_con_parche; /* OJO */
    ...
    

  • El ISP diferencia diversas fuentes RADIUS con "@"

    Este caso es el inverso del anterior: el ISP siempre añade una coletilla, pero dicha coletilla es diferente según por dónde entre el usuario (infovía, nodo local, proxy, etc). A nosotros lo que nos interesa es el estado global; no nos importa por dónde acceda.

    La solución es la misma que en el caso anterior, solo que en vez de añadir una coletilla genérica, se sustituye cualquier coletilla que exista por la genérica. Por ejemplo:

    ...
    char *AT_ISP="@pepito";
    ...
    log_estado lee_registro_con_parche(registro_log *registro) {
    log_estado estado;
    char *p;
    
      estado=lee_registro_detalle_radius(registro);
      p=strchr(registro->nombre,'@');
      if(p!=NULL) *p='\0';
    
      /*
      ** Cuidado con el overflow
      */
      strcat(registro->nombre,AT_ISP);
      return estado;
    }
    ...
    void (*abre_log) (char *f_detalle)=abre_log_detalle_radius;
    void (*cierra_log) (void)=cierra_log_detalle_radius;
    log_estado (*lee_registro) (registro_log registro)=lee_registro_con_parche; /* OJO */
    ...
    

  • Los logs RADIUS no se graban en un fichero de detalle

    Un caso típico sería el almacenamiento en una base de datos. En casos así basta reemplazar las rutinas STUB abre_log, cierra_log y lee_registro, por otras equivalentes pero que tomen su entrada de los logs correspondientes. Siempre que se atengan a las especificaciones de la interfaz, la librería funcionará sin ningún tipo de problema.


Archivos Históricos

Una de las características interesantes de la librería "CONEXIONES" es su capacidad para generar estadísticas históricas, generalmente mes a mes. Para ello se van almacenando las estadísticas, usuario a usuario, en el directorio que se haya configurado. Cada usuario es un fichero, cuyo nombre coincide con su UserID.

Analizando la salida HTML de la librería, se observa la intercalación de etiquetas "<!mensual>". Dichas etiquetas aparecen siempre solas en una línea de la salida, y delimitan las zonas "interesantes" de las puramente anecdóticas. De esta forma, si se pasa la salida de la librería a través de un script apropiado, se filtraran los datos irrelevantes, y el resultado puede concatenarse con lo que ya existiese en el archivo histórico.

Una vez al mes, o con la periodicidad que se estime oportuno, se realizan los siguientes pasos:

  1. Generación de un listado de usuarios con acceso RADIUS
  2. Para cada uno de esos usuarios, ejecutar la librerí sobre él
  3. Filtramos los datos irrelevantes
  4. Concatenamos el resultado con el archivo histórico de dicho usuario
  5. Una vez completados todos los usuarios, rotamos los logs RADIUS para que las estadísticas empiecen de cero con el nuevo mes

A continuación se incluye un script para cubrir esa necesidad. El script se ejecuta con el cambio de mes, vía CRON. Hay que tener mucho cuidado para que el proceso tenga permiso de escritura en el directorio histórico.

# Guarda los logs antiguos y empieza desde cero otra vez
#
# Jesús Cea Avión
# jcea@argo.es
#
# 21/May/97
#
# 26/Jun/97 Añadidos CSIV de Bilbao y Sevilla
#
# 10/Dic/97 Guarda las estadísticas mensuales de cada usuario
#
# 16/Ene/98 Corrige fallos en el script: ENE->JAN, y que en ese
#           mes ponga el AÑO anterior. Además, se invoca el AWK con
#           el PATH completo, ya que desde el CRON pillaba el antiguo (no GNU).
#
# 05/May/98 Corrije un fallo con la fecha que se grababa
#
# 30/Sep/98 Si en el fichero RADIUS se define "password=" sin espacio
#           entre el "password" y el "=", no se reconocía el usuario.
#           CAMBIO esa parte por otra, menos proclible a problemas y más rápida.
#

# Guarda las estadísticas de cada usuario

#cat /etc/raddb/usuarios_INFOVIA | sed 's/=/ /g' | awk '$2=="Password" {print $1}' | \
#        sed 's/@.*//g' >/tmp/conexiones.$$

grep "@" /etc/raddb/usuarios_INFOVIA | sed 's/@.*//g' >/tmp/conexiones.$$

cd /export/home/argo/infovia/usuarios/

# Se ejecuta tras las doce de la noche, así que pone el mes anterior.
# Si estamos en enero, pone diciembre del año anterior.

fecha=`date | /usr/local/bin/awk '$2=="Feb" {mes="Enero"} \
        $2=="Mar" {mes="Febrero"}       $2=="Apr" {mes="Marzo"}         \
        $2=="May" {mes="Abril"}         $2=="Jun" {mes="Mayo"}          \
        $2=="Jul" {mes="Junio"}         $2=="Aug" {mes="Julio"}         \
        $2=="Sep" {mes="Agosto"}        $2=="Oct" {mes="Septiembre"}    \
        $2=="Nov" {mes="Octubre"}       $2=="Dec" {mes="Noviembre"}     \
        $2=="Jan" {mes="Diciembre"; $7=$7-1} {print mes" "$7}'`

for i in `cat /tmp/conexiones.$$`
do
        touch $i
        echo "<center><h2>$fecha</h2></center>" >> $i
        /export/home/webmaster/cgi-bin/conexiones $i | \
        /usr/local/bin/awk '$1=="<!mensual>" {flag=!flag; next} flag {print}' >> $i

done
        
rm -f /tmp/conexiones.$$



# Madrid
cd /var/adm/radacct/172.16.192.1
mv detalle detalle.2
touch old
cat detalle.2>>old
rm -r detalle.2


# Barcelona
cd /var/adm/radacct/172.16.193.1
mv detalle detalle.2
touch old
cat detalle.2>>old
rm -r detalle.2

# Valencia
cd /var/adm/radacct/172.16.192.33
mv detalle detalle.2
touch old
cat detalle.2>>old
rm -r detalle.2

# Bilbao
cd /var/adm/radacct/172.16.192.49
mv detalle detalle.2
touch old
cat detalle.2>>old
rm -r detalle.2

# Sevilla
cd /var/adm/radacct/172.16.192.65
mv detalle detalle.2
touch old
cat detalle.2>>old
rm -r detalle.2

Por supuesto, este script no se lista para ser empleado tal cual, sino que se incluye como ejemplo de las posibilidades del programa.

En el diseño del script se advierte una "race condition", ya que entre el primer usuario y el último pueden transcurrir algunos minutos, en función de la velocidad del equipo y del número de usuarios en juego. En el caso de ARGO no es relevante. En el caso de otros proveedores más "cargados" resulta recomendable mover todos los fichero RADIUS a otro lugar y empezar ficheros RADIUS nuevos ANTES de iniciar el proceso usuario por usuario. Esa es la forma adecuada de hacerlo pero, como ya he dicho, en ARGO no es un problema y usar esa técnica obliga a tener dos librerías "CONEXIONES" separadas: una para el uso diario (que opera sobre los ficheros de detalle normales) y otra para el uso mensual, que opera sobre las salvaguardas de dichos ficheros.


Cosas por Hacer

  • Bajo SCO parece haber un problema todavía no identificado con el manejo de long y long long. El comando "userstats" funciona perfectamente, pero al ejecutar el CGI, los campos de bytes y paquetes transmitidos siempre están a cero. Problema comunicado por Arturo García Mazorra (arturo@tyc.es).

  • Poder listar el histórico de las conexiones en el mes en curso, de forma detallada.

  • Que cuando el CGI detecta problemas con permisos, ficheros, etc, lo indique por pantalla, como mecanismo de diagnóstico, cuando la librería se compila con la opción "DEBUG".

  • Si el cliente acepta GZIP, manda el histórico comprimido. Ojo con la cabecera "Vary".

  • Cuando hay grandes tráficos, "userstats" muestra los valores en notación científica, y el sort no clasifica correctamente.

  • Mejor soporte para ficheros de detalle estándares. En especial lo relativo al soporte del formato fecha/hora.

  • Compilación bajo Microsoft Windows. Esto no lo voy a hacer yo. ¿Alguien se anima?.

  • Suponiendo que todos los usuarios se conecten más o menos igual, el tiempo de generación de las estadísticas mensuales es O(n2). Hay que reducirlo a O(n).

  • Gestión correcta de los usuarios a los que se permite varias conexiones simultaneas.

  • La gestión del horario de verano no es muy correcta, ya que en el paso invierno->verano se resta una hora a las dos de la madrugada (no a las tres) y en el paso verano->invierno probablemente haga lo contrario. Esto es prácticamente inevitable, salvo cuando el start y el stop se encuentran en diferentes zonas horarias; esto se puede detectar restando las fechas stop y start, y comparándolo con la duración de la conexión que aparece en el stop.

  • Si hay algún problema con el usuario, no devuelve ni "Last-Modified" ni "Expires".

  • Que en las estadísticas obtenidas a partir de ficheros de log MRTG, no aparezca "número de conexiones", "tiempo", paquetes enviados/recibidos, etc.

  • Si de un usuario se extraen estadísticas desde RADIUS y desde MRTG, la librería siempre dirá que está desconectado, ya que el MRTG proporciona la información más reciente.

  • Con la capacidad de ejecutar procesos externos, es necesario controlar el filtrado de información a través de los descriptores de fichero, variables de entorno, etc.

  • Como los procesos que utilizan la librería duran poco tiempo, no hacemos un wait para "recoger" al hijo cuando se lanzan procesos externos.

  • Que en la ejecución de los procesos externos se puedan relizar sustituciones en en los parámetros, en plan $user o $fecha1, $fecha2.

  • Cuando un mismo usuario aparece bajo varios CPIs, no es posible distinguirlo. Esto puede causar problemas.

  • La existencia de CPIs secundarios no debería obligar a releer los archivos de detalle varias veces.

  • Actualizar la documentación online y la que se incluye con el programa.

  • La librería no soporta correctamente aquellas cuentas RADIUS que permiten varias conexiones simultaneas. Esto implica también que si una cuenta con una única conexión intenta otra mientras ya está conectado, aparezca un mensaje de que el usuario no está conectado en estos momentos. ¡¡No obstante se le ha reconocido correctamente por su IP!!.

  • En la visualización gráfica de conexiones:

    • El intervalo generado es de un mes. A la hora de trazar el gráfico, se considera exclusivamente el día, hora y minuto de las conexiones, no su mes o año. Ello hace que se superpongan en el mismo gráfico las conexiones de meses diferentes, si así se especifica.

    • Las conexiones se van dibujando en el orden en que se desconectan, machacando lo que ya se haya dibujado. Por tanto una conexión más corta que otra, pero simultanea, no se verá. Tampoco se visualizarán los intentos fallidos de conexión (por sesiones) cuando ya haya una conexión establecida.

    • Por razones bastante obvias, los días con cambio de horario no son dibujados correctamente.

  • Si se envían varios Alive por conexión, la librería no funciona correctamente. Los interpretará como varios Start. ¿Alguien puede decirme si eso es un problema?.

  • Hacer un CGI común para tareas básicas que ahora se realizan con la librería, pero a través de la línea de comandos. Un ejemplo es mostrar los usuarios que estaban conectados en un momento determinado.

  • En la versión actual existe una inconsistencia entre la ejecución de procesos externos (con el espacio en la URL) y el uso de su salida con el sistema caché.

  • Debe hacerse accesible la IP del NAS que usa el usuario.

  • Pasar los scripts a C nativo.

  • Debo definir "main" para que "autoscan" detecte automáticamente la librería para "configure".

  • La librería debería ser útil también para los clientes, no sólo para el ISP. Alguien debería de preocuparse de realizar un módulo de entrada que permita capturar cosas como los logs PPP del cliente para poder obtener las mismas estadísticas que nosotros, pero en su caso particular. Este añadido debería ser trivial.

  • Compilación correcta bajo HP-UX.

  • El tráfico registrado por MRTG no debería contar como conexiones.

  • Documentar que los usuarios de Infovía/Infovía Plus para el script mensual/diario lo toma de /etc/raddb/usuarios_INFOVIA.

  • Documentar que el usuario debe poner su nodo local en "nodo local".

  • Añadir pruebas a realizar con archivos históricos.

  • No debería poderse hacer caché cuando se toma la salida de un programa.

  • El TimeStamp de la librería cambia cuando se modifica algún fichero, no sólo los que se compilan con la librería, sino también los scripts, por ejemplo.

  • Muchos de los scripts de apoyo a la librería no soportan números de 64 bits, por lo que pueden dar resultados inesperados cuando el tráfico de un usuario es elevado.

  • La última modificación del MOTD de un usuario RADIUS concreto debería afectar a los campos "Last-Modification" y "Expires".

  • Acelerar lo máximo posible la ejecución del script "motd_stats_web", posiblemente pasándolo a C nativo.


La Librería

     

  • Versión 21 (28/Dic/00)

    Verificación del fichero conexiones21_tar.gz:

    MD5: 0977831abea9f3c8d8c5f1d11f45a30e
    SHA-1: e35cea3c18faa1c03d46880cb367a1911ea80af4
    
     

  • Versión 20 (27/Nov/00)

    Verificación del fichero conexiones20_tar.gz:

    MD5: 2c9667d48b7218ba4f5587690f40a4be
    SHA-1: 804a720348e009abd82da6923102f7fc40a47769
    

  • Versión 20b13 (28/Feb/00)

    Verificación del fichero conexiones20b13_tar.gz:

    MD5: 7eaca2616584900561ebaac9d23a45ef
    SHA-1: a7f1b07487a2240f19a3df125427315631db6ad2
    

  • Versión 20b6 (07/Feb/00)

    Verificación del fichero conexiones20b6_tar.gz:

    MD5: 3d687a0c2534814a74876021b895b27e
    SHA-1: baebfc6bdf459b2965e62df60672a05c02462b35
    

  • Versión 20b5 (31/Ene/00)

    Verificación del fichero conexiones20b5_tar.gz:

    MD5: 586fac47f45e67928f2198d85903344a
    SHA-1: 31185fbeb7a0a45bdcc134c7bcf93cb593ae2d97
    
     

  • Versión 19 (20/Oct/99)

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Conexiones-HOWTO
      Documento elaborado por Pol Navarro (pol@sumi.es) para configurar, compilar e instalar la librería en un minuto.

    • Conexiones-README
      Este documento contiene información sobre algunos detalles a tener en cuenta a la hora de utilizar la librería.

    • Configure
      Script de configuración de la librería. No debe invocarse directamente, sino a través de make config.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • called_id, called_id.c, called_id.h, called_id2.h
      Ejemplo de identificación de los diferentes números telefónicos a los que llaman los usuarios.

    • called_id_infovia_plus.c, called_id_interpista.c, called_id_retenet.c
      Datos de los nodos de cada una de las redes.

    • called_id_nodo_local.c
      Identificación de los números de teléfono de nodo local del proveedor, si los tiene. Este fichero debe ser editado convenientemente en cada instalación, si el ISP posee nodo local.

    • called_id_wrapper.c
      Proxy para identificar los números de teléfono. Este fichero también contiene los scripts para actualizar las tablas de nodos.

    • caller_id, caller_id.c
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • causa_desconexion.h, causa_desconexion.c
      Pasa a texto la causa de una desconexión.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • conf.h, conf.c
      En estos ficheros se concentra toda la configuración de la librería: localización de los ficheros de detalle, módulos de lectura de logs, clases C del proveedor, clave de acceso del administrador, archivos históricos, etc. Algunos de los datos deben configurarse editando los ficheros, y otros datos se configuran mediante make config.

    • config-sh
      Script de configuración de la librería. No debe invocarse directamente, sino a través de make config.

    • depend
      Dependencias entre módulos.

    • diario
      Script para generar los archivos históricos, rotar los logs y dejarlos de forma que se puedan aplicar tecnologías de caché.

    • lee_cache.h, lee_cache.c
      Módulo intermedio en la lectura de ficheros de detalle o logs, aplicando tecnología caché para acelerar considerablemente las operaciones.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • lee_radius_infovia_plus.h, lee_radius_infovia_plus.c
      Módulo de lectura de ficheros de detalle RADIUS, con las peculiaridades de Infovía Plus.

    • lee_radius_iplus_cache.h, lee_radius_iplus_cache.c
      Igual que el anterior, pero aplicando tecnología caché para acelerar considerablemente las operaciones.

    • parse.none
      Script de uso interno, empleado por make config.

    • regenera_ficheros
      Script de uso interno, empleado por make config.

    • salida.h
      Módulo de salida genérico.

    • salida_grafico.h, salida_grafico.c
      Módulo de salida gráfica, empleando la librería GD, en formatos GIF o PNG.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • tiempo.h, tiempo.c
      En este módulo se concentran las operaciones que la librería realiza con el tiempo.

    • timestamp.c
      Este módulo permite identificar la fecha de compilación de la librería. Se utiliza para generar los datos de la cabecera HTTP.

    • userstats, userstats.c
      Módulo de visualización de todos los usuarios RADIUS.

    • util.h, util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones19_tar.gz:

    MD5: 059abf59dc16019be11cf2ca61735c8e
    SHA-1: 874745deb0b582f6d54a1142cd503957eccaecf5
    

  • Versión 19b13 (09/Sep/99)

    Verificación del fichero conexiones19b13_tar.gz:

    MD5: 06a7c26748ddfc82e449cc6de808d39f
    SHA-1: becdf6ab969a6bd062461fe094641fab5eae9f65
    

  • Versión 19b9 (07/Sep/99)

    Verificación del fichero conexiones19b9_tar.gz:

    MD5: 9ada81e8e2d77cb366d7a1581f2c4338
    SHA-1: 92694ee22d2c2db0cfabe0024a11db5bbf7b798d
    

  • Versión 19b7 (05/Ago/99)

    Verificación del fichero conexiones19b7_tar.gz:

    MD5: 7bbd7071fee85e0a31f5ccca03a6d034
    SHA-1: 2e0fa4e291637694fb722fc823661bf58c3d6b18
    

  • Versión 19b2 (26/Jul/99)

    Verificación del fichero conexiones19b2_tar.gz:

    MD5: 81740e38da99ed9d36e7491b7292388f
    SHA-1: 3413e5dee40481035ae31673d6a176ec1479729b
    
     

  • Versión 18 (07/Jul/99)

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Conexiones-HOWTO
      Documento elaborado por Pol Navarro (pol@sumi.es) para configurar, compilar e instalar la librería en un minuto.

    • Conexiones-README
      Este documento contiene información sobre algunos detalles a tener en cuenta a la hora de utilizar la librería.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • caller_id, caller_id.c
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • config.h, config.c
      En estos ficheros se concentra toda la configuración de la librería: localización de los ficheros de detalle, módulos de lectura de logs, clases C del proveedor, clave de acceso del administrador, archivos históricos, etc.

    • depend
      Dependencias entre módulos.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • mensual
      Script para generar los archivos históricos.

    • salida.h
      Módulo de salida genérico.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • timestamp.c
      Este módulo permite identificar la fecha de compilación de la librería. Se utiliza para generar los datos de la cabecera HTTP.

    • userstats, userstats.c
      Módulo de visualización de todos los usuarios RADIUS.

    • util.h, util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones18_tar.gz:

    MD5: dda7417c20983bf0385dc6419b2ec3e0
    SHA-1: e0c162e80c7b9bfb76cb49f5fe0a8ce66c482d81
    

  • Versión 18b8 (01/Jul/99)

    Verificación del fichero conexiones18b8_tar.gz:

    MD5: 41fbd9d2efdd9015b33a9998e8a48d1d
    SHA-1: 251869d30bd9489e6416c7e9063d2f1fac407dee
    


    En las versiones anteriores, la verificación se realiza sobre el fichero GZ. En las versiones más modernas, la verificación se efectúa sobre el fichero TAR, ya que muchos navegadores realizan la descompresión "al vuelo".

  • Versión 18b7 (01/Jul/99)

    Verificación del fichero conexiones18b7_tar.gz:

    MD5: 1b0757d2fb2a92c9e16cfa4052a79a4a
    SHA-1: 13d82172a0f91ec75f4a85a383be47c63d9aab1a
    

  • Versión 18b6 (30/Jun/99)

    Verificación del fichero conexiones18b6_tar.gz:

    MD5: 67de251a6de6a98fe0d5df9b0f48fc04
    SHA-1: c00a1f9eb3a0390f424daf2ecb264017ca9396ff
    

  • Versión 18b5 (28/Jun/99)

    Verificación del fichero conexiones18b5_tar.gz:

    MD5: 6c602f923c6f71871110576f0eefa01f
    SHA-1: c6aff10beed2d823af8f08b7ccd4550ac3e6f478
    

  • Versión 18b3 (21/Jun/99)

    Verificación del fichero conexiones18b3_tar.gz:

    MD5: a528c97e12404f3e8094b60ad5ec9410
    SHA-1: 4f0abcd6d68f9d252fdb6d14abffcd03785671f6
    
     

  • Versión 17 (10/May/99)

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Conexiones-HOWTO
      Documento elaborado por Pol Navarro (pol@sumi.es) para configurar, compilar e instalar la librería en un minuto.

    • Conexiones-README
      Este documento contiene información sobre algunos detalles a tener en cuenta a la hora de utilizar la librería.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • caller_id, caller_id.c
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • config.h, config.c
      En estos ficheros se concentra toda la configuración de la librería: localización de los ficheros de detalle, módulos de lectura de logs, clases C del proveedor, clave de acceso del administrador, archivos históricos, etc.

    • depend
      Dependencias entre módulos.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • mensual
      Script para generar los archivos históricos.

    • salida.h
      Módulo de salida genérico.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • timestamp.c
      Este módulo permite identificar la fecha de compilación de la librería. Se utiliza para generar los datos de la cabecera HTTP.

    • userstats, userstats.c
      Módulo de visualización de todos los usuarios RADIUS.

    • util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones17_tar.gz:

    MD5: 0e2b2c76f01142fea443f908121d1a96
    SHA-1: 766facbf8abccab8ff5db59c5ff081a86e139f99
    

  • Versión 17b6 (20/Abr/99)

    Verificación del fichero conexiones17b6_tar.gz:

    MD5: 79f3d066bb7f1e8ca471e3c70f002fcc
    SHA-1: de82a3557a043ad0c2560b53cd48e9674217054d
    

  • Versión 17b4 (08/Abr/99)

    Verificación del fichero conexiones17b4_tar.gz:

    MD5: ee663907a4b8b67a0f7ffdad0585855f
    SHA-1: d44123ed38eee1aa5e72139d77bbe277c55b1c14
    
     

  • Versión 16 (29/Mar/99)

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Conexiones-HOWTO
      Documento elaborado por Pol Navarro (pol@sumi.es) para configurar, compilar e instalar la librería en un minuto.

    • Conexiones-README
      Este documento contiene información sobre algunos detalles a tener en cuenta a la hora de utilizar la librería.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • caller_id, caller_id.c
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • config.h, config.c
      En estos ficheros se concentra toda la configuración de la librería: localización de los ficheros de detalle, módulos de lectura de logs, clases C del proveedor, clave de acceso del administrador, archivos históricos, etc.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • mensual
      Script para generar los archivos históricos.

    • salida.h
      Módulo de salida genérico.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • userstats, userstats.c
      Módulo de visualización de todos los usuarios RADIUS.

    • util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones16_tar.gz:

    MD5: 199a88d8d4d6215ed3f26629b07593ac
    SHA-1: 626bc5103d445dafbbe82c97aa4f1ae1cf02c211
    

  • Versión 16b7 (08/Mar/99)

    Verificación del fichero conexiones16b7_tar.gz:

    MD5: 6b223ea8217d3caacf98cb0d1a5cc814
    SHA-1: bf15492d2f1631bf6332872b462f4ebb66e635b2
    

  • Versión 16b6 (01/Mar/99)

    Verificación del fichero conexiones16b6_tar.gz:

    MD5: e8c12e5d175a8d90b1bee15e5e731a35
    SHA-1: 9e06560a770221b35da55fb5dfe13e590aa3c69c
    

  • Versión 16b3 (08/Feb/99)

    Verificación del fichero conexiones16b3_tar.gz:

    MD5: 7333759557f34eab6f0cae11695a1b61
    SHA-1: d7534a2cec4218c47ea80f554d2fabbb286481aa
    
     

  • Versión 15 (12/Ene/99)

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Conexiones-HOWTO
      Documento elaborado por Pol Navarro (pol@sumi.es) para configurar, compilar e instalar la librería en un minuto.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • caller_id, caller_id.c
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • config.h, config.c
      En estos ficheros se concentra toda la configuración de la librería: localización de los ficheros de detalle, módulos de lectura de logs, clases C del proveedor, clave de acceso del administrador, archivos históricos, etc.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • mensual
      Script para generar los archivos históricos.

    • salida.h
      Módulo de salida genérico.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • userstats, userstats.c
      Módulo de visualización de todos los usuarios RADIUS.

    • util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones15_tar.gz:

    MD5: e79968f3d870736d31ca09678d39f1fc
    SHA-1: b2dce633fd06441fd0abfa933f0d73255a4cee8c
    

  • Versión 15b1 (15/Dic/98)

    Verificación del fichero conexiones15b1_tar.gz:

    MD5: 780cda65760742277b9d208e1ea16602
    SHA-1: 9df39162e21a597d47b78a4422527b8af0995390
    
     

  • Versión 14 (14/Dic/98)

    Ésta es la primera versión distribuida 100% con el código fuente completo. Con ello se pretende contribuir a su mayor difusión y a un desarrollo más rápido. Los términos de la licencia se pueden ver a continuación, y se incluyen en el fichero "COPYING":

    Librería CONEXIONES
    Versión 14
    14/Dic/98

    Jesús Cea Avión
    jcea@argo.es
    http://www.argo.es/~jcea/
    http://www.argo.es/~jcea/artic/radius02.htm

    CONDICIONES DE USO Y DISTRIBUCIÓN

    La versión 14 de la librería "CONEXIONES" tiene las siguientes condiciones de uso y distribución:

    1. El titular de la licencia, a todos los efectos, es "Jesús Cea Avión".

    2. Cualquier cambio en la política de licencias será aplicable a las versiones siguientes de la librería, nunca de forma retroactiva. En caso necesario, el autor proporcionará versiones antiguas bajo la licencia activa en el momento de su distribución original.

    3. En caso preciso, un licenciatario puede solicitar al titular un tipo de licencia específico, si resulta necesario para un producto concreto.

    4. Bajo los términos de esta licencia, queda prohibido obtener ningún tipo de beneficio económico derivado de la distribución de esta librería.

    5. Bajo los términos de esta licencia, queda prohibido el uso de esta librería en cualquier tipo de producto comercial.

    6. Bajo los términos de esta licencia, cualquier uso de esta librería debe mostrar en el resultado el siguiente texto:

         Librería CONEXIONES, Versión X 
         (c) 1.997-98 Jesús Cea Avión
         jcea@argo.es
         http://www.argo.es/~jcea/
         http://www.argo.es/~jcea/artic/radius02.htm
      

      Donde "X" será sustituido por la versión utilizada de la librería.

    7. Bajo los términos de esta licencia, cualquier producto que haga uso de esta librería debe ser distribuido tambien con la librería "CONEXIONES" por separado.

    8. Bajos los terminos de esta licencia, cualquier distribución de la librería "CONEXIONES" debe hacerse completa e incluyendo el código fuente de la misma.

    9. Bajo los términos de esta licencia, cualquier modificación de los ficheros que componen la librería "CONEXIONES", incluyendo los ficheros de configuración y de documentación, debe indicarse claramente. A todos los efectos, una librería modificada sigue sujeta a las condiciones de esta licencia, independientemente de la naturaleza o el volumen de los cambios efectuados.

    10. Ningún intermediario puede revocar las condiciones de esta licencia. Ese derecho pertenece exclusivamente a su titular, "Jesús Cea Avión".

    11. La distribución de este software no supone ninguna garantía de adecuación para ningún uso en particular, ni su correcto funcionamiento bajo toda circunstancia.

    12. El uso de esta librería implica la aceptación de estas condiciones.

    13. Esta licencia pretende seguir una filosofía comparable a la licencia GNU GPL. Se incluye una copia de la misma en el fichero "COPYING2". No obstante los detalles varían. Por ejemplo, esta licencia prohibe el beneficio económico derivado de la distribución de la librería, así como se reserva el derecho de modificar la condiciones de uso y distribución en cualquier momento.

      Salvo en los casos en que esta licencia difiera, las condiciones generales serán las mismas que en la GNU GPL.

    Jesús Cea Avión
    jcea@argo.es
    http://www.argo.es/~jcea/
    http://www.argo.es/~jcea/artic/radius02.htm

    Madrid, 14 de Diciembre de 1.998

    Los ficheros contenidos en esta distribución son los siguientes:

    • COPYING
      Condiciones de uso y de distribución.

    • COPYING2
      Copia de la licencia GNU GPL.

    • Makefile
      Fichero para generar la librería y algunas de sus aplicaciones de ejemplo.

    • caller_id.c, caller_id.sh
      Ejemplo de identificación de los usuarios que conectan desde varios números de teléfono diferentes.

    • conex_conf.c
      Ejemplo de uso de la librería.

    • conexiones.h, conexiones.c
      Módulo principal de la librería. Es el encargado de procesar todos los logs y de efectuar los cálculos.

    • lee_log.h, lee_log.c
      Librería genérica de lectura de registros.

    • lee_mrtg.h, lee_mrtg.c
      Módulo de lectura de ficheros de logs MRTG.

    • lee_radius.h, lee_radius.c
      Módulo de lectura de ficheros de detalle RADIUS.

    • mensual
      Script para generar los archivos históricos.

    • salida_html.h, salida_html.c
      Módulo de impresión HTML.

    • util.c
      Este módulo reemplaza una serie de rutinas genéricas de las librerías estándar, más eficientes.

    • version.h, version.c
      Este módulo proporciona información sobre la versión de la librería.

    Verificación del fichero conexiones14_tar.gz:

    MD5: eacd98df4655d06ea6b8e0d718d3f2eb
    SHA-1: 982631ba6b3f35c449ae32e9101ef9d86f3d985d
    
     

  • Versión 13_2 (14/Oct/98)

    Esta versión incluye librería para Windows/x86. Las condiciones de uso y distribución son las mismas que para la versión 13.

    Librería Objeto Relocalizable. Esta distribución está constituida por los siguientes ficheros:

    • COPYING
      Condiciones de uso y de distribución.

    • conexiones_sol_sparc.o
      Librería para Solaris/Sparc.

    • conexiones_linux_x86.o
      Librería para Linux/x86.

    • conexiones_win_x86.obj
      Librería para Windows/x86.

    • lee_log.h
      Definición de tipos y puntos de entrada para las rutinas STUBs que leen los registros RADIUS.

    • conexiones.h
      Las definiciones de datos que deben configurarse de forma local para que la librería funcione correctamente.

    • conex_conf.c
      Configuración de la librería, que debe ser modificada de forma local para que funcione correctamente. Este fichero es un ejemplo de configuración. Los administradores locales deben copiar el fichero y editar la copia según sus necesidades y estructuras locales.

    • caller_id.c
      Rutina para obtener los caller_id de los usuarios.

    • caller_id.sh
      Script que proporciona el listado de usuarios que se conectan desde varios teléfonos diferentes.

    • mensual
      Script que crea los archivos históricos. Está diseñado para ser ejecutado desde un CRON, en cada cambio de mes.

    Verificación del fichero conexiones13_2_tar.gz:

    MD5: 6e37712f285f555576605db737bcb537
    SHA-1: 3d03ffc07baf299e2e5497a63965c7dc24dc8273
    

  • Versión 13 (13/Oct/98)

    Librería CONEXIONES
    Versión 13
    13/Oct/98

    Jesús Cea Avión
    jcea@argo.es
    http://www.argo.es/~jcea/
    http://www.argo.es/~jcea/artic/radius02.htm

    CONDICIONES DE USO Y DISTRIBUCIÓN

    La versión 13 de la librería "CONEXIONES" tiene las siguientes condiciones de uso y distribución:

    1. El titular de la licencia, a todos los efectos, es "Jesús Cea Avión".

    2. Cualquier cambio en la política de licencias será aplicable a las versiones siguientes de la librería, nunca de forma retroactiva. En caso necesario, el autor proporcionará versiones antiguas bajo la licencia activa en el momento de su distribución original.

    3. En caso preciso, un licenciatario puede solicitar al titular un tipo de licencia específico, si resulta necesario para un producto concreto.

    4. Bajo los términos de esta licencia, queda prohibido obtener ningún tipo de beneficio económico derivado de la distribución de esta librería.

    5. Bajo los términos de esta licencia, queda prohibido el uso de esta librería en cualquier tipo de producto comercial.

    6. Bajo los términos de esta licencia, cualquier uso de esta librería debe mostrar en el resultado el siguiente texto:

         Librería CONEXIONES, Versión X 
         (c) 1.997-98 Jesús Cea Avión
         jcea@argo.es
         http://www.argo.es/~jcea/
         http://www.argo.es/~jcea/artic/radius02.htm
      

      Donde "X" será sustituido por la versión utilizada de la librería.

    7. Bajo los términos de esta licencia, cualquier producto que haga uso de esta librería debe ser distribuido tambien con la librería "CONEXIONES" por separado.

    8. Bajo los términos de esta licencia, queda prohibido cualquier modificación a los ficheros que componen la librería "CONEXIONES", incluyendo los ficheros de configuración y de documentación, si dichas modificaciones van a ser distribuidas, o se va a distribuir algún producto basado en ellas.

    Jesús Cea Avión
    jcea@argo.es
    http://www.argo.es/~jcea/
    http://www.argo.es/~jcea/artic/radius02.htm

    Madrid, 13 de Octubre de 1.998

    Librería Objeto Relocalizable. Esta distribución está constituida por los siguientes ficheros:

    • COPYING
      Condiciones de uso y de distribución.

    • conexiones_sol_sparc.o
      Librería para Solaris/Sparc.

    • conexiones_linux_x86.o
      Librería para Linux/x86.

    • lee_log.h
      Definición de tipos y puntos de entrada para las rutinas STUBs que leen los registros RADIUS.

    • conexiones.h
      Las definiciones de datos que deben configurarse de forma local para que la librería funcione correctamente.

    • conex_conf.c
      Configuración de la librería, que debe ser modificada de forma local para que funcione correctamente. Este fichero es un ejemplo de configuración. Los administradores locales deben copiar el fichero y editar la copia según sus necesidades y estructuras locales.

    • caller_id.c
      Rutina para obtener los caller_id de los usuarios.

    • caller_id.sh
      Script que proporciona el listado de usuarios que se conectan desde varios teléfonos diferentes.

    • mensual
      Script que crea los archivos históricos. Está diseñado para ser ejecutado desde un CRON, en cada cambio de mes.

    Verificación del fichero conexiones13_tar.gz:

    MD5: 720fff8cf5b333e485961faa125b3f88
    SHA-1: 7893f3c89c00ed856bc7d12bef078947b17a15ed
    

     

  • Versión 12 (30/Sep/98)

    Ésta fue la primera versión distribuida, como ejecutable Solaris/Sparc y Linux/x86. No era configurable ni adaptable en entornos distintos. No disponible.


Historia



Python Zope ©1998-2000 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS