September 8 2008

Cumpleaños de Google, Felicidades

Monday, September 8, 2008 22:28
Posted in category Uncategorized

Ayer Google cumplió años.. ya lleva 10 con nosotros. La compañia se creó hace 10 años, pero Google suele celebrarlo en un día aleatorio de Septiembre, ya que según ellos, Google cumple años en Septiembre.

Primera versión del buscador

 

September 7 2008

Mi juego del Cifras y Letras

Sunday, September 7, 2008 16:26
Posted in category Otros, Programación

He estado desde hace mucho tiempo queriendo programar siempre el mítico juego del cifras y letras.

Hoy he hecho una de las partes, la parte de las letras. La verdad que no ha sido muy difícil. Para llevarlo a cabo he seguido la idea que nos comentaba Pedro Reina en su página web.
Lo he programado en PHP y utilizando Mysql como gestor de bases de datos. El código es GPL y os lo podéis descargar desde aquí.

Pero si lo que queréis es disfrutar online del juego, podéis acceder desde aquí.

Espero que lo disfruteis.

September 6 2008

Recuperar archivos borrados en Linux

Saturday, September 6, 2008 22:29

Seguro que alguna vez has borrado un fichero desde la consola y te has desesperado, todo el trabajo perdido!. Pues no desesperes, con estos sencillos pasos podrás recuperar todo tu trabajo. Ponte en situación:

  1. Creas un fichero “mitrabajo.sh” (después de horas de programación…)
  2. Sin querer lo borras…
  3. Quieres recuperarlo…!!! no te preocupes, el fichero no se ha ido al limbo… todavía..

Pasos para recuperarlo:

  1. Desmonta el sistema de ficheros, en este caso /dev/hda7
    (si fuera / -raiz- deberás desmontarlo desde un Live CD, por ejemplo Knoppix)
  2. Ejecuta el comando debugfs /punto_de_montaje #root->debugfs /dev/hda7
  3. #debugfs: lsdel
    Este comando devolvera los inodos de los ficheros borrados
    (con la hora y otras cosas sabras cual es el tuyo)
  4. #debugfs: dump -p <inode> /tmp/fic
    Este comando nos recuperará los inodos en el fichero indicando 
    (No olvides poner los "<" ">" en el inodo).

Ejemplo:

#root->debugfs  /dev/hda7
#debugfs: lsdel
#debugfs: dump -p <12> /tmp/fic

#root-> cat /tmp/fic
September 5 2008

¿Google Chrome? Primera parte, su porqué.

Friday, September 5, 2008 22:40
Posted in category Uncategorized

Os dejo un video donde los desarrolladores de Google nos van a contar el porqué de su nuevo navegador., Google Chrome.


September 4 2008

Algunos fallos graciosos en la programacion de videojuegos

Thursday, September 4, 2008 23:48
Posted in category Uncategorized

Me han pasado este video, y la verdad que no me  he resistido a colgarlo de la pagina. 

En el podemos ver los fallos más graciosos a la hora de programar videojuegos.


Espero que os guste 😉

September 3 2008

JasperReports e i-Reports Un ejemplo práctico

Wednesday, September 3, 2008 21:57
Posted in category Otros

JasperReports es una poderosa herramienta de creación de informes Java open source
que tiene la habilidad de generar ficheros PDF, HTML, XLS, CSV y XML.

JasperReports se usa comúnmente con iReports, un front-end gráfico open source para la edición de informes.
En próximos posts hablaré de este sencillo programa, el cual nos ayudará bastante a la hora de generar nuestros informes.

Os voy a presentar un ejemplo bastante sencillo de como generar a partir de un fichero .Jasper, de los que se crean con i-reports, un
informe en formato PDF

Lo primero que tenemos que hacer es conseguir el .jar con los paquetes y clases de JasperReports. El fichero .jar nos los podemos descargar de
su página web.

Crearemos una página jsp, importaremos las clases necesarias, y expecificaremos el content-type de la página como “application/pdf”

<%@ page import="java.sql.*,java.text.SimpleDateFormat,net.sf.jasperreports.engine.JasperRunManager,java.util.Map,java.util.HashMap,javax.servlet.ServletOutputStream" %>
<%@ page contentType="application/pdf" %>

Al informe se le pueden pasar parámetros

<%
      //Creamos un mapa de parametros para pasar al Reporte.
       Map parameters         = new HashMap();
       parameters.put("CC"         ,(String)request.getParameter("CC"));            
       parameters.put("referencia" ,(String)request.getParameter("referencia"));

Obtenemos una conexión a base de datos, y llamamos a JasperRunManager.runReportToPdf(), con la ruta del fichero .jasper, los parámetros y la conexión establecida.
Conseguiremos que se rellene el informe con la información obtenida de la base de datos y se mostrará el PDF en pantalla.

     //Obtenemos una conexion a una fuente de datos
       ResultSet resultado  = null;
       BaseDatos fuenteDatos= new BaseDatos((String)session.getAttribute("usuario"),(String)session.getAttribute("password"));
       Connection conexion  = null;
       try{
           fuenteDatos.conectar();
           conexion = fuenteDatos.getConexion();
        }catch(Exception ex){
        }
       byte[] bytes=null;
       try{
        bytes = JasperRunManager.runReportToPdf("C:\\www\\informes\\Certificado.jasper",parameters,conexion);
       }catch(Exception ex){
    	  ex.printStackTrace();
       }
       response.setContentLength(bytes.length);
       ServletOutputStream ouputStream = response.getOutputStream();
       ouputStream.write(bytes, 0, bytes.length);
       ouputStream.flush();
       ouputStream.close();
       conexion.close();
%>
September 2 2008

Convertir ficheros MS Excel a CSV (xlhtml)

Tuesday, September 2, 2008 20:28
Posted in category Programación

Muchas veces he tenido que vermelas con ficheros en formato MS Excel y he tenido que realizar tareas más o menos automáticas con ellos. Lo que suelo hacer es trabajar con CSV, ya que es un formato estandar y puedo sacar mucho más partido a estos ficheros que a un Excel (introducir los datos a una base de datos, generar XMLs, etc).

Bien, la pregunta es cómo conseguir pasar un fichero de formato MS Excel a CSV. He realizado un pequeño script en BASH que se encarga justamente de eso.

El único pre-requisito es el comando xlhtml, disponible mediante apt-get install xlhtml, en cualquier distribución Debian. (Para las demás distribuciones, la forma de hacerse con él no debe ser muy distinta, si tienes problemas comentamelo).

Lo primero que hace mi script es conocer si el fichero es de tipo MS Excel. En ese caso procederá a parsearlo a CSV.

	TIPO_FICHERO=`file -b "$1"`
	if [ "$TIPO_FICHERO" == "Microsoft Office Document" ]; then	# Si es un Excel
		if [ $DEBUG -eq 1 ]; then
			echo -e "${MORADO}\t\tEl fichero $1 es EXCEL  ${SIN_COLOR}\n"
			read
		fi
	transformaEXCEL2CSV "$1"	     	           	# Transfo
	else
		#Puede ser un txt, un IdeTrans.. ya se irá viendo....
		echo "El fichero  $1 no es un Excel"
	fi

La función transformaEXCEL2CSV recibe como parámetro el nombre del fichero MS Excel a convertir a CSV. Esta función lo primero que hace es conocer el número de hojas de la hoja de cálculo, para parsear cada una de ellas.

	NUMEROHOJAS=`bash ./getNumeroHojas.sh "$1"`

Como podemos ver, he creado un pequeño script que me indica el número de hojas de las que consta un fichero MS Excel.
Él código es el siguiente:

xlhtml -dp -te "$1" | awk -f filtrarExcelDP.awk

La salida de la primera parte del comando es la siguiente

<HTML>
<HEAD>
 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="xlhtml">
<TITLE>Desktop/altas.xls</TITLE>
</HEAD>
 
&lt;BODY TEXT="#000000" BGCOLOR="#FFFFFF"&gt;&lt;br&amp;gt
&lt;p&gt;There are 3 pages total.Page:0 Name:Hoja1 MaxRow:13 MaxCol:13&lt;/p&amp;gt
&lt;p&gt;Page:1 Name:Hoja2 MaxRow:-1 MaxCol:-1&lt;/p&amp;gt
&lt;p&gt;Page:2 Name:Hoja3 MaxRow:-1 MaxCol:-1&lt;/p&amp;gt
&lt;/BODY&amp;gt

De ahí que tengamos que utilizar el último filtro (awk) para obtener el número de páginas de la hoja de Excel. Hay que fijarse en la línea:

&lt;p&gt;There are 3 pages total.&lt;/p&gt;

Una vez que tenemos el número de hojas, lo que tenemos que hacer es generar la salida CSV de cada una de ellas. Para ello nos valdremos del siguiente comando:

	xlhtml -fw -asc -xp:$CONTADOR  "$1" &gt;&gt; "${1}"."temp" # La libreria no permite mezclar los 2 canales

Podeis usar el man del xlhtml para conseguir toda la ayuda de los parámetros que se pueden usar con él.

Os dejo un zip con el código fuente para que hagais vuestras pruebas.

September 1 2008

Analizando los Logs del Apache con PHP (II)

Monday, September 1, 2008 21:56
Posted in category Otros

El parseador del servidor Web Apache tiene como función procesar todos los datos que guarda el servidor en los ficheros de registros (logs) para posteriormente introducirlos con una cierta estructura y orden en una base de datos para poder analizar toda la información y realizar con ella estadísticas variadas tales como conocer desde qué páginas nos visitan más, que navegador es el más utilizado para navegar por nuestro sistema, etc.


if (stristr(PHP_OS,"win"))
      $logHoy = "$ruta/../../logs/access.log"; # el fichero de log's de hoy para windows
else  $logHoy = "$ruta/../../logs/access_log"; # el fichero de log's de hoy para linux

El script va a continuar preguntándose por la plataforma bajo la que se está ejecutando, ya que el fichero de logs del que tendrá que sacar la información tiene un nombre diferente dependiendo si se ejecuta en un Linux (access_log) o un windows (access.log). Una vez conocido el fichero procederá a abrirlo en modo lectura, para poder leer todos y cada uno de los registros que introduce el servidor por cada petición recibida.


$fd = fopen("$logHoy","r"); //abrimos el fichero de logs de acceso del apache

Por cada uno de estos logs, se produce lo que llamamos parseo, es decir un proceso de normalizar los datos de entrada para darle una salida específica. En nuestro caso la salida será una base de datos Mysql. Un registro de acceso tiene como ya hemos comentado con anterioridad la siguiente forma :


127.0.0.1 - deckerix [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 
 
"http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Lo primero que se hace con el registro es separarlo por campos vacíos e introducir cada uno de ellos en una posición de un vector. La primera posición tendrá por tanto la IP del cliente, la siguiente el guión, y así sucesivamente. Algo a tener en cuenta
es que la posición 10 tendrá la referencia, y que desde la 11 hasta el final todos los campos deberían ser solo uno, el Agente de usuario, ya que es probable que esté formado por varios blancos. (por lo tanto hay un mecanismo que unifican esas posiciones del vector).


 while ($x = fgets($fd,1024)){//mientras no sea final de fichero leemos registros y almacenamos 
  $agente         ="";
  $elHost         ="";
  $fechaSinParsear="";
  $bytes          ="";
 
  $arraya          = explode(" ", $x); //separamos el registro por blancos y lo insertamos al array
  $elHost          = $arraya[0];       //primera posicion tiene la IP
  //1 seria -
  //2 seria user uid
  $fechaSinParsear = $arraya[3];       //toda la fecha sin parsear
  //4 seria la zona
  //5 seria post o get
  $peticion        = $arraya[6];       //peticion
  $codigo          = $arraya[8];       //codigo
  $bytes           = $arraya[9];       //bytes ocupa el registro
  $referencia      = $arraya[10];      //referer
 
for ($i=11; $i< count($arraya);$i++){//no sabemos por cuantos blancos está formado el agente.
  //pillamos toda la información que quede
  $agente=$agente." ".$arraya[$i];
}
 
 
$peticion   = str_replace("\"","", $peticion);//parseando...
$referencia = str_replace("\"","", $referencia);//parseando...

Una vez tenemos los campos bien separados, son estos los que sufren el parseo final. Por ejemplo la fecha, que aparece así 10/Oct/2000, deberá tener el siguiente formato para ser introducida en la base de datos Mysql : 2000-10-10. El parseo más importante y complicado es
el del agente de usuario. De él se puede sacar tanto el sistema operativo y el navegador del cliente. Mediante una serie de expresiones regulares que ya expliqué en un post anterior, seremos capaces de cotejar todos los posibles casos de los valores del Agente de Usuario con los SO y los navegadores. Pero cabe la posibilidad de que el agente de usuario no sea un navegador, si no un robot Web, caso que también hemos registrado.


/******************PARSEAR FECHA******************/
 
$fechaParseada = str_replace("[", "", $fechaSinParsear);
list($day, $month, $year)            = explode("/",$fechaParseada,3);//recuperamos el dia
list($year, $hour, $minute, $second) = explode(":",$year,4);//recuperamos la hora
 
 
/*****PARSEAR EL MES********/
if     ($month=="Jan") $month="01";
elseif ($month=="Feb") $month="02";
elseif ($month=="Mar") $month="03";
elseif ($month=="Apr") $month="04";
elseif ($month=="May") $month="05";
elseif ($month=="Jun") $month="06";
elseif ($month=="Jul") $month="07";
elseif ($month=="Aug") $month="08";
elseif ($month=="Sep") $month="09";
elseif ($month=="Oct") $month="10";
elseif ($month=="Nov") $month="11";
elseif ($month=="Dec") $month="12";
 
 
$fecha = "$year-$month-$day"; //unimos la info
$hora  = "$hour:$minute:$second";//unimos la info
 
/******************FIN PARSEAR FECHA******************/
 
/******************************PARSEAR BYTES**********************************/
 
 if ($bytes == "-") $bytes=0;
 
/***************************FIN PARSEAR BYTES*********************************/
 
 
/****************************PARSEAR AGENTE***********************************/
$sistemaOperativo   = reconocedorSistemaOperativo($agente);
$navegador          = reconocedorNavegador($agente);
$robot              = reconocerRobot($agente);
/**************************FIN PARSEAR AGENTE*********************************/

Una vez se tienen todos los datos parseados, éstos se introducen en la base de datos.

Estos datos al estar ya en la base de datos, se borran del fichero de logs del apache para no malgastar disco duro.


//insertamos la información parseada en la base de datos
 
mysql_query("INSERT  stadisticas (codigo,bytes,so,nav,agente,ip,dia,hora,referencia,peticion) VALUES 
 
('$codigo','$bytes','$sistemaOperativo','$navegador','$agente','$elHost','$fecha','$hora','$referenc
 
ia','$peticion')", $conexion);
}
 
 fclose($fd);//cerramos el fichero de logs

Por último comentar que en la base de datos guardamos los siguientes campos: el código de estado de la petición, los Bytes que ocupa el recurso solicitado, el sistema operativo, el navegador, el agente completo, la IP, el país, el día en el que se realizó la petición, la hora, el referer y el recurso pedido. Con toda esta información hemos sido capaces de mostrar gran cantidad de información de alta
importancia.

August 31 2008

Analizando los Logs del Apache con PHP (I)

Sunday, August 31, 2008 19:25
Posted in category Uncategorized

Para manejar perfectamente un servidor Web, es necesario obtener información sobre la actividad
y estado del servidor así como de cualquier problema que esté ocurriendo.

El servidor Web de Apache proporciona unas capacidades de recopilación de información (logs)
muy sencillas, flexibles y comprensivas.

En estas 2 secciones de este mini manual voy a tratar de explicar como realizar un analizador de logs del servidor Web Apache.
En la primera sección trataré acerca de los ficheros de logs del Apache, para irnos familiarizando con ellos, mientras que en la segunda
trataré como montar un analizador de logs en PHP.


El fichero de Logs


El fichero de logs de acceso graba todas las peticiones procesadas por el servidor
en una serie de registros. La localización y el contenido del fichero de los logs
son controlados por la directiva CustomLog. El formato de la directiva LogFormat
puede ser utilizado para simplificar la selección de contenidos de los logs.
Voy a empezar describiendo como configurar el servidor para guardar la información de los
logs de acceso.

Por su puesto, guardar la información en el fichero de logs de acceso es sólo el comienzo,
posteriormente habrá que poder analizar toda esa información para producir estadísticas útiles.

El formato de los logs de acceso es altamente configurable. El formato se especifica usando una cadena de texto formateada del estilo al de los
formatos de las cadenas formateadas que se especifican en la función printf de C.

Formato de logs


Existen 2 formatos más o menos estandares, el Common y el Combined. Yo he preferido el combined
porque da mucho más juego.

Una configuración típica para los logs de acceso puede parecerse a lo siguiente:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

La primera cadena define el apodo common y lo asocia con una cadena formateada
particular. Esta cadena formateada consta de directivas de porcentaje, cada una de las cuales
le dice al servidor que información deberá almacenar.

Los caracteres literales podrán ser introducidos en cualquier lugar de la cadena formateada y serán posteriormente copiados en la salida de los logs. El carácter comilla doble (“) debe ser escapado por una barra back-slash (\) para prevenir que se entienda como el final de la cadena formateada. Esta cadena puede contener además caracteres de control como “\n” para una nueva línea y “\t” para el tabulador.

La directiva CustomLog establece un nuevo fichero de logs, utilizando el apodo
establecido. El nombre del fichero para el fichero de los logs de acceso es relativo al
directorio ServerRoot a menos que comience con la barra del 7 (/).

La siguiente configuración escribirá entradas en el fichero de logs en un formato conocido
como Common Log Format (CLF). Este formato estándar puede ser producido por diversos
servidores Web, leídos y analizados por muchos programas de análisis.
Una entrada CLF producida en el fichero de logs puede ser parecida a la siguiente:

127.0.0.1 - deckerix [10/Oct/2004:13:55:36 -0700] "GET /mi_foto.png HTTP/1.0" 200 2326 

Cada sección de la cadena anterior se describe a continuación:

127.0.0.1 (%h)

Esta es la dirección IP del cliente (host remoto) que realiza la petición al servidor. Si la directiva HostnameLookups está activada (puesta a ON), el servidor intentará determinar el nombre del host y sustituirlo en lugar de almacenar la IP. Sin embargo, esta configuración no es recomendada ya que puede ralentizar al servidor. En su lugar, es mejor utilizar un programa post-proceso que determine los nombres de los hosts. La dirección IP guardad no tiene porque ser necesariamente la de la maquina que realiza la petición. Si existe un servidor proxy entre el usuario y el servidor, esta dirección será la del proxy en lugar de la de la máquina original.

- (%l)

El guión en la salida indica que la petición de la una determinada información no está disponible. En este caso, la información que no está disponible es la identidad del RFC 1413 determinado a partir del identd en las máquinas clientes. Esta información tiene bastante poco valor, y no debería ser nunca usada, excepto en algunas excepciones donde se lleve un rigurosísimo control de las intranets. El servidor Apache httpd no intentará determinar esta información a no ser que la directiva IdentityCheck se encuentre active (On).

deckerix (%u)

Este es el identificador del usuario que pide el documento tal y como la autenticación HTTP puede determinar. Este valor suele ser tomado por los scripts CGIs en la variable de entorno REMOTE_USER . Si el código de estados para la petición es 401, entonces este valor no es adecuado ya que el usuarios no ha sido autentificado. Si el documento no tiene protección mediante password, esta entrada será “-” como el anteriormente comentado.

[10/Oct/2000:13:55:36 -0700] (%t)

La hora en la cual el servidor terminó de procesar la petición. El formato es:
[día/mes/año:hora:minuto:segundos zona]

día = 2*digitos
mes        = 3*caracteres (iniciales inglesas)
año = 4*digitos
hor        = 2*digitos
minuto     = 2*digitos
segundos   = 2*digitos
zona = (`+' | `-') 4*dígitos

Es posible mostrar la hora en otro formato modificando la cadena de formato especificando
la directiva %{formato}t , donde el formato se especifica como en la función strftime(3) de C.

"GET /apache_pb.gif HTTP/1.0" (\"%r\")

La línea de petición del cliente se muestra entre comillas dobles. La línea de petición contiene un información muy útil. Primero, el método usado por el cliente es GET. Segundo, el cliente ha pedido al servidor el recurso /apache_pb.gif, y tercero, el cliente usa el protocolo http/1.0. Es también posible registrar una o mas partes de la línea de petición independientemente. Por ejemplo, la cadena formateada “%m %U%q %H” registrará el método, el path, la query-string y el protocolo, (misma salida que “%r”).

200 (%>s)

Este es el código de estado que el servidor devuelve el cliente por cada petición. Esta información es muy valiosa. Porque revela si la petición a tenido éxito (códigos que comienzan por 2), si se ha realizado una redirección (códigos que comienzan por 3), ha surgido un error provocado por el cliente (códigos que comienzan por 4), o ha surgido un error en el servidor (códigos que comienzan por 5). La lista de todos los posibles códigos de estado se puede encontrar en las especificaciones del protocolo HTTP (RFC2616 sección 10).

2326 (%b)

La última entrada indica el tamaño del recurso enviado hacía el cliente, sin incluir las cabeceras de respuesta. Si ningún contenido es enviado al cliente, tendrá el valor “-“. Para registrar “0” para este caso habrá que usar mejor “%B”.

Como comentaba antes, otra cadena de formato bastante utilizada es una denominada “Combined”.
Esta se utiliza como se muestra a continuación.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined 

Este formato es exactamente el mismo que el Common, con la adición de 2 campos nuevos. Cada uno de ellos usa la directiva porcentual %{header}i, donde header puede ser cualquier cabecera de petición HTTP. El registro de logs bajo este formato tomará este aspecto:

127.0.0.1 - deckerix [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" 

Los campos adicionales son:

"http://www.example.com/start.html" (\"%{Referer}i\")

La cabecera de petición del “Referer”. Esto da la información sobre que enlace a usado el usuario para llegar a nuestro recurso (de donde procede). En este caso desde donde se pidió /mi_foto.gif.

"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\")

La cabecera de petición para el Agente de usuario (User-Agent http). Esta es la información de la identificación del navegador o cliente que realiza la petición al servidor.

Tabla de códigos de estado del protocolo HTTP
 
100	Continue		Continua	   
101	Switching Protocols	Intercambiando protocolos	   
200	Ok			Solicitud enviada correctamente	   
201	Created			Creado	   
202	Accepted		Todavía está en proceso	   
203	Non-Authoritative 	Information	Información no autoritativa	   
204	No Content		No contenido	   
205	Reset Content		Reset contenido	   
206	Partial Content		Contenido parcial	   
300	Multiple Choices	Múltiples opciones	   
301	Moved Permanently	Movido permanentemente	   
302	Found			Localizado en otro sitio	   
303	See Other		Ver otro	   
304	Not Modified		No Modificado	   
305	Use Proxy		Usa Proxy	   
306	(Unused)		(Unused)	   
307	Temporary Redirect	Redirección temporal	   
400	Bad Request		Solicitud incorrecta	   
401	Unauthorized		Documento restringido	   
402	Payment Required 	Documento restringido	   
403	Forbidden		Privilegios insuficientes	   
404	Not Found		Documento no encontrado	   
405	Method Not Allowed 	Mé;todo no permitido	   
406	Not Acceptable		No acceptable	   
407	Proxy Au Authentication Required 	Requerida autenticación proxy	   
408	Request Timeout 	Timeout petición	   
409	Conflict                Conflicto	   
410	Gone			Gone	   
411	Length Required		Longitud requerida	   
412	Precondition Failed 	Precondición fallida	   
413	413 Request Entity Too Large Request 	Entidad demasiado grande	   
414	Request-URI Too Long   	URL demasiado larga	   
415	Unsupported Media Type	Media type no soportado	   
416	Requested Range Not Satisfiable   	Requested Range no Satisfiable	   
417	Expectation Failed 	Expectación fallida	   
500	Internal Error		Error interno en el servidor	   
501	Not Implemented		No implementado	   
502	Bad Gateway		Gateway Erroneo	   
503	Service Unavailable	Servicio No disponible	   
504	Gateway Timeout	Gateway Timeout	   
505	HTTP Version Not Supported	Versión protocolo http no soportado	

Se pueden configurar muchas otras cosas, como realizar logs condicionales, o mantener diferentes registros en
ficheros diferentes, etc. Si quereis saber más, podeis acceder a la web de Apache donde tratan acerca de los Logs del servidor

August 30 2008

Gmail no viene con la seguridad de serie…

Saturday, August 30, 2008 17:36
Posted in category Uncategorized

Gmail se ha convertido de un tiempo a esta parte en uno servicios de correo electrónico
más populares del mundo desplazando de lejos a los servicios de web mail de su competencia.
Sin embargo, en su función estándar es inseguro.

En la conferencia DefCon realizada recientemente en Las Vegas, Estados Unidos, (8-10 Agosto)
se reveló lo inseguro que puede ser Gmail al usar la configuración estándar.

La razón es que Gmail opera con sesiones no cifradas, lo que puede provocar que un intruso pueda
conseguir información privada del propietario de la cuenta de Gmail.

Sin embargo, el “problema” tiene fácil solución ya que el servicio de Google incluye soporte
de cifrado SSL.

Para activarlo, tendremos que conectarnos a nuestra cuenta de Gmail, y hacer click en el enlace “configuración”.
Una vez dentro, tendremos que seleccionar la primera pestaña (General), y dirigirnos a la opción “Conexión del Navegador”.
Aquí tendremos que seleccionar la opción “Usar siempre https”.

A partir de ahora, todo el tráfico mediante su cuenta Gmail estará cifrado.

He encontrado un video, donde se puede ver claramente el problema del cifrado, si no se habilita dicha característica. Video


Página 62 de 64« Inicio...6061626364