inicio anterior siguiente

valor UF
"Espiando" al visitante

En este capítulo analizaremos como puede un CGI recibir información desde el mundo externo.

Aparte de lo que tradicionalmente puede obtener un programa desde el sistema operativo un CGI recibe información en dos formas diferentes.

  • i) Datos que el Browser envía al Servidor Web y que a su vez tienen dos componentes
    • Datos de sí mismo y de la conexión (son enviados siempre).
    • Datos ingresados en un form o pasados como parametros (Sólo si existen).
  • ii) Datos que el Servidor Web pone por defecto a disposición del CGI con información sobre sí mismo.

En este capítulo nos concentraremos en los datos que siempre son pasados al CGI y la manera de recogerlos.

Algunos de estos datos son:

HTTP_REFERER Documento que está solicitando el CGI.
HTTP_USER_AGENT Browser que está usando el visitante.
HTTP_USER_OS Sistema operativo está usando el visitante.
REMOTE_HOST Nombre del equipo que está pidiendo el cgi (habitualmente el Módem del ISP que está usando el visitante).
REMOTE_ADDR Dirección IP del visitante.
Una lista completa y explicada está disponible en el apéndice 1 de este tutorial.

Cuando un Servidor Web ejecuta un CGI, levanta un proceso hijo con un juego independiente de variables de entorno conteniendo estos datos.

La manera de leer estos datos en C es usando la función getenv( char *nombre), en Perl la función $ENV{"NOMBRE"}, y con Server Sides Includes nombre de la variable. Un ejemplo en C se implementa en el programa espia cuyo código (Resumido) es el siguiente:

bajar Se incluye un ejemplo en Perl, otro usando Server Side Includes y otro con el Shell de Unix

Pero el más completo es el hecho en C

/* ****************************
   Programa Espia 

   (EXTRACTO)


   Autor: Juan Manuel Doren 
   Compilar en unix con: gcc -i espia.c -o espia.cgi 
   **************************** */

#include <stdlib.h>

void imprimeVariable( char *lpzNombre );

int main(){      
/* *********************************** */

   printf("Content-Type: text/html\n\n");

   printf("<html><body bgcolor=#ffffff text=#ffffff>\n");

   printf("<p align=center><table cellpadding=4 bgcolor=000000>\n");
   printf("<tr><td color=000080 align=center>");
   printf("<b>Variables del Sistema</b></td></tr>\n");


// El programa de ejemplo que Ud. puede bajar incluye mas
// llamadas a estas funciones

   imprimeVariable("REMOTE_ADDR");
   imprimeVariable("REMOTE_HOST");

   printf("</table>\n");
   printf("</body></html>");

   return( 0 );
}


void imprimeVariable( char *lpzNombre ){
/* *********************************** */

 printf("<tr>\n");
 printf("<td bgcolor=\"#9999FF\" valign=top>%s</td>\n",lpzNombre);
 printf("<td bgcolor=\"#DDDDFF\" valign=top><font color=#000000>");

 printf("%s",getenv(lpzNombre));

 printf("</td>\n");
 printf("</tr>\n");

}
 ejecutar  con shell  con Perl

El programa utiliza el mismo metodo visto en el Capítulo 1 para generar una página HTML. La función imprimeVariable() recibe como parámetro el nombre de la variable que se desea mostrar, imprime el código HTML necesario para formatear la salida y mediante una invocación a getenv(Nombre) recupera el valor que se solicita.
En algunos casos las variables no devuelven nada. En el Apéndice 1 se discute el significado de cada una de estas y los momentos en que tienen un contenido.


 

 

 
inicio anterior siguiente