Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - madpitbull_99

#1
No voy a enrollarme mucho con la descripción porque es sencillo, en el market de android durante 10 días se
ofertarán aplicaciones premium a 0.10€.

https://market.android.com/details?id=apps_timed_promotion

Yo me acabo de comprar Teclado SlideIT.


#2
Una clasificación de los lenguajes de programación según varios criterios.

http://es.scribd.com/fullscreen/73045465?access_key=key-1pkxhsneo6mw1266rkz6

Se puede descargar desde scribd.

#3
Presentación sobre los modelos de ciclos de vida. En realidad se habla sólo de modelo en cascada y sus variaciones
y el modelo en espiral.

http://es.scribd.com/fullscreen/73045251?access_key=key-1mwweoriatlz7h9768di

Se puede descargar desde scribd.

#4
Java / JNode - Un sistema operativo creado en Java
14 Noviembre 2011, 21:16 PM



JNode, es un sistema operativo libre programado en lenguaje Java y con licencia GNU. Pero ésto no es del todo cierto, cómo bien sabemos,
para funcionar se necesita un kernel. Dicho kernel está programado en lenguaje Ensamblador (ASM), por tanto no es del todo Java.

De momento no hay ninguna versión estable o para usuarios finales, pero si se puede descargar y virtualizar alguna beta del sistema.

Empezó siendo un proyecto de investigación y para desarrolladores, pero la meta del proyecto es hacerlo amigable para el usuario. Aunque la descripción oficial lo explica todo
muy bien.


Already very early in the Java history, around JDK 1.0.2, Ewout Prangsma (the founder of JNode) dreamed of building a Java Virtual Machine in Java.

It should be a system that was not only a VM, but a complete runtime environment that does not need any other form of operating system. So is had to be a light weight and most important flexibel system.

Ewout made various attempts in achieving these goals, starting with JBS; the Java Bootable System. It became a somewhat functional system, but had far too much native code (C and assembler) in it.

So he started working on a new JBS system, called JBS2 and finally JNode. It had with a simple target, using NO C code and only a little bit of assembly code.[/font]

In may on 2003 Ewout came public with JNode and development proceeded ever faster from that point on.
Several versions have been released and there are now concrete plans for the first major version.





Se trata de un proyecto realmente interesante aunque dudo de que tenga mucha aceptación por parte de los usuarios.

Enlaces del proyectos:

JNode no es el primer sistema operativo que se intenta crear en Java, anteriormente existió JavaOS (descontinuado desde el 2006), aunque aún
podemos descargarnos la última versión e instalarla.

Otro proyecto interesante es Cosmos, otro sistema operativo creado en C#.

#5
Colaboración de elhacker.NET en la revista PC Actual





Parte del staff de elhacker.NET ha colaborado en la edición de un artículo para la revista PC Actual sobre Seguridad Informática.

Básicamente nos han hecho una lista de preguntas a las que hemos respondido entre todos.

Se trata de la revista número 245 de Noviembre de 2011. Las personas que han colaborado en la edición del artículo (cuyos nicks son ordenados alfebéticamente) son:


  • Aberroncho
  • Uxio
  • WHK
  • el-brujo
  • madpitbull_99
  • skapunky






CitarRevista nº 245 (noviembre 2011)

A lo largo de nuestro Tema de Portada, aprenderás a identificar los puntos débiles de tu equipo, a asegurar el PC con las posibilidades que ofrece el sistema operativo o proteger tus datos cuando utilizas los servicios web

Nº 245 - 11/2011



La seguridad es la asignatura más importante que un usuario debe superar frente al PC, sin embargo, es una de las más olvidadas. Además, te ofrecemos cuatro comparativas: 6 Portátiles de gama alta al mínimo precio, 10 Discos duros externos con conexión USB 3.0, 8 Aplicaciones gratuitas de optimización y 9 Reproductores multimedia. Y, como siempre, trucos, informes, análisis independientes y artículos prácticos de todos los niveles para hacerte la informática más divertida.

Tema de portada: Todos los trucos para proteger tu PC


La seguridad es una asignatura rechazada por la complicación que a priori puede suponer si se carece de conocimientos técnicos. Acabar con este mito es el objetivo de este Tema de Portada en el que ofrecemos triquiñuelas fáciles de implementar para dotar a tu ordenador de la máxima fiabilidad. Entre otras cosas, aprenderás a establecer el protocolo adecuado en tus dispositivos móviles o a conocer y aplicar los trucos de elhacker.net.


  • Identifica tus puntos débiles
  • Un PC a prueba de bombas
  • Accede a la Red con seguridad
  • Seguridad en dispositivos móviles
  • Consejos de elhacker.NET

Fuente


La revista está disponible en todos los quiscos de España y cuesta 3 euros sin DVD. El número de éste mes les interesará todos a los que les apasione la
Seguridad Informática y los temas de Hardware.

Agradecemos a todos los que han colaborado en la edición de éste artículo y a los chicos de PC Actual, en especial a Juan Carlos López (Redactor Jefe Técnico) .


#6
Ejercicios / Ejercicios en JAVA
18 Octubre 2011, 22:23 PM

Ejercicios y problemas en Java


Nota: Clic en las imágenes para ampliar.


1º parte




















2º parte
















#7
Java / Creación de una pila básica en Java
15 Octubre 2011, 12:18 PM
Al aprender a trabajar con arrays, siempre suelen mencionarse las pilas. Una pila no es más que una colección de valores de tipo LIFO (Last In First Out), o sea el último valor insertado en la

pila es el primero en salir o ejecutarse. La estructura básica de una pila es la siguiente:



Mediante un array conseguiremos construir nuestra pila de datos en Java. Para eso creamos la siguiente clase:

Código (java) [Seleccionar]


public class Stack {

    private int stck[];
    private int tos;

    //Constructor
    Stack(int size){
        //Crear la pila
        stck = new int[size];
        tos = -1;
    }

    //Introduce valor en la pila
    void push(int value) {
        if (tos == stck.length - 1)
            System.out.println("Stack Overflow!");
            //Pila esta llena
        else
            stck[++tos] = value;
            //Almacena valor en pila
    }

    //Retira valor de la pila
    int pop() {
        if (tos < 0) {
            //La pila esta vacia
            System.out.println("Stack Underflow!");
            return 0;
        } else
            return stck[tos--];

    }
}


El primer método de la clase es el constructor, al constructor tenemos que pasarle un parámetro que indique el tamaño de la pila. Dentro del constructor se crea una matriz con el tamaño especificado a través del constructor y se le asigna el valor -1 a la variable tos (eso indica que la pila está vacía).


El siguiente método push() introduce un valor al principio de la pila, primero se comprueba si la pila está llena, en caso contrario agrega el valor introducido en la pila. El último método pop() elimina de la pila el último valor insertado y lo devuelve (también se comprueba que la pila no esté vacía).

Ahora veamos cómo utilizar ésta clase:

Código (java) [Seleccionar]

public class Test {

    public static void main(String args[]) {

        //System.out.println("This is a test!");

        Stack pila = new Stack(10);
        //Llenar la pila
        for (int i = 0; i < 10; i++) pila.push(i);

        //Retirar 5 primeros elementos de la pila
        System.out.println("Valores contenidos en la pila: ");
        for (int i = 0; i < 5; i++) System.out.println("\t " + pila.pop());

    }

}


Primero se crea instancia la clase Stack y mediante el constructor se inicializa una pila que puede contener hasta 10 valores. Luego mediante la sentencia for() se introducen elementos en la pila insertándolos usando el método push().

Acto seguid, eliminamos y mostramos los 5 primeros valores de la pila.

#8
Java / [SRC] Menú básico usando switch
15 Octubre 2011, 10:13 AM
Es un menú básico usando switch, puede que a alguien le venga bien.

Código (java) [Seleccionar]


/**
*
* @author madpitbull
*/
import java.io.*;

public class Mine_Switch_Menu {

    public static void main (String args[]) throws IOException {

        //Variables
        char op;
        BufferedReader in = new BufferedReader (new InputStreamReader(System.in));

        System.out.print("Selecciona una opcion:\n"
                        + "\t[a] Cuadrado.\n"
                        + "\t[b] Circulo.\n\n");

        //Leer opción
        op = (char) System.in.read();
               

        //Limpiar buffer, caracter de retorno \n
        System.in.read();
        System.out.flush();

        //Buscar opcion
        switch (op) {
            case 'a':
                //Cuadrado
                System.out.print("Introduce el lado: ");
                int l = Integer.parseInt(in.readLine());
                System.out.println("El perimetro es: " + ( 4 * l));
                break;
            case 'b':
                //Círculo
                System.out.print("Introduce el radio: ");
                int r = Integer.parseInt(in.readLine());
                System.out.println("El perimetro es: " + ( (2 * Math.PI) * r));
                break;
            default:
                //Opción por defecto
                System.out.println("Opcion no valida");
                //Cerrar programa
                System.exit(-1);
        }


    }

}


Ejecución:

Selecciona una opción:
        [a] Cuadrado.
        [b] Círculo.

a
Introduce el lado: 5
El perímetro es: 20


Si hay alguna cosa rara o alguna sugerencia no dudéis en decirlo.
#9
Para hacer más cómodo nuestro trabajo con Linux podemos montar algunas particiones de forma automática al iniciar el sistema operativo. En este caso he usado
Ubuntu 10.10, pero el proceso es el mismo para casi todas las distribuciones de GNU/Linux.

Primero tenemos que listar las particiones del sistema y elegir la que queremos que se monte de forma automática:

fdisk -l


Y mostrará la siguiente salida por pantalla:


madpitbull@desktop:~$ sudo fdisk -l
[sudo] password for madpitbull:

Disco /dev/sda: 750.2 GB, 750156374016 bytes
255 cabezas, 63 sectores/pista, 91201 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x51513b8a

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1       40794   327677773+   7  HPFS/NTFS
/dev/sda2           40795       44618    30716280   83  Linux
/dev/sda3           44619       44745     1020127+  82  Linux swap / Solaris
/dev/sda4           44746       91201   373157820    7  HPFS/NTFS



En mi caso quiero que se monte la partición de Datos, en mi caso es la última /dev/sda4.

El siguiente paso es crear la carpeta donde se montará la partición, lo más normal es crearla en el directorio /media.

sudo mkdir /media/Datos


El nombre queda a vuestra elección, yo he usado Datos. A continuación tendremos que editar el fichero /etc/fstab.

Al iniciarse el sistema operativo, mirará en dicho fichero y montará las particiones que nosotros le indiquemos.

sudo vim /etc/fstab


Al principio del fichero podemos encontrar algunas instrucciones básicas sobre cómo debería realizarse la configuración.

Al final del archivo agregamos la siguiente línea:

# Datos partition auto mount/dev/sda4 /media/Datos ntfs-3g defaults 0 0


Donde la sintaxis es la siguiente: <dispositivo para montar automáticamente> <carpeta donde se montará> <tipo de partición> <parámetros de configuración>.

Guardamos el fichero y ejecutamos el comando sudo mount -a, si todo ha ido bien, la partición elegida ya debería estar montada.

Al reiniciar el sistema la partición estará montada sin tener que ejecutar ningún comando más. En este ejemplo he intentado dar una explicación básico, si queréis profundizar más
en este tema os recomiendo que leáis sobre los distintos parámetros de configuración del fstab.






#10
 Mediante los túneles SSH podemos asegurar casi todo tipo de protocolos, al conectarnos a una red insegura, como puede ser la red WiFi de un hotel, restaurante o las típicas redes públicas que algunos ayuntamientos ofrecen de forma gratuita (que por cierto, no sé cuanto durará), estamos expuesto a diferentes ataques por parte de otros usuarios conectados a la misma red.

El escenario por norma general es poner la tarjeta en modo “promiscuo” y estar mirando todos los paquetes que pasan por nuestra tarjeta de red, que puede tratarse de información sensible, desde usuarios y claves hasta números de cuentas bancarias.

Para éste ejemplo he usado un servidor VPS de tipo “budget” (precios bajos - prestaciones bajas) para realizar el artículo. Lo primero será asegurarnos de que el servidor SSH, en mi caso OpenSSH, está correctamente configurado para soportar los túneles.

Procedemos a mirar la configuración del servicio SSH en /etc/ssh/sshd_config y buscamos las siguientes directivas:

AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes


Donde el primer parámetro activa el redireccionamiento y encapsulación de los diferentes protolocos basado en TCP y el segundo hace que la conexión se mantenga de forma continua, normalmente después de un tiempo, que suele ser aproximadamente unas dos horas, la conexión TCP se desconecta de forma automática.

Una vez editado el fichero de configuración, procedemos a reiniciar el servicio:

/etc/init.d/ssh restart
En otros sistemas operativos como CentOS, los demonios se encuentran en rc.d.

El siguiente paso es conectarnos y crear el túnel en el puerto que pasaremos como argumento al cliente ssh:

ssh -D 8080 mad@servidor-personal.com


Con el comando de arriba, estamos creando un túnel en el puerto 8080 de nuestro propio equipo hacia el servidor SSH. Si queremos aprovechar el puerto y navegar de forma segura, tendremos que configurar nuestro navegador para al conectarse a los servidores web, use como servidor SOCKS nuestro propio equipo local y el puerto 8080.

En Firefox esto se hace en la Configuración de Red:



Después de guardar los cambios, es recomendable reiniciar el navegador. El proceso es similar en la mayoría de los demás navegadores, para crear el túnel SSH, si estamos en Windows, en la parte final de artículo encontrarás otros artículos de apoyo para hacerlo desde Windows mediante el cliente SSH PuTTy.

Podemos ver un claro ejemplo si empleamos un sniffer, en éste caso WireShark, las diferencias entre el envío de datos cifrados y en claro.



En el ejemplo de arriba los datos están cifrados, mientras que en el de abajo no.



El uso de túneles no se limita sólo al ámbito web, podemos tunelizar cualquier protocolo, si queremos acceder de forma segura a nuestro servidor de correo, también podemos tunelizar POP, SMTP, IMAP y demás.

ssh -f usuario@servidor-personal.com -L 2000:smtp.gmail.com:25 -N


En éste ejemplo, estamos haciendo un túnel desde el puerto 2000 del servidor-personal al puerto 25 del servidor SMTP de gmail.com. El uso es ilimitado, sólo depende de nuestra imaginación.



Recursos y Documentación:

_SSH Port Forwarding [Symantec]

_Port Forwarding [The SSH Definitive Guide]

_How to tunnel Web Traffic with SSH Secure Shell [Using PuTTy]

_Breaking Firewalls with OpenSSH and PuTTy



Nota:

No hace falta tener un VPS o un servidor dedicado, podemos usar nuestro propio equipo que tenemos en casa, claro está, que habrá que mantenerlo encendido continuamente.
#11
Criptografía / Presentaciones de la Crypto 2011
11 Septiembre 2011, 22:05 PM
Crypto es una conferencia internacional sobre criptografía, que se celebra todos los años en la Universidad de California.

CitarYa nos podemos descargar las presentaciones de la conferencia Crypto 2011 celebrada en Santa Barbara, California los pasados 14 al 18 de agosto.


Leído en CyberHades
Página Oficial | Crypto
Página con el programa.
#12


Completo manual sobre el desarrollo de videjuegos usando Unity 3. Está en Inglés y tiene 380 páginas. El .rar pesa poco más de 80 MB.

Incluye todos los ejemplos mostrados en el libro.

Descargar desde MultiUpload:
http://www.multiupload.com/ACBFX3XKB1

#14
Software / Controlando la memoria RAM en Firefox
27 Agosto 2011, 22:37 PM
 A estas alturas creo que todos nos hemos dado cuenta de que a veces el consumo de RAM en Firefox se puede disparar hasta límites bastante altos, mientras más pestañas abiertas tengamos, más memoria RAM consumirá.

Una de las mejores características de Firefox es la multitud de addons/plugins, con los que también aumenta el consumo de memoria. Una cosa en la que algunos usuarios no se suelen fijar es la memoria virtual, en este caso, el artículo está orientado a un sistema operativo Windows.

Podemos calcular la memoria virtual con la ayuda de una formula: Memoria Virtual = (Memoria Física Total – Memoria Física Usada) + Tamaño Máximo del Pagefile. No es una formula muy exacta, pero es bastante orientadora, no voy a entrar en detalles sobre el fichero pagefile, dado que, no es el tema de este artículo.

Para monitorizar mejor la memoria RAM, primero debemos mostrar más información sobre los recursos utilizados que se muestran en el Administrador de Tareas, para eso primero lo abriremos (CTRL+ALT+SUPR) y en el menú Ver-> Seleccionar Columnas -> Y marcamos las casillas que aparecen en la imagen de abajo.



Esto nos dará más información sobre los recursos utilizados. En este ejemplo haremos uso de un addon para Firefox que ayuda a liberar algo de memoria, abajo citaré los tres que he probado, aunque seguramente hayan algunos más (si conocéis más y mejores os invito a que nos lo digáis):


Vamos a instalar Memory Fox y a observar si hay algún cambio. En mi caso al hacer la comparación he tenido el mismo número de pestañas abiertas.ç

Después de instalarlo, veremos que en la esquina inferior derecha a aparecido el logo del addon (letra M rodeada de un círculo), al hacer clic derecho sobre el logo nos aparecerán varias opciones, el Addon se puede ejecutar de dos maneras, sólo para el Navegador o para todos los procesos, en mi caso lo aplicaré sólo al proceso del navegador, o sea, la primera opción.



Una vez activado el addon, vamos a observar los cambios. Como por arte de magia, veremos que la cantidad usada ha disminuido notablemente.

Antes:



Después:



Claramente, vemos que el addon está haciendo su trabajo de forma muy eficaz.

Podemos ver como el uso de memoria física ha disminuido y se ha aplicado parte de la carga sobre la memoria virtual.

Si queréis exprimir más este tipo de addons, os invito a que probéis los otros dos que he mencionado. Cabe destacar que estos addons funcionan solamente en Windows, para Linux aún no he probado ninguno, tampoco sé si los hay.



#15
Se trata de una pequeña aplicación para guardar tus códigos en la nube/online para tenerlos siempre a mano, está orientada para guardar fragmentos de código(clases o funciones) y no proyectos enteros. Algunas características destacables:


  • Los códigos marcados como públicos se pueden compartir con visitantes.
  • Los códigos se pueden descargar en un fichero con extensión correspondiente al lenguaje.
  • Se permite añadir comentarios extra al código en un apartado especial (se admite HTML).
  • Filtrado por Fecha, Lenguaje y Título, como un Buscador.

Todo el código está disponible (opensource) desde el repositorio (el enlace está en la página del proyecto). Si a alguien le interesa probarlo, dispongo de una versión de demostración online (en un hosting) que me contacte por privado y le pasaré el enlace y los credenciales para probarla.



Welcome to the home of SnippetBox project. SnippetBox it's a webapplication that lets you store your code snippets online.

Initially i made it for my own use, i needed a simple webapplication to store my snippet codes online. It seems to be a nice idea, so i decided to share it with everybody.

If you have some experience programming in PHP and you have some basic notions in CodeIgniter, you can contact us and collaborate in the project, you will have access to the online subversion repository and permission to edit the project website.

Developed in PHP using CodeIgniter and storing the data in a MySQL database engine.

Actually there are two versions:


  • Personal – made for a single user.
  • MultiUser – multiple users (they can create accounts). This version is actually in development.

Special thanks to WHK, Novlucker and Nakp for their help and suggestions.

All the code is opensource under the GNU/GPL v3 license. Downloading and using this application you will also must agree the CodeIgniter license.

Página Oficial del Proyecto | SnippetBox

#16

Una buena forma de "destripar" algún malware para entender su funcionamiento es ver a que API se llaman desde la aplicación o cualquier servicio.

Para eso vamos a utilizar API Monitor, una herramienta desarrollada por Rohitab, hay un versión para sistemas de 32bits y 64 bits, disponiendo también de una versión portable, que sólo hay que descargar y descomprimir, es la que yo he utilizado al escribir este artículo. Procedemos a descargar la versión que corresponda a nuestro sistema o la portable y la ejecutamos.



La versión portable descomprimida pesa poco más de unos 20 MB, por lo que, podemos guardarla en una memoria USB junto con las demás utilidades que usamos en nuestro día a día.

Para probar la herramienta he usado un malware que tenía por ahí para hacer prueba, en una máquina virtual con VirtualBox.

Al arrancar la aplicación podemos seleccionar de una lista las API que queremos monitorizar.



O filtrar por librerías .dll



Los procesos a monitorizar los podemos elegir de una lista con los procesos en ejecución o crear uno nuevo (Menú File -> Monitor New Process).

Yo en mi caso monitorizaré un proceso llamado sol.exe (se trata del juego Solitaire que viene con el Windows) que se está ejecutando en el sistema (sino se está ejecutando, lo podemos ejecutar eligiendo Monitor New Process).

En la pestaña Monitoring - Output podemos ver una lista de .dll que han sido cargadas.
sol.exe: Monitoring Module 0x01000000 -> C:\WINDOWS\system32\sol.exe.
sol.exe: Monitoring Module 0x7C910000 -> C:\WINDOWS\system32\ntdll.dll.
sol.exe: Monitoring Module 0x7C800000 -> C:\WINDOWS\system32\kernel32.dll.
sol.exe: Monitoring Module 0x77BE0000 -> C:\WINDOWS\system32\msvcrt.dll.
sol.exe: Monitoring Module 0x77DA0000 -> C:\WINDOWS\system32\ADVAPI32.dll.
sol.exe: Monitoring Module 0x77E50000 -> C:\WINDOWS\system32\RPCRT4.dll.
sol.exe: Monitoring Module 0x77FC0000 -> C:\WINDOWS\system32\Secur32.dll.
sol.exe: Monitoring Module 0x77EF0000 -> C:\WINDOWS\system32\GDI32.dll.
sol.exe: Monitoring Module 0x7E390000 -> C:\WINDOWS\system32\USER32.dll.
sol.exe: Monitoring Module 0x70140000 -> C:\WINDOWS\system32\CARDS.dll.
sol.exe: Monitoring Module 0x7E6A0000 -> C:\WINDOWS\system32\SHELL32.dll.
sol.exe: Monitoring Module 0x77F40000 -> C:\WINDOWS\system32\SHLWAPI.dll.
sol.exe: Monitoring Module 0x773A0000 -> C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5705_x-ww_36cfed49\COMCTL32.dll.
sol.exe: Monitoring Module 0x5CF60000 -> C:\WINDOWS\system32\ShimEng.dll.
sol.exe: Monitoring Module 0x6FDB0000 -> C:\WINDOWS\AppPatch\AcGenral.DLL.
sol.exe: Monitoring Module 0x774B0000 -> C:\WINDOWS\system32\ole32.dll.
sol.exe: Monitoring Module 0x76B00000 -> C:\WINDOWS\system32\WINMM.dll.
sol.exe: Monitoring Module 0x770F0000 -> C:\WINDOWS\system32\OLEAUT32.dll.
sol.exe: Monitoring Module 0x77BB0000 -> C:\WINDOWS\system32\MSACM32.dll.
sol.exe: Monitoring Module 0x77BD0000 -> C:\WINDOWS\system32\VERSION.dll.
sol.exe: Monitoring Module 0x76630000 -> C:\WINDOWS\system32\USERENV.dll.
sol.exe: Monitoring Module 0x5B150000 -> C:\WINDOWS\system32\UxTheme.dll.
sol.exe: Monitoring Module 0x76340000 -> C:\WINDOWS\system32\IMM32.DLL.
sol.exe: Monitoring Module 0x746B0000 -> C:\WINDOWS\system32\MSCTF.dll.
sol.exe: Monitoring Module 0x75160000 -> C:\WINDOWS\system32\msctfime.ime.


Y en la pestaña Summary veremos todas las llamadas que se han realizado, en este caso han sido 30000.



Vemos que HeapFree (Libera un bloque de memoria reservado por HeapAlloc) se llama desde Kernel32.dll. En el cuadro de llamadas (situado más abajo) podemos ver la posición del bloque de memoria que se quiere liberar.

A partir de aquí todo depende de la imaginación de cada uno, si trasteáis más con la aplicación veréis que se pueden poner "breakpoints" cosa que nos puede servir en algunos casos.

Como sabréis hay más herramientas y métodos para monitorizar las API, esto es sólo una alternativa.

Como podemos ver en los tutoriales realizados por el autor, API Monitor sirve para algo más que monitorizar las llamadas API, también se puede usar para eliminar algunas restricciones de los software de pago o esniffar el tráfico ssl de Firefox.

Página Oficial | Rohitab - API Monitor
#17



Seguro que todos conocemos Wireshark, uno de los sniffers más conocidos junto con Cain.

Sabiendo manejar bien Wireshark ya no necesitas ninguno, pero decidí darle una oportunidad a NetworkMonitor. Se trata de un sniffer desarrollado por Technet (como sabréis, forma parte de Microsoft).

Primero nos dirigimos a su página oficial y lo descargamos. Una vez instalado veremos la interfaz de inicio.



En en cuadro de abajo, seleccionamos la red que queramos monitorizar y después creamos una nueva sesión.

Al empezar el monitoreo, a la derecha veremos todos las aplicaciones que han enviado algún paquete, si seleccionamos una de ellas, los logs se verán limitados solamente a esa aplicación.






Otra cosa que me llamó la atención, es la funcionalidad de filtrado.



Permitiendo crear filtros personalizados. Desde la página oficial nos proveen varios tutoriales (videos entre otros) para aprender a desenvolvernos con esta herramienta.

Filtering

User Interface

Capturing

Troubleshooting

Experts and Tools

Network Monitor API

Network Monitor Videos


Página Oficial | Network Monitor.
#18
No voy a entrar en detalles sobre el concepto NoSQL ni a explicar de forma detallada qué es y para que sirve. Si estás leyendo este artículo, doy por hecho que tienes unos conocimientos básicos de PHP y de dases de datos.

Los chicos de GenbetaDev han dedicado dos artículos para explicar el concepto NoSQL y una introducción a MongoDB:

_El concepto NoSQL, o cómo almacenar tus datos en una base de datos no relacional
_Una introducción a MongoDB


Recomiendo leer los dos artículos citados más arriba si aún se tienen dudas sobre este tipo de bases de datos o sobre MongoDB. En este artículo nos centraremos en el uso de MongoDB desde una aplicación escrita en lenguaje PHP.

Instalar MongoDB
Lo primero que hay que hacer, es descargar desde la página oficial la versión de Mongo correspondiente a nuestro sistema operativo, en mi caso lo instalaré en un sistema operativo Windows de 32 bits. Los desarrolladores nos recomiendan usar la versión de 64 bits (claramente se necesita un Sistema Operativo de 64 bits para que funcione), dado que, la versión de 32 bits solamente permite un tamaño máximo de 2 GB de la base de datos.




Una vez descargada la versión que corresponde a nuestro SO, la descomprimimos en alguna carpeta.

El siguiente paso es crear las carpetas donde MongoDB guardará las bases de datos, es recomendable crearlas en el raíz del disco local. Yo en mi caso, las he creado dentro del disco local C. Hay que crear una carpeta llamada data y dentro de esta carpeta, otra, llamada db.

Si lo hacemos usando la consola, quedaría algo así:

C:\ mkdir \data
C:\ mkdir \data\db
C:\ tree data
C:\>tree data
Listado de rutas de carpetas
El número de serie del volumen es C490-7C5B
C:\DATA
└───db

C:\>
A continuación, nos dirigimos a la carpeta donde hemos descomprimido los archivos descargados anteriormente. Dentro de esa carpeta, lo que más nos interesa es el directorio /bin, dicho directorio podemos agregarlo a la variable de entorno del sistema, si no queremos acceder siempre a esa carpeta cuando queramos arrancar el servidor.

Los ficheros más importantes son mongod.exe y mongo.exe. El primero es el "daemon" o el servidor en si, mientras que el segundo es la consola de administración.

Es posible ejecutar el servidor en modo standalone, pero en nuestro cosa, lo instalaremos como un servicio del sistema, para eso hay que ejecutar el siguiente comando:

C:\mongo\bin>mongod --install  --serviceName MongoDB --serviceUser root --servicePassword root --logpath ..\log\log.txt
Con el parámetro --serviceName le indicamos el nombre que tendrá el servicio, con los dos siguientes, el usuario y la contraseña, mientras que con el último, le indicamos un archivo de texto donde en caso de error, pueda volcar la información de depuración, dicho archivo tiene que estar previamente creado.

Ahora si miramos en los servicios del sistema, observaremos que uno nuevo se ha creado:





Para arrancar el servicio, podemos lanzar en la consola lo siguiente:

net start MongoDB
Pero si no queremos instalarlo como servicio, podemos ejecutar directamente el comando mongod sin ningún parámetro y tendremos el servidor corriendo de forma temporal.

C:\mongo\bin>mongod
mongod --help for help and startup options
Sun Aug 14 18:43:09 [initandlisten] MongoDB starting : pid=192 port=27017 dbpath
=/data/db/ 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data

**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
**       with --dur, the limit is lower

Sun Aug 14 18:43:09 [initandlisten] db version v1.8.2, pdfile version 4.5
Sun Aug 14 18:43:09 [initandlisten] git version: 433bbaa14aaba6860da15bd4de8edf6
00f56501b
Sun Aug 14 18:43:09 [initandlisten] build sys info: windows (5, 1, 2600, 2, 'Ser
vice Pack 3') BOOST_LIB_VERSION=1_35
Sun Aug 14 18:43:09 [initandlisten] waiting for connections on port 27017
Sun Aug 14 18:43:09 [websvr] web admin interface listening on port 28017
Una vez arrancado el servicio, ese es el mensaje que obtendremos. Si accedemos con el navegador web a la dirección http://localhost:28017, veremos información sobre el servidor.

Para crear una base de datos, tendremos que usar el gestor, está en la misma carpeta que el "daemon" y se llama mongo.exe. Lo ejecutamos y veremos información sobre el sistema.

Procedemos a crear una base de datos llamada "php". Para eso usamos el comando use, seguido del nombre de la base de datos.





La base de datos no se crea al instante, sino, se crea primero en memoria y luego se escribe en el disco. Lo mismo pasa con los datos introducidos en la base de datos. Esto es bueno porque aumenta la velocidad, pero en caso de corte de energía, los datos al estar en la memoria, se perderían.

Ahora ya tenemos nuestro servidor MongoDB corriendo y una base de datos, llamada php.




Trabajar con MongoDB desde PHP
Si nuestra versión de PHP no incluye el drive para MongoDB, como es mi caso, hay que instalarlo manualmente. Nos dirigimos a la página de descarga del driver para PHP y elegimos la versión que se corresponde a la versión de nuestro PHP, en mi caso, la versión 5.3.

Página de descargas del driver MongoDB para PHP.

Una vez descargado el fichero, nos dirigimos a la carpeta donde PHP guarda las extensiones (en mi caso, al estar usando XAMPP, está en /xampp/php/ext) y copiamos el archivo llamado php_mongo.dll.

Después hay que incluirlo en el fichero de configuración de PHP, php.ini, para que al arrancar cargue también el driver de MongoDB. Abrimos el fichero php.ini y agregamos la siguiente línea: extension=php_mongo.dll.

Para que los cambios surjan efecto, hay que reiniciar el servidor Apache. Si al arrancar el Apache nos muestra algún error, hay que fijarse (lo pondrá en el error) en la versión de VC con la que está compilado nuestro Apache y elegir la dll (el driver de Mongo descargado anteriormente) que corresponda a la versión del VC de Apache.

Ahora vamos a empezar con el código, primero vamos a probar si el driver de MongoDB realmente funciona bien:


Código (php) [Seleccionar]
<?php

$conn 
= new Mongo();

if (
$conn) {
 echo 
"Ok";
} else {
 echo 
"Fail";
}
 
?>


Si recibimos el mensaje Ok, es que todo funciona perfectamente, como véis en el ejemplo, estamos instanciando la clase Mongo, al constructor de la clase podemos pasarle varios parámetros, como la dirección del servidor, el puerto, etc. En nuestro caso, al dejarlo todo por defecto, se conectará a localhost usando el puerto por defecto de Mongo.

Código (php) [Seleccionar]

<?php

$conn 
= new Mongo();
$db $conn->php//seleccionamos la base de datos php

// elegimos una coleccion llamada usuarios
$coll $db->usuarios;

// agregamos usuarios
$obj = array( 
 
"user" => "madpitbull_99",
 
"email" => "madpitbull@mail.com",
 
"password" => "pass"
);
$coll->insert($obj);

// agregamos otro usuario
$obj = array( 
 
"user" => "Alex",
 
"email" => "alex@mail.com",
 
"password" => "pass_de_alex"
);
$collection->insert($obj);

// pedimos todos los elementos de la coleccion
$res $coll->find();

// iterate through the results
foreach ($res as $obj) {
 echo 
$obj["user"] . " - " $obj["password"] . "\n";
}

?>





El código no requiere muchas explicaciones, lo primero que hacemos es conectarnos al servidor (al instanciar la clase). Seleccionamos la base de datos (que hemos creado anteriormente), y la colección (es como una tabla de los motores SQL) e insertamos dos usuario que más tarde listaremos.

A partir de aquí esto depende de vosotros, más abajo os dejo la documentación necesaria para seguir practicando, al final y al cabo, al poca diferencia entre usar MySQL, PostgreSQL o cualquier otro.

_Seguridad en PHP al usar MongoDB
_Documentación oficial (php.net) del driver nativo

#19
PHP / Introducción al patrón Singleton con PHP
12 Agosto 2011, 15:59 PM
Sin recurrir a una explicación de la Wikipedia, diré que un "singleton"; no es más que una
clase que no se puede instanciar más de una vez. En realidad es algo más complejo, pero para entender la idea, nos sirve ésta explicación.

Lo ideal es recurrir es éste patrón de diseño a partir de PHP5, aunque en PHP4 también se puede hacer, pero la clase se podrá instanciar más de una vez.

Partiremos desde el siguiente código:

Código (php) [Seleccionar]

<?php
 
    
/*
    *   Ejemplo de uso del patr&#243;n
    *   Singleton
    */
    
class singletonPattern {
 
        
// Variable que almacenar&#225; la instancia
        
static private $instance null;
 
        
// Constructor de la clase
        
private function __construct() {

                
// es private, por tanto
                // no puede ser instanciada usando
                // new.
 
            
}
    }
 
?>



Tenemos una clase llamada "singletonPattern", con una variable estática llamada "$instance", dicha variable indica si la clase ha sido instancia o no,
en caso de tener el valor "null" la clase no ha sido instanciada.

La siguiente función, no es más que el constructor de la clase, que como vemos es "private", por lo tanto, no podemos acceder a ella desde el exterior.
Al intentar crear un objeto de la clase, se producirá un error, ya que, no podrá ser instanciada mediante la palabra reservada "new".

Para resolver éste problema, crearemos otro objeto que instancie la clase por nosotros y que nos devuelva el objeto.

Código (php) [Seleccionar]

<?php
 
    
/*
    *   Ejemplo de uso del patr&#243;n
    *   Singleton
    */
    
class singletonPattern {
 
        
// Variable que almacenar&#225; la instancia
        
static private $instance null;
 
        
// Constructor de la clase
        
private function __construct() {
            
// es private, por tanto
            // no puede ser instanciada usando
            // new.
 
        
}
 
        static public function 
createInstance() {
 
            if (
self::$instance == null) {
                
// Si la clase no ha sido instanciada
                
self::$instance = new singletonPattern();
            }
            return 
self::$instance;
 
        }
 
    }
 
    
$obj singletonPattern::createInstance();
 
?>



Como vemos, se ha creado un método llamado "createInstance()" que nos devuelve una instancia/objeto de la clase "singletonPattern", la variable "$instance", al ser
privada, hay que acceder a ella usando la palabra reservadaself:: seguida del nombre de la variable.

Básicamente, la última función creada comprueba si el valor de $instance es null, o sea la clase no ha sido instanciada, sino, se crea y se devuelve una instancia del objeto.

Como último creamos una instancia de la clase usando la última función creada.
#20
Ya están disponibles las presentaciones (PDF) de la recién acabada Defcon19.
Vía| CyberHades.

#22
PHP / Desarrollo modular en CodeIgniter
2 Agosto 2011, 20:57 PM
 CodeIgniter se caracteriza por su diseño MVC, parece que hace que ha empezado a usarse y ya tiene algunos defectos, el aparente problema viene al efectuar tareas de escalabilidad sobre un sistema.

HMVC ( Hierarchical Model View Controller o Modelo Vista Controlador Jerárquicos ) es la evolución de MVC, resumiendo, lo que hace ésta nueva implementación es dejar la posibilidad de desarrollar una aplicación por módulos y después unirlos como si se tratara de unos plugins.



Cada "triangulo" de MVC (Controlador + Modelo + Vista) funcionan independientemente de los demás, de ahí llamarlos plugins, permitiendo desarrollar aplicaciones robustas y "más profundidad".

Algunas ventajas pueden ser:


  • Al tener una carpeta por cada módulo, las tareas de mantenimiento serán mucho más sencillas.
  • Reduce la dependencia entre otras partes de la aplicación.
  • Hace que el sistema sea más extensible.
De momento no hay ninguna respuesta oficial por parte de los creadores de CodeIgniter, pero los usuario de este framework han desarrollado y compartido con los demás sus propias implementaciones.

Seguramente hayan más, pero yo sólo he encontrado tres:

Si conocéis alguna más, os invito a que la compartáis con nosotros.

Una de las más utilizadas es Modular Extensions, por su facilidad de uso y buena documentación.

Resumiendo, lo único que hace HMVC es dividir las capas de la aplicación en "triadas" o grupos de tres.

En la mayoría de las librerías mencionadas anteriormente se sobrescriben partes del núcleo de CodeIgniter, como el router, que es la parte encargada de direccionar las peticiones.

 

Enlace | HMVC an Introduction and Application



#23
GNU/Linux / Introducción al comando Find
28 Julio 2011, 21:44 PM
Introducción al comando Find


El comando por excelencia para buscar archivos en Linux es find. En este articulo se pretende dar
una introducción a este comando.

Para los ejemplos trabajare sobre una carpeta llamada "test" con la siguiente estructura:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ ls
backup.sh      paso_referencia.c  punteros.c    Stuff
find_intro.sh  Pilas_Colas.cpp    punteros.cpp



El ejemplo mas básico es buscar por nombre de fichero, en mi caso buscare un fichero llamado "punteros.c":

Código (bash) [Seleccionar]
find -name "punteros.c"
./punteros.c


El parametro -name tiene en cuenta si la palabra tiene letras en minúscula o mayúscula, si se quiere
ignorar eso, hay que usar el parametro -iname:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find -iname "pilas_colas.cpp"
./Pilas_Colas.cpp



Para limitar la búsqueda a un directorio, se hace de la siguiente manera:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ pwd
/home/mad/test
mad@mad-laptop:~/test$ find /home/mad/test -name punteros.c
/home/mad/test/punteros.c


En mi caso, he limitado la búsqueda a la carpeta /home/mad/test.

Podemos indicarle hasta el nivel de profundidad al realizar la busqueda:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find / -maxdepth 3 -name backup.sh
mad@mad-laptop:~/test$ sudo find / -maxdepth 4 -name backup.sh
/home/mad/test/backup.sh


En el primero ejemplo estamos partiendo desde /(root) y le indicamos que busque el fichero "backup.sh" en los
tres primeros niveles, como veréis el comando no arroja ningún resultado.

A continuación lanzamos el mismo comando pero indicándole que busque en los cuatro primeros niveles y vemos que
encuentra el fichero deseado.

Se le puede indicar un rango de niveles de profundidad:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find / -maxdepth 3 -maxdepth 5 -name backup.sh
/home/mad/test/backup.sh


En este ejemplo se buscara entre los niveles tres y cinco.

Mediante el parámetro -exec podemos ejecutar otros comandos a medida que se encuentran ficheros:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ./Stuff -iname "SoCkeTs.c" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e  ./Stuff/sockets.c


En este caso, se buscan un fichero llamado "SoCkeTs.c" y se le calcula el hash MD5.

Para invertir la búsqueda, se hace la siguiente manera:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find . -not -iname "sockets.c"
.
./punteros.c
./Stuff
./Stuff/pr0n.avi
./Stuff/biografia.txt
./Stuff/links.txt
./backup.sh
./punteros.cpp
./find_intro.sh
./paso_referencia.c
./Pilas_Colas.cpp


El comando anterior encuentra todos los ficheros cuyo nombre no es "sockets" y limitando la búsqueda
al directorio actual (mediante el punto .).

Una función muy útil en cuanto a auditorias de seguridad es la búsqueda de ficheros por permisos:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find . -perm -g=x -type f -exec ls -l {} \;
-rwxrwxrwx 1 mad mad 198 2011-07-28 20:49 ./find_intro.sh
-r-xr-xr-x 1 mad mad 0 2011-07-28 20:49 ./paso_referencia.c


El ejemplo de arriba busca todos los ficheros situados en el directorio actual y que tengan permisos de ejecución
para "el grupo".

Otra función bastante útil puede ser la búsqueda de ficheros vacíos:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ~ -empty
/home/mad/.evolution/mail/local/Outbox
/home/mad/.evolution/mail/local/Drafts
/home/mad/.evolution/mail/local/Sent
/home/mad/.evolution/mail/local/Templates.ibex.index.data
/home/mad/.evolution/mail/local/Templates
/home/mad/.evolution/mail/local/Sent.ibex.index.data
/home/mad/.evolution/mail/local/Outbox.ibex.index.data
/home/mad/.evolution/mail/local/Drafts.ibex.index.data
/home/mad/.evolution/calendar/config
/home/mad/.evolution/memos/config


Eso buscara todos los ficheros vacíos de la carpeta personal del usuario.

Podemos buscar los ficheros mas grandes del sistema:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find . -type f -exec ls -s {} \; | sort -n -r | head -3
4 ./find_intro.sh
0 ./Stuff/sockets.c
0 ./Stuff/pr0n.avi


Eso buscara los tres ficheros mas grandes de la carpeta "this" o en la que estamos.

Usando la búsqueda por tipo podemos por ejemplo, buscar todos los ficheros ocultos:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ find ~ -type f -name ".*"
/home/mad/.hgrc
/home/mad/.recently-used
/home/mad/.xvidcaprc
/home/mad/.scapy_history


Recuerdo que en Unix/Linux los ficheros ocultos tienen un punto delante del nombre, en este caso se buscan
todos los que empiezan por un punto, o sea, todos los ocultos.

Otra función bastante útil es la búsqueda de ficheros por tamaño:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ sudo find ~ -size +10M

Encontrara todos los ficheros mayores de diez megas en la carpeta personal del usuario.

Para las operaciones que mas usamos, podemos crear un alias:

Código (bash) [Seleccionar]
mad@mad-laptop:~/test$ alias rmao="find . -iname a.out -exec rm {} \;"

Ese alias, al ejecutarlo, borrara todos los ficheros con el nombre "a.out" encontrados en el
directorio actual.


Este artículo está basado en 15 Practical Linux Find Command Examples.

En el blog del autor, podéis encontrar la segunda parte del artículo: 15 Awesome Linux Find Command Examples (Part2).


#24
Redes / Introducción rápida a Ethtool
26 Julio 2011, 22:20 PM
 Ethtool es una herramienta para gestionar los parámetros de nuestra tarjeta de red en un sistema Unix/Linux.

Por defecto no viene instalada en casi ningún sistema, por lo que procedemos a instalarla:

Código (bash) [Seleccionar]
apt-get install ethtool

Si véis la ayuda del programa os daréis cuenta de que tiene infinidad de usos, lamentablemente en este artículo no se
cubrirán todos.

1.) Listar los parámetros del interfaz de red
Le pasamos como parámetro el nombre del interfaz:

Código (bash) [Seleccionar]
ethtool eth0

Y el resultado es el siguiente:



Muestra información como la velocidad, el tipo de duplex:
- Full Duplex: Envía y recibe paquetes al mismo tiempo, este modo se utiliza cuando el dispositivo ethernet está conectado a un switch.
- Half Duplex: Solo se envía o se reciben paquetes al mismo tiempo, usado cuando se conecta a un hub.
- Auto Negotiation: Si está activado, se decide de forma automática el modo de operación.

Para desactivar la opción de auto negociación, se hace de la siguiente manera:

Donde eth0 es mi interfaz de red.

Código (bash) [Seleccionar]
ethtool -s eth0 autoneg off

2.) Cambiar la velocidad del adaptador

Cambia la velocidad de transmisión del adaptador:

Código (bash) [Seleccionar]
ethtool -s eth0 speed 100 autoneg off

Después hay que levantar la tarjeta de red con:
Código (bash) [Seleccionar]
ifup eth0

3.) Ver los drivers de la tarjeta de red
Muestra la versión del driver, firmware y detalles del bus:

Código (bash) [Seleccionar]
ethtool -i eth0

4.) Estadísticas sobre el adaptador

Código (bash) [Seleccionar]
ethtool -S eth0

Para hacer permanentes los cambios, en Ubuntu, hay que editar el fichero /etc/network/interfaces y agregar el comando de configuración ethtool, de la siguiente manera:

Código (bash) [Seleccionar]
post-up ethtool -s eth2 speed 1000 duplex full autoneg off

Este artículo está basado en el original 9 Linux ethtool Examples to Manipulate Ethernet Card (NIC Card).



#25
Medir el ancho de banda entre dos nodos en una LAN


Como administrador de una red es importante saber a que velocidad circulan los datos en nuestra red, pudiendo optimizar la red o detectar cuellos de botella.

Para ésta tarea hay varias herramientas, en éste artículo me centraré en el uso de Iperf [Wiki], una herramienta gratuita de tipo cliente-servidor para medir el ancho de banda entre dos nodos. Se trata de una herramienta de consola que mide el tráfico TCP y UDP, pero se ha desarrollado una interfaz gráfica (GUI) en java, llamada JPerf, cuyo uso veremos más adelante.

Introducción a IPerf

Al tratarse de una arquitectura cliente-servidor, esta herramienta hay que instalarla en los dos nodos en los que se realizará la prueba. Es multiplataforma y opensource, pero en este tutorial usaré dos máquina con GNU/Linux, al final encontraréis como usarlo en Windows.

Instalar IPerf:

Código (bash) [Seleccionar]
apt-get install iperf


Configurar IPerf

En el equipo que hará de servidor hay que ponerlo en modo escucha y en el que se conectará habrá que indicarle la IP del nodo servidor:

Servidor:
Código (bash) [Seleccionar]
iperf -s



Cliente:

Código (bash) [Seleccionar]
iperf -c <ip_servidor>

Después de conectarnos al cliente se realizará la prueba y saldrá el resultado en MB/segundo.




Se disponen de muchas más opciones para realizar el testeo.

Para el cliente:

-b, --bandwidth #[KM]
for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec,
implies -u)

-c, --client
Ejecutarse en modo cliente y conectarse a un servidor

-d, --dualtest
Se realiza un test bidireccional

-n, --num
#[KM] Número de paquetes a transmitir

-r, --tradeoff
Test bidireccional individual

-t, --time
# Tiempo en segundo de transferencia (por defecto 10 segundos)

-F, --fileinput
Configurar un fichero como datos de transferencia

-I, --stdin
Configurar entrada de datos por consola como datos de transferencia

-L, --listenport #
Puerto para recibir los tests bidireccionales

-P, --parallel
# Número de procesos paralelos

-T, --ttl
# time-to-live, para multicast (por defecto 1)

Miscellaneous:
-h, --help
Muestra la ayuda del programa

-v, --version
Muestra la versión actual

[KM] Indica las opciones que soporta, una K para kilo o M mega.


A continuación vamos a ver algunos ejemplos de uso de los siguientes parámetros.


Formato de Datos:

Mediante el parámetro -f podemos indicarle a la aplicación en que formato debe  mostrarnos los datos transferidos. Se usará para: bits(b), bytes(B), kilobits(k), kilobytes(K), megabits(m), megabytes(M), gigabits(g) ó gigabytes(G).

Cliente:
Código (bash) [Seleccionar]
iperf -c 192.168.1.100 -f G


Servidor:
Código (bash) [Seleccionar]
iperf -s


Test Bi-Direccional:

Por defecto, solo se mide el tráfico proveniente del cliente, pero si usamos el parámetro -r en el servidor, el testeo se realizará en los dos nodos.

Cliente:
Código (bash) [Seleccionar]
iperf -c 192.168.1.100 -r


Servidor:
Código (bash) [Seleccionar]
iperf -s

Si se quiere medir de forma simultanea, hay que usar -d y si se quiere medir de forma secuencial, es con el parámetro -r

Cliente:
Código (bash) [Seleccionar]
iperf -c 192.168.1.100 -d


Servidor:
Código (bash) [Seleccionar]
iperf -s




Tamaño de los Datagramas:

Se puede especificar el tamaño que tendrán los datagramas, mediante el parámetro -w y un valor comprendido entre 2 y 65,535 bytes.

Cliente:
Código (bash) [Seleccionar]
iperf -c 192.168.1.100 -w 2000


Servidor:
Código (bash) [Seleccionar]
iperf -s -w 4000


Tiempo, puerto e interval:

Al igual que el comando "ping" permite indicar un tiempo mediante -t, un intervalo mediante -i y un puerto mediante -p

Cliente:
Código (bash) [Seleccionar]
iperf -c 192.168.1.100 -p 1337 -t 15 -i 3


Servidor:
Código (bash) [Seleccionar]
iperf -s -p 1337



Hay muchos más parámetros que nos pueden facilitar las tareas, el resto lo dejo en vuestras manos.


Introducción a JPerf

Como ya he dicho anteriormente, JPerf es una GUI para IPerf. Lo primero que haremos será descargarla desde la página oficial del proyecto (http://code.google.com/p/xjperf/downloads/list).

Al estar hecho en Java, también necesitaremos el VM de Java. En Windows tendremos que ejecutar un .exe y en Linux o Mac, un .sh mediante consola y con permisos de ejecución.




Configurar JPerf

Al tratarse de una interfaz gráfica, suele ser bastante intuitivo, por lo que no se necesitarán muchas instrucciones.



Como podéis ver, los parámetros son los mismos, y lo único que hace, es mostrar mediante una GUI los resultados obtenidos.

En esta última prueba, la he realizado desde un nodo con Windows XP conectandome a un servidor Linux. Os dejo juguetear con esta aplicación.


Documentación y Enlaces externos:
_Compilar Iperf en Windows con Cygwin.
_Man Pages para IPerf | Mirror
_Documentación Extendida del IPerf
#26
Android / Mapas Off-Line para Android
18 Julio 2011, 16:44 PM
Nos vamos de vacaciones a un país extranjero y no sabemos dónde está la pizzería de la calle Slöjdgatan 10, 111 57 Stockholm. Pero tranquilo, tienes tu Android con GPS. Ay, no, que estoy en Suecia y no puedo utilizar la tarifa de datos con Google Maps. Pues si queridos lectores, todo el mundo sin excepción se ha encontrado en esta situación y para ello existen los mapas Offline. Bueno, también sirven por si no queremos consumir 3G dentro de nuestro país xD. Os queremos presentar las mejores aplicaciones de mapas offline y las vamos a dividir según los mapas que utilicen.

Open Street Maps
MapDroyd

Está analizada con más detalle aquí, pero en resumen es una aplicación que utiliza los mapas de OpenStreet (libres). Abres la aplicación, escoges la región de la cual te quieres descargar los mapas y voilà Os recomendamos leeros el análisis completo.

OsmAnd


Un proyecto OpenSource que tiene la intención de facilitar la navegación GPS tanto Online como Offline. Tiene unas cuantas funciones más que MapDroyd y la interfaz gráfica está mucho más cuidada. Mucha más información y fotos en su web oficialy su wiki . Una buena opción que podéis probar.

Todos los servicios de mapas (Google Maps, OpenStreet, Microsoft Maps...)
Todas las aplicaciones que mencionamos a continuación vienen SIN mapas. Tendremos que previamente crear los mapas (al gusto) y añadirlos manualmente a la SD. A cambio tenemos unos mapas de mayor calidad y precisión (Google Maps) y siguen siendo offline.

Antes de nada vamos a explicar como funciona esto. Hay que utilizar el programa (gratis y para todas las plataformas) Mobile Atlas creator o también conocido como TreckBuddy. En su página web encontraréis más información y lo podréis descargar.

¿Cómo creo los mapas?

No os preocupéis que es muy pero que muy fácil. Los compañeros de OruxMaps han creado un magnífico tutorial que os recomiendo o bien pasaros por este blog. Repito, es muy fácil y podéis escoger el nivel de detalle que queráis (del 1-17) siendo 1 la visión global del mundo a 17 el máximo nivel de zoom de Google Maps. Por descontado, el tamaño de vuestro mapa variará dependiendo de la cantidad de detalle que pongáis.

Veamos ahora las diferentes aplicaciones.

OruxMaps

Una señora aplicación creada por unos españoles y completamente gratuita. Con OruxMaps tienes


  • Visor de mapas online (Google, Microsoft, Yandex, WMS,...).
  • Cuando se navega online, las imágenes se guardan para su uso offline.
  • Map Creator. Partiendo de mapas online, se pueden crear mapas offline.
  • Visor de mapas offline. Utiliza mapas calibrados para OruxMaps con OruxMapsDesktop o TB Atlas Creator (ver secciones de Descargas y Manuales).
  • Visor de mapas por capas offline. Ver manual OruxMapsDesktop.
  • Rotación del mapa, con la brújula o en la dirección seguida (mapas offline).
  • TrackLog: permite guardar la ruta trazada (formato gpx y kml).
  • Visualizar rutas/tracks (formato gpx y kml).
  • Analizar rutas anteriores (formato gpx y kml).
  • Carga automática de mapas, al salirse del mapa actual, o al encontrar un mapa más detallado.
  • Zoom sobre los mapas
  • Guardar y editar Waypoints (Puntos de Interés)
  • Subir o descargar Rutas desde Everytrail.com
  • Tracking en vivo con MapMyTracks.com
  • Muestra Coordenadas, rumbo, velocidad, altitud, distancia,...
  • ¡Y esto es sólo el comienzo!
Vamos, una pequeña maravilla. No queda ni que decir que la interfaz gráfica está muy cuidada y en su web disponen devarios manuales realizados para que lo entiendas al máximo. Desde aquí les felicitamos por su proyecto porque nos encanta, está bien hecho y demuestra el nivel de los programadores del país. Enhorabuena

Rmaps

Una aplicación mucho más sencilla pero que funciona igualmente con este tipo de mapas. Podrás buscar direcciones, obtener puntos de interés y exportar tus recorridos. Así como importar rutas previamente hechas. No hay mucho más que decir, cumple con su propósito.

Maverick

Otra aplicación de la que ya hemos hablado anteriormente. Muy completa, con una interfaz gráfica muy atractiva y que funciona tanto en modo online como offline. Revisad el artículo que hicimossi os interesa.

Y estas son las opciones que os hemos dado desde El Androide Libre. Esperamos que os hayan gustado y que disfrutéis de vuestras vacaciones.

Descargas
MapDroyd



OsmAnd



OruxMaps



Rmaps



Maverick Lite (hay una Pro)




Fuente | ElAndroideLibre
Más Información:
_True Offline maps for your Android.
_GMaps 5.0 (Permite descargar mapas).

#27
Se trata de una pequeña librería adaptada para CodeIgniter para registrar los intentos de log-in en nuestro sistema de autenticación. Para guardar los logs se emplea un fichero xml.

Código (php) [Seleccionar]

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//begin AuthLogger.php -- Library


class AuthLogger {

/*-----------------------------------------------------------------------*/
/**
 * Class Settings
 * @logFile = Name of the log file
 * @logPath = The path where the logFile will
 *    be saves. By default it saves it
 *    in the CI logs folder.
 */
private $logPath;
private $logFile 'auth_logs.xml';
    private 
$user$pass$ip$useragent;

/*-----------------------------------------------------------------------*/
/**
 * The constructor of the Class.
 * It needs and array with the parameters.
 */
function __construct($params)
    {
    
//The logPath it can be changed if the lib
    
// won't be used with CI
$this->logPath APPPATH.'logs/';
        
$this->user  $params['user'];
        
$this->pass  $params['pass'];
        
$this->ip  $params['ip'];
        
$this->useragent $params['useragent'];

        
$this->addLogs($this->user$this->pass$this->ip$this->useragent);


    }

/*-----------------------------------------------------------------------*/
/**
 * Creates or Adds the logs to the XML File.
 * It's an internal private function.
 */
    
private function addLogs($user$pass 'Good Auth'$ip$useragent)
    {

if (!file_exists($this->logPath.$this->logFile)) {
$xml = new SimpleXMLElement("<logdata></logdata>");
} else {
$xml simplexml_load_file($this->logPath.$this->logFile);
}
        
        
$authLog $xml->addChild('auth_log');
        
$authLog->addChild('user'$user);
        
$authLog->addChild('password'$pass);
        
$authLog->addChild('ip'$ip);
        
$authLog->addChild('user_agent'$useragent);
        
$authLog->addChild('date'date("d F Y - G:i:s"));
        
$xml->asXML($this->logPath.$this->logFile);

    }
/*-----------------------------------------------------------------------*/

}

//end AuthLogger.php -- Library
?>



En principio fue desarrollada para usarla con CodeIgniter, por lo tanto solamente hay que copiarla en la carpeta application/libraries.
Si se quiere usar sin este framework, hay que incluír la clase a vuestro script.

Modo de Uso

CodeIgniter:
Crear un array con asociativo con los siguientes valores, los índices asociativos del array no se pueden cambiar, al menos que se cambie en la librería:

Código (php) [Seleccionar]

$params = array (
                        'user'      => $user,
                        'pass'          => $pass',
                        'ip'            => $this->session->userdata('ip_address'),
                        'useragent' => $this->session->userdata('user_agent')
                    );


Donde user es el usuario que hemos recibido del formulario, pass es la contraseña e ip y useragent son la IP del posible
atacante y el useragent (que contendrá el navegador y el sistema operativo).


Después cargaremos la librería y en la misma sentencia le pasamos los parámetros:

Código (php) [Seleccionar]

       $this->load->library('AuthLogger', $params);


Y los datos se guardarán en nuestro archivo de logs en un formato xml de la siguiente manera:

Código (xml) [Seleccionar]

<?xml version="1.0"?>
<logdata>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>127.0.0.1</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22:38:51</date>
</auth_log>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>0.0.0.0</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22</date>
</auth_log>
<auth_log>
<user>mad</user>
<password>mad</password>
<ip>127.0.0.1</ip>
<user_agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/</user_agent>
<date>08 July 2011 - 22:38:51</date>
</auth_log>
</logdata>


Por si este archivo cae en manos ajenas, lo mejor sería no guardar la verdadera password en el log.
Para eso, en nuestra aplicación deberíamos implementarla algo así:

Código (php) [Seleccionar]

$user = $this->input->post('user');
$pass = $this->input->post('password');

if ($this->Users_model->checkUser($user, $pass)) {
    //Good User Credentials

    /* AuthLog Parameters and Lib */
    $params = array (
        'user'      => $user,
        'pass'      => 'Good Authentification',
        'ip'        => $this->session->userdata('ip_address'),
        'useragent' => $this->session->userdata('user_agent')
    );
    $this->load->library('AuthLogger', $params);
    /* AuthLog Parameters and Lib */

} else {
    //BAD User Credentials

    /* AuthLog Parameters and Lib */
    $params = array (
        'user'  => $user,
        'pass'  => $pass,
        'ip'    => $this->session->userdata('ip_address'),
        'useragent' => $this->session->userdata('user_agent')
    );
    $this->load->library('AuthLogger', $params);
    /* AuthLog Parameters and Lib */

}


Simplemente, si los datos del usuario proporcionados son válidos, sobrescribir el parámetro 'pass' por un texto alternativo, también se puede aplicar al
campo del usuario, para más seguridad.

Uso sin framework:

Como ya lo he mencionado, esta librería ha sido creada con el fin de usarla junto con CodeIgniter, pero se puede usar con cualquier proyecto y framework
fácilmente. Se haría de la siguiente manera:

Código (php) [Seleccionar]

    require_once('authLogger.class.php');
    $authLogger = new AuthLogger($params);


Los parámetros son los mismos que en el caso de CodeIgniter. No olvidéis aplicar el mismo o un mecanismo de autenticación parecido al mencionado en el ejemplo de uso
con CodeIgniter, para no incluir los datos verdaderos de acceso en el registro.
#28
PHP / Crud Generator en Codeigniter
6 Julio 2011, 20:28 PM

Una de las cosas que diferencia a Codeigniter con otros frameworks en PHP es que no genera controladores ni modelos de forma automática, como lo hace Zend Framework.

Al ser un proyecto abierto, algunos usuarios han creado sus propias extensiones, como ha pasado con CRUD Generator. En realidad se podría decir que se trata de una aplicación y no de un módulo del núcleo o alguna librería, ya que, lo único que hace es generar el código necesario para crear, leer, actualizar y borrar tablas.

El generador creará los siguiente ficheros:

Views

  • {Controller_name}_list.php
  • {Controller_name}_add.php
  • {Controller_name}_edit.php

Model

  • Codegen_model.php -> a generic model, you can use you own model if you want.

Controller

  • {Controller_name}.php


El autor de la aplicación nos da más detalles sobre la aplicación, como que no es CRUD Generator. No se trata de la opción conocida como scaffolding, genera un código sencillo, a parte de los ficheros mencionados, también crea un controlador llamado form_validation.php encargado de validar los formularios.

Para instalarlo, solo hay que descomprimirlo en nuestra carpeta htdocs, configurar la base de datos en /config/database.php e ir a la aplicación. El autor deja una demo online, para los que quieran probarlo.

Enlaces: Página Oficial | DescargarMirror.



#29


Grupo steam de elhacker.NET



Acabo de crear un grupo en Steam para todos los usuario del foro así que ¡cualquiera es bienvenido!

Para unirse al grupo se necesitará una cuenta Steam, darse de alta es gratis y no requiere introducir ninguna cuenta bancaria o demás.

Aunque no compréis juegos, os alegrará saber que Steam a veces regala juegos. Como es el caso de Team Fortress 2 y algunos de Valve.

El fin del grupo es organizar torneos y partidas cada cierto tiempo y pasar un buen rato con los compañeros del foro.

La dirección del grupo es: http://steamcommunity.com/groups/elhackernet


Aprovechad que TeamFortress 2 es gratis y se puede jugar en línea. Se harán torneos de Counter Strike Source, Team Fortress 2 y demás juegos que se propongan.



#30


Grupo Steam de elhacker.NET



Acabo de crear un grupo en Steam para todos los usuario del foro así que ¡cualquiera es bienvenido!

Para unirse al grupo se necesitará una cuenta Steam, darse de alta es gratis y no requiere introducir ninguna cuenta bancaria o demás.

Aunque no compréis juegos, os alegrará saber que Steam a veces regala juegos. Como es el caso de Team Fortress 2 y algunos de Valve.

El fin del grupo es organizar torneos y partidas cada cierto tiempo y pasar un buen rato con los compañeros del foro.

La dirección del grupo es: http://steamcommunity.com/groups/elhackernet


Aprovechad que TeamFortress 2 es gratis y se puede jugar en línea. Se harán torneos de Counter Strike Source, Team Fortress 2 y demás juegos que se propongan.



#31
Diseño Gráfico / Encuesta Wallpaper Julio
29 Junio 2011, 20:00 PM
Encuesta Wallpaper Julio.

Ya se puede votar para elegir el ganador del mes de Julio. Se permiten 2 votos por usuario.




Concursantes, por orden de entrega:

1.) Di~OsK.






2.) Darioxhcx.






3.) madpitbull_99.






4.) raul338.






5.) KarlosVid(ÊÇ).






Nota: Pulsar sobre la imagen para ampliar. ¡Suerte a todos!
#32
Introducción a los Web Application Firewalls (WAF)

Se pretende dar una introducción sobre qué es y como funcionan los firewalls para aplicaciones web o WAF.

¿Que es un Web Application Firewall o WAF?

La idea principal al desarrollar una aplicación web, es que, sea disponible desde cualquier lugar y que todo el mundo pueda acceder a ella. Este es el gran factor diferenciador respecto a las aplicaciones de escritorio.
Al ser empleadas por más usuarios, son más dispuestas a sufrir ataques, aunque la idea es construir aplicaciones tolerantes a fallos y sin vulnerabilidades, por diferentes razones (en las que no entraremos) no siempre pasa eso.

El WAF solo es una herramienta complementaria y no pretende sustituir las medidas de protección que el desarrollador tiene que llevar a cabo al programar una aplicación.

Se trata de un dispositivo físico que analiza el tráfico web (entre el servidor web y la WAN), los datos recibidos por parte del usuario y protege de diferentes ataques web como: SQL Injection, Cross Site Scripting, Remote and Local File Inclusion, , Buffer Overflows, Cookie Poisoning, etc. Este dispositivo, trata de proteger de los ataques dirigidos al servidor web que los IDS/IPS no nos pueden defender.


Los Pros y Contras de los Modelos de Seguridad

Dentro de los WAF respecto al Modelo de Seguridad se distinguen:

A) Modelo de Seguridad Positiva

Los WAF que siguen el modelo de seguridad positiva deniegan por defecto todas las transacciones y solamente acepta las que identifica como seguras o válidas. Para determinar si una transacción es segura, consulta una una serie de reglas que se definen previamente, ya sea, por el auto-aprendizaje de la aplicación o configuradas manualmente.

A simple vista, parece ser la solución idónea, pero si nuestra aplicación está sujeta a cambios en el diseño o funcionamiento este modelo de seguridad puede volverse difícil de mantener. Otras ventajas de este modelo es que no dependen de ningún tipo de actualizaciones y nos protegen de ataques desconocidos, como desventaja, son más propensos a detectar falsos positivos y necesitan un proceso de aprendizaje, para saber como funciona la aplicación.

B) Modelo de Seguridad Negativa

En este modelo de seguridad, el WAF acepta todas las transacciones y solamente deniega las que detecta como una posible amenaza o un ataque. Contrastando con el anterior, no es muy preciso y depende de actualizaciones y bases de firmas de posibles ataques.

A pesar de las desventajas arriba citadas, los WAF que siguen este modelo no precisan de muchos ajustes y suelen ser fáciles de administrar.


¿Que tipo de ataques puede bloquear?

Este aspecto puede variar dependiendo del fabricante del equipo, aunque, la mayoría detectan los ataques más comunes.

Puede detectar un posible buffer overflow analizando las variables que lleguen por GET o POST. Por ejemplo, si el valor de una variable es superior a 150 caracteres, el WAF podría detectar la transacción como maliciosa y denegarla.

Para los ataques de Cross Site Scripting y SQL Injection, el WAF vigila que los valores pasados tanto por GET como por POST, no contengan valores como "SELECT FROM, UNION, CONCAT, <script >, %, etc.

El factor negativo, es que, si nuestra aplicación utiliza caracteres que el WAF tenga en su "lista negra", denegará las peticiones de los usuarios, en este caso hay dos soluciones: rediseñar el funcionamiento de la aplicación o configurar el WAF para que ignore dichos caracteres.

Algunos WAF también monitorizan las respuestas del servidor, por ejemplo, si en una respuesta, que el servidor web envía al usuario se detectan cadenas que pueden ser identificadas como cuentas bancarias, el WAF lo puede detectar como un posible ataque y denegar la respuesta.

Proceso de Aprendizaje

Supongamos que tenemos una aplicación que muestra los productos de un catálogo y para mostrar un producto, se realiza la siguiente petición:

GET http://sitepath.com/show_article.php?id=15

La aplicación de por si sola, creará una regla que especifique que el valor de esa variable es numérica. Si se realiza la siguiente petición:

GET http://sitepath.com/show_article.php?id=15' or 1=1 --

El WAF detectará una anomalía y tomará las medidas necesarias, que suelen ser, la denegación de la petición o el redireccionamiento a una página previamente configurada, como un error 404.


¿Que riesgos implica emplear un WAF?

Si no está configurados correctamente, pueden detectar muchos falsos positivos, por tanto, muchas transacciones denegadas y pérdida de capital por parte de la empresa.

La mayoría necesitan adaptación y configuración ante nuevos cambios en el funcionamiento de la aplicación.

Pueden introducir un cierto retardo en las transferencias, por tanto, clientes insatisfechos y jefes molestos. Para atenuar este factor negativo, se pueden implementar aceleradores SSL (es un dispositivo hardware que se encarga de la capa de protección SSL, quita carga al servidor web), usar webchache, comprimir los datos HTML, CSS y JS al enviarlos al navegador.


Modos de Funcionamiento

Pueden funcionar en modo bridge, router, proxy o plugin. Disponibles tanto como Hardware como Software.

Un ejemplo bastante conocido de WAF a nivel software es mod_security, un plugin de Apache que se encarga de la seguridad en las transferencias. La mayoría, por no decir todos, disponen de funciones de registro o logs, donde almacena los sucesos ocurridos.

Una característica bastante interesante es la denegación de peticiones provenientes de diferentes lugares geográficos, por ejemplo, es probable que a nuestro personal de marketing no le interese recibir visitas a la web de ventas de la compañía provenientes de Asia Oriental y deciden denegar toda petición proveniente de ese continente.


Bibliografía y Enlaces externos:
_WAFEC - The Web Application Security Consortium.
_Web Application Firewall - OWASP.
_Web Application Firewall (WAF) Products.
#33
ASM / Libros de Ensamblador / ASM [eBooks]
24 Junio 2011, 11:53 AM


Se trata de un .rar con seis libros de Ensamblador, en Español e Ingles.

Peso: 14.73 MB

Títulos:

  • Programming from the ground up.
  • Professional Assembly Language.
  • Programación Avanzada en Lenguaje Ensamblador.
  • El universo digital del IBM PC, AT y PS/2 (Algo anticuado).
  • The art of assembly language (HLA).

Descargar:
http://www.multiupload.com/CNCJWD4ULX

#34
    Teoría Servicio de Correo Electrónico

    Dado que es un tema que se puede hacer pesado, se pretenderá dar una breve explicación en forma de esquema.

    Características:


    • Permite enviar correos desde un remitente a varios destinatarios.
    • No se espera respuesta inmediata.
    • La entrega es prácticamente inmediata.
    • El coste es casi nulo.
    • Se puede leer en cualquier momento y almacenar en formato digital y en cualquier dispositivo digital.
    • Permite generar el mensaje y enviarlo a posterior.
    • Sigue el modelo cliente servidor.

    Desventajas:


    • Permite la propagación de malware.
    • No garantiza la recepción.
    • No asegura que el remitente sea quien dice ser.
    • No avisa si ha habido problemas con el mensaje o el envío.


    Elementos del Correo Electrónico:

    • Buzón de Usuario. Espacio en el servidor asociado a una cuenta, es donde se almacenan los mensajes.
    • Cuenta de Correo. Identificador de la cuenta asociada al buzón.
    • Cuenta de Correo Redirigida. Cuenta no asociada a un buzón, sino que está asociada a una cuenta de otro dominio a la que se reenvían los correos.
    • Alias. Especie de redireccionamiento de cuentas dentro de un dominio.
    • Listas de distribución. Es una cuenta virtual que engloba a varias cuentas de correo que pueden pertenecer al mismo usuario o a diferentes.


    Agentes del Servicio de Correo:

    1.) MUA (Mail User Agent). Es un programa que se instala en el ordenador del usuario y que permite leer y enviar correo (Outlook, Thunderbird, Mailx, The Bat, etc).

    Características:

    • Dispone de un interfaz de usuario local que permite editar, componer, leer el corre.
    • Es el cliente de correo tradicional.
    • Permite almacenar mensajes en el ordenador local y mantener la libreta de direcciones.


    2.) MDA (Mail Delivery Agent). Se encarga de copiar los mensajes desde el servidor de correo hasta el buzón de usuario.

    Algunos de los más usados son:


    • Qpopper y Cyrus.
    • Maildrop (Unix).
    • Dovecot.


    3.) MTA (Mail Transfer Agent). Transfiere los mensajes entre servidores, empleando el protocolo SMTP.

    Los más comunes son:


    • Sendmail.
    • Postfix.
    • Microsoft Exchange.
    • Qmail.
    • Exim.

    Funciones:

    • Realiza el encaminamiento del correo.
    • Trabajan como servidores de correo.
    • Envía el correo saliente y chequea el entrante.


    El Envío de un Correo Electrónico:

    El correo se envía desde el MUA hacia el MTA y se enruta de servidor MTA en servidor MTA hasta llegar al servidor MTA del destinatario, empleando protocolo SMTP.

    Después el MTA de destino entrega el correo al servidor de correo entrante MDA, el cuál almacena el correo en el buzón del usuario.

    El cliente de correo MUA accede al buzón para leer el correo empleando protocolo POP o IMAP.

    Los MDA están protegidos por nombre de usuario y contraseña.




    Estructura de los mensajes:

    Los mensajes tienen dos partes:

    1.) Cabecera. Contiene información necesaria para transferir el mensaje que va a permitir al usuario saber una serie de cosas:


    • Quién le envía el mensaje.
    • Cuándo.
    • Como se lo ha enviado.

    La estructura está definida en el RFC 822 y contiene los siguientes campos:


    • Campos referidos al transporte:

      • Remitente (From). Email del que se envía.
      • Destinatario (To). Email a quien va dirigido.
      • Destinatario en Copia(CC). Email de la persona a la cuál se le envía una copia del mensaje.
      • Destinatario en Copia Oculta (CCO/BCC). Esta dirección no es mostrada al destinatario.
      • Dirección del último servidor que envió el mensaje.
      • Received. Dirección de los servidores de correo por donde ha circulado el correo (Ruta Seguida)
      • Return Path. Camino de retorno del mensaje en caso que sea respondido.


    • Campos referidos al mensaje:

      • Fecha (Date). Fecha y hora GMT del ordenador desde el que se envió el mensaje.
      • Responder (Reply-To). Dirección email donde el remitente desea que se le envié la respuesta.
      • Toma o Asunto (Subject). Motivo del mensaje.


    2.) Cuerpo. Contiene información enviada por el remitente, incluida la firma.


    Protocolos de Correo Electrónico:
    Permiten transferir correos entre máquinas con diferentes sistemas operativos y diferentes clientes de correo electrónico.

    A) SMTP (Simple Mail Transfer Protocol).


    • Transporta el correo saliente desde el ordenador del usuario hasta el servidor de correo entrante del destinatario.
    • Empleado por los servidores de correo intermedio.
    • Emplea el puerto 25 para comunicaciones.
    • Existe una versión mejorada llamada ESMTP.
    • Está formado por un conjunto de comandos y respuestas. Cada uno tiene cuatro letras y las respuestas contienen un número y mensaje descriptivo.

    Comandos Principales:


    • Hello. Identifica la IP o el dominio del remitente.
    • Mail From. Indica la dirección de correo del remitente. Ejemplo: Mail From: madpitbull@elhacker.net
    • Rcpt to. Identifica la dirección de correo del destinatario. Ejemplo: Rcpt To: otro_usuario@elhacker.net.
    • Quit. Sale del servidor.
    • Help. Lista los comandos disponibles.
    • Data. Indica el cuerpo del mensaje.

    Funcionamiento:
    1.) El MUA abre una conexión TCP con el servidor sobre el puerto 25.
    2.) El servidor SMTP responde con 220 Service ESMTP.
    3.) MUA se identifica enviando el comando Hello <IP>.
    4.) Se envía el mensaje usando los comandos: MAIL FROM, RCPT TO y DATA.


    POP (Post Office Protocol)

    • Permite gestionar y descargar los mensajes desde el buzón (que hay en el servidor) hasta la bandeja de entrada del usuario.
    • La versión actual es POP3.
    • Emplea el puerto 110 para comunicaciones.

    Comandos disponibles:


    • USER. Identifica al usuario en el servidor.
    • PASS. La contraseña del usuario en el servidor.
    • STAT. Solicita información acerca de los mensajes de ese usuario.
    • RETR. Indica el número del mensaje que se quiere descargar.
    • DELE. Indica el número del mensaje que se quiere borrar.
    • LIST. Muestra el mensaje indicado.
    • QUIT. Sale del servidor y elimina los mensajes marcados.

    Funcionamiento:

    1.) Fase de Comunicación. El servidor se mantiene escuchando en el puerto 110 a la espera de conexión por parte de algún cliente.
    2.) Fase de Autentificación. El servidor espera autentificación por parte del usuario (USER y PASS).
    3.) Fase de Transacción. El buzón del usuario se bloquea y se puede acceder a el para leer correos (LIST), descargar (RETR) y borrar (DELE). El comando QUIT permitirá el paso a la siguiente fase.
    4.) Fase de Actualización. El usuario se desconecta, se actualiza el buzón y se eliminan los mensajes marcados para borrar.

    POP transmite toda la información (contraseñas y datos) en texto plano, conviniendo usar cifrado SSL o TLS.


    IMAP (Internet Message Access Protocol)
    Protocolo alternativo a POP3 que permite descargar el correo desde el servidor remoto hasta la bandeja de entrada del usuario.

    Implementa varias mejoras respecto a POP:

    • Permite acceder de forma simultánea al buzón, desde varios clientes al mismo tiempo.
    • Dispone de más criterios de ordenación de los correos.
    • Permite manipular el buzón de forma remota, para crear, borrar, renombrar las bandejas.
    • Permite visualizar los correos sin descargarlos en el PC local.
    • El correo permanece en el servidor hasta que se solicite expresamente su borrado.
    • Emplea el puerto 143 para las comunicaciones.
    • La versión actual es IMAP4.
    • Existe versión segura llamada IMAPS que trabaja en el puerto 993.

    Aspectos a tener en cuenta al instalar un servidor de correo electrónico:
    1.) Volumen de correos que van a gestionarse.
    2.) Configurar otros servicios:
       2.1) DNS: Definir los registros MX para definir cuál es el servidor SMTP.
       2.2) Definir reglas en el firewall (permitir el tráfico en MDA/MTA).
    3.) Crear correos siguiendo unas políticas como, nombre de la cuenta.
    4.) Disponer de una máquina de backup.
    5.) En caso necesario puede salir mas conveniente contratar el servicio con alguna empresa externa que asegure el servicio en todo momento.


    #35


    Un documento de poco más de 50 páginas sobre Análisis de Tráfico con Wiresharks, está bajo licencia Creative Commons.
    CitarSeguramente todo administrador de redes ha tenido que enfrentarse alguna vez a una pérdida del rendimiento de la red que gestiona. En ese caso sabrá que no siempre es sencillo, por falta de tiempo y recursos o por desconocimiento de las herramientas apropiadas, tener claros los motivos por los que esto ha sucedido. En ocasiones, incluso se ha podido llegar a perder la conectividad o bien ciertos equipos han podido desconectarse sin motivo aparente.
    En la mayoría de ocasiones, las causas de estos problemas tienen un origen no premeditado y se deben a una mala configuración de la red como puede ser tormentas broadcast, spanning-tree mal configurado, enlaces redundantes, etc. Pero, en otras ocasiones, puede tratarse de ataques inducidos por terceros que pretenden dejar fuera de servicio un servidor web mediante un ataque DoS, husmear tráfico mediante un envenenamiento ARP o simplemente infectar los equipos con código malicioso para que formen parte de una red zombi o botnet.

    Como seguramente habéis leído, hace poco su plataforma de Aprendizaje Online sufrió un ataque en el que se sustrajeron datos importantes de los alumnos: INTECO sufre un ataque.



    Enlace | Descargar
    #36
    Noticias / INTECO sufre un ataque
    6 Junio 2011, 20:44 PM
    El Instituto Nacional de Tecnologías de la Comunicación (INTECO) ha sufrido un ataque, el tipo de ataque de momento es desconocido, lo que sí se conoce fue la objetivo: la plataforma virtual de aprendizaje.

    INTECO solo informa que tipo de datos han sido sustraídos:

       
    • Nombre y apellidos.
         
    • Número de teléfono.
         
    • DNI.
         
    • Correo electrónico.

      Como podéis ver, se trata de información bastante importante. La información se podría situar en el nivel Básico - Medio de la Ley Orgánica de Protección de Datos (LOPD).

      Han procedido a informar mediante un correo a todos los usuarios de la plataforma virtual de aprendizaje y de momento la plataforma está bajo mantenimiento.

      Noticia Oficial: INTECO informa del robo de datos de su Plataforma de Formación online
    #37
    PHP / Referencias en PHP
    4 Junio 2011, 00:01 AM
    Algunos de los que hayan leído sobre este tema, seguramente habrán confundido las referencias con los punteros de C/C++. En realidad no es así, mientras que los punteros apuntan a una dirección de memoria específica, las referencias le están diciendo al interprete de PHP que vamos a usar el contenido de una variable con diferentes nombres.

    Veamos un ejemplo:

    Código (php) [Seleccionar]

    <?php
        $var1 
    "valor";
        
    $var2 =& $var1;
     
        echo 
    $var2//imprime: valor
    ?>



    Como vemos, la variable $var1 contiene la cadena "valor", en el siguiente caso la variable $var2 apunta al contenido/valor de la variable $var1. Por lo que, si cambiamos el valor de $var2 también cambiará el de $var1.

    Código (php) [Seleccionar]

    <?php
        $var1 
    "valor";
        
    $var2 =& $var1;
     
        
    $var2 "nuevo valor";
        echo 
    $var1;//imprime: nuevo valor
    ?>



    La mayoría de los programadores PHP emplean las referencias en OOP para ahorrar recursos. Otro ejemplo para comprender las referencias usando valores numéricos, es el siguiente:

    Código (php) [Seleccionar]

    <?php
        $b
    =5$d=7;
        
    $a =& $b;
        
    $c =& $d;
        
    //Ahora: a=b=5; c=d=7;
        
    $b =& $c;
        
    //Ahora: a=5, b=c=d=7;
    ?>



    Esto no se limita aquí, se puede pasar parámetros por referencia, devolver referencias, destruirlas y ubicarlas. Un claro ejemplo de como devolver referencias es el de abajo:

    Código (php) [Seleccionar]

    <?php
        
    class foo {
            public 
    $valor 42;
     
            public function &
    obtenerValor() {
                return 
    $this->valor;
            }
        }
     
        
    $obj = new foo;
        
    $miValor = &$obj->obtenerValor();
        
    // $miValor es una referencia a $obj->valor, que es 42.
        
    $obj->valor 2;
        echo 
    $miValor;
        
    // imprime el nuevo valor de $obj->valor, esto es, 2.
    ?>



    Para destruir una referencias se utiliza la función unset($referencia). Actualmente no son muy empleadas, pero si algunas vez os las encontráis en algún código, sabréis cuál es su uso.

    Para más información os recomiendo leer el apartado de referencias de php.net.
    #38
    Navegando por SourceForge me encontré con una interesante aplicación para parsear código HTML. Su nombre es PHP Simple HTML DOM  Parser y está orientada a parsear el DOM de HTML.

    Primero vamos a descargarla e incluirla en nuestra aplicación de prueba. Un ejemplo básico de como utilizarla es:

    Código (php) [Seleccionar]

    <?php
        
    //Basic HTML parsing with PHP
        
    include("simplehtmldom/simple_html_dom.php");
     
        
    //Pasamos todo el contenido de la pagina a texto plano
        //echo $htmlCode = file_get_html('http://madhacking.com')->plaintext;
     
        
    $htmlCode file_get_html('http://madhacking.com');
     
        
    // Encontrar todas las imageness
        
    foreach($htmlCode->find('img') as $element)
           echo 
    $element->src '<br>';
     
        echo 
    "<hr />";
     
        
    // Mostrar todos los links
        
    foreach($htmlCode->find('a') as $element)
           echo 
    $element->href '<br>';
     
    ?>



    Vamos a hacer un ejemplo que muestre todos los artículos de mi blog:

    Código (php) [Seleccionar]

    <?php
        $htmlCode 
    file_get_html('http://madhacking.com');
        
    $posts $htmlCode->find('div[class=post]');
     
        foreach(
    $htmlCode->find('div[class=post]') as $article) {
            
    $item['title']     = $article->find('h2'0)->plaintext;
            
    $item['info']      = $article->find('div[class=post-info]',0);
            
    $item['body']      = $article->find('div[class=post-content]'0)->plaintext;
            
    $item['category']  = $article->find('div[class=post-meta]'0)->plaintext;
            
    $articles[] = $item;
        }
     
        echo 
    "<pre>";
        
    print_r($articles);
        echo 
    "</pre>";
     
    ?>



    Como podéis ver el funcionamiento es muy sencillo y no requiere esfuerzo programar algo sencillo. Os dejo los enlaces del proyecto.

    Página Oficial: PHP Simple HTML DOM Parser - Manual de Uso

    Si buscáis en SourceForge encontraréis proyectos similares, como:

    _HTML Parser for PHP 4

    _PHP Simple HTML SAX Parser

    En NetTuts+ también hablan de esta librería para parsear HTML:  Parsing and Screen Scraping with the Simple HTML DOM Library.


    En definitiva, se trata de una librería que no puede ahorrar mucho trabajo, si alguna vez has tenido que parsear HTML usando regex, lo entenderás.
    #39
    Scripting / Libros de Perl online [PERL]
    18 Mayo 2011, 21:49 PM
    Se trata de una lista de libros de Perl libres, con libres me refiero a que son libros que se pueden leer de forma gratuita en línea(online) o que los autores los distribuyen de forma electrónica sin ningún tipo de cargo.
















    NombreAutor/esEnlace
    Beginning PerlSimon Cozens y Peter WainwrightLeer Online
    Modern PerlChromatic (2010)Descargar PDF A4
    Impatient PerlGreg LondonDescargar PDF
    Extreme PerlRobert NaglerDescargar PDF A4
    Embedding Perl in HTML with MasonDave Rolsky y Ken WilliamsLeer Online
    Picking Up PerlBradley M. Kuhn y Neil SmythLeer Online
    Perl 5 InternalsSimon CozensLeer Online
    Practical mod_perlStas Bekman y Eric CholetLeer Online
    Perl & LWPSean M. BurkeLeer Online

    Si no os gusta leerlos online os alegrará saber que la mayoría están disponibles para descargarlos en formato PDF.
    #40
    Actualmente hay muchos frameworks conocidos de PHP, este lenguaje cada día está evolucionando gracias a la gran comunidad que lo apoya.

    Claramente hay muchos frameworks famosos como CakePHP, Zend, Symfony, CodeIgniter, Yii y muchos más, pero la mayoría son bastante pesados.

    En este artículo vamos a mencionar algunos frameworks livianos que dispongan de documentación y lo más importante es que, una vez descomprimido que ocupen poco espacio y que estén bajo una licencia libre.



    PHP Fat-Free Framework


    Framework bastante conocido en la comunidad PHP, caracterizado por su sencillez.

    Características destacables:

    • Comprimido pesa 55 KB.
    • Sistema de Plantillas.
    • Dispone de Sistema Caché.
    • Monitor de Ancho de Banda utilizado.
    • Protección ante ataques Denial Of Service (DoS).
    • Dispone de Plug-Ins.
    • Soporte para varias APIs, como Google, Twitter, etc.
    Enlace | Página oficial



    DOO PHP Framework


    Se autocaracteriza como posiblemente uno de los frameworks más rápidos.

    Características destacables:

    • Soporte para AJAX (librerías como JQuery y Mootolls).
    • Fácil de aprender y usar.
    • Sistema de control de acceso tipo ACL (Access Control List).
    • Sistema Caché para la base de datos.
    • Soporte para clientes y servidores de servicios web.
    • Funciona en cualquier hosting compartido.
    Enlace | Página oficial



    MicroMVC


    Como su nombre indica no ofrece todas las funciones que nos puede ofrecer un framework más pesado como Zend,

    los propios desarrolladores dicen que no es un sustituto para un framework completamente MVC y que pienses en desarrollar

    aplicaciones como Facebook con él.

    Características destacables:

    • Escrito totalmente en PHP5.
    • Ideal para iniciarse en el mundo de los frameworks MVC.
    • El código esta bien documentado.
    • Usado para aplicaciones pequeñas como blogs, sistemas de noticias, etc.
    Enlace | Página oficial



    Dingo Framework


    Emplea la ideología KISS (Keep It Simple Stupid), se pueden extender con otras librerías o frameworks.

    Características destacables:

    • Dispone de una documentación bastante completa.
    • Descomprimido pesa menos de 100 KB.
    • Muy flexible al poder usarse con otras librerías.
    Enlace | Página oficial



    Phraw - PHP Mini Framework


    Ideal para desarrollar aplicaciones pequeñas y rápidas en el menor tiempo posible. Si se usa junto con Smarty, en cuanto a la velocidad de carga, se pueden obtener resultados cercanos al framework Yii.

    Características destacables:

    • Comprimido pesa 15 KB.
    • Viene con varios ejemplos de utilización.
    • El núcleo está escrito en 130 líneas de código.
    • Varias funcionalidades para aumentar el SEO.
    Enlace | Página oficial



    Flourish


    Básicamente se trata de una librería POO, posee una estructura modular por lo que no tiene que ser obligatoriamente MVC.

    Actualmente está en estado Beta, por lo que pueden surgir varios cambios en cuanto al diseño del framework.

    Características destacables:

    • Soporte para varias Bases de Datos (MySQL, PostgreSQL, SQLite, MSSQL, Oracle, DB2).
    • Compatibiliza bien con otras librerías y frameworks.
    • La seguridad es un factor importante en este pequeño framework.
    • Fácil manipulación de imágenes.
    • Soporte para cálculos matemáticos.
    Enlace | Página oficial



    Light VC


    Se trata de un framework MVC pero sin la capa modelo, por lo que se puede acoplar cualquier modelo.

    Los autores lo comparan con grandes frameworks como CakePHP y Zend.

    Características destacables:

    • Permite usar cualquier modelo o ORM.
    • Facilita el re-uso del código.
    • Altamente configurable.
    • Aprovecha la mayoría de las características de PHP5.
    Enlace | Página oficial



    Cough Framework


    Guarda cierta relación con el framework LightVC. Se trata de un framework orientado a ORM, utilizando un motor de persistencia. Implementa funcionalidades CRUD.

    No controla como se utilizará la capa vista, por lo que se puede combinar con LightVC.

    Características destacables:

    • Genera el 80% del código necesario para trabajar con bases de datos.
    • Arquitectura extensible.
    • Compatible con otros frameworks o librerías.
    • Bastante personalizable.
    Enlace | Página oficial



    Konstrukt


    Un framework amigable para crear controladores con PHP5. Dispone de foro y mail list.

    Características destacables:

    • Los controladores son recursos.
    • Mucho más directo al protocolo HTTP que los demás.
    • Gran flexibilidad.
    • Soporte para otras bases de datos como SQLite.
    Enlace | Página oficial



    Recess PHP


    Los autores lo caracterizan como un framework de desarrollo ameno con el que pasaremos buenos ratos.

    No hay que usar la consola de comandos y tampoco requiere una gran curva de aprendizaje.

    Características destacables:

    • Facilidad de creación de clientes y servidores de servicios web.
    • Recomendable para entornos LAMPP.
    • Funciona en todos los hostings compartidos.
    • Provee un sistema de detección de errores.
    Enlace | Página oficial



    Tekuna


    Este framework es poco intrusivo con la generación de "datos basura" en la base de datos. Se da soporte en varios idiomas,

    Características destacables:

    • Manejo de URL's amigables.
    • Sistema de manejo de errores.
    • Arquitectura 100% MVC.
    • Probado intensivamente y no produce errores ni advertencias.
    Enlace | Página oficial



    Emission


    Usado para desarrollar aplicaciones a medida en entornos empresariales. En el futuro se incluirán varias librerías javascript.

    Básicamente está orientado a la creación de servicios web.

    Características destacables:

    • Cliente y creación de servicios web con SOAP.
    • Desarrollo de servicios web REST.
    • Cliente ICQ.
    • Algunos componentes Front-End (UI).
    Enlace | Página oficial



    Vork


    Tal como lo pintan los desarrolladores del framework, parece una maravilla, genera código HTML completamente válido y no provoca ninguna advertencia o error.

    También provee funcionalidades que pueden interesar a un desarrollador y diseñador web a la vez, funciones como mejora de SEO, plantillas, marcas de agua para imágenes.

    Características destacables:

    • Soporte para trabajar con varias API conocidas, como OpenAuth, PayPal, Flickr, Google, YouTube, etc.
    • Compatibilidad con otros frameworks como Zend, CakePHP.
    • Funciona perfectamente tanto en Apache como en IIS.
    • Compatible con bases de datos NoSQL.
    • Dispone de sistema de caché.
    Enlace | Página oficial



    Base App Framework


    Framework de reducido tamaño inspirado en CakePHP, muy recomendable si recién si empieza a trabajar con frameworks MVC.

    No tiene nada que envidiar a los demás frameworks y comprimido pesa unos 50KB.

    Características destacables:

    • Fácil extensión del framework.
    • 100% MVC pero también puede ser usado como librería.
    • Parecido al 80% con CakePHP.
    • Integra soporte de AdoDB.
    • Dispone de varias herramientas de depuración como FireBug.
    Enlace | Página oficial



    Simple PHP Framework


    Este proyecto nació hace 5 años, está orientado al desarrollo de sitios web como blogs, tiendas virtuales,etc.

    Cuenta con el apoyo de Yahoo!, dentro de la misma organización utilizan un fork de este framework.

    Características destacables:

    • Dispone de sistema de autentificación de usuarios, lector de RSS, etc.
    • Completamente escrito usando las mejoras de PHP5.
    • Requiere bastante esfuerzo aprender a usarlo y tiene gran curva de aprendizaje.
    Enlace | Página oficial



    Obullo


    Creado para programadores web que necesiten un framework sencillo para desarrollar aplicaciones de forma rápida.

    Se caracteriza como una caja de herramientas.

    Características destacables:

    • Utiliza métodos estáticos de PHP5.
    • Emplea PDO para trabajar con bases de datos.
    • Un directorio puede tener más de un controlador.
    • Se puede extender fácilmente.
    Enlace | Página oficial



    Akelos PHP Framework


    Se trata de un framework "standalone", no necesita ninguna dependencia externa o del sistema.

    Se trata de un port de Ruby On Rails a PHP, es la elección elegida de los programadores del framework mencionado.

    Características destacables:

    • Dispone de soporte para AJAX.
    • Similar a Ruby On Rails o Django.
    • Incorpora validadores de código.
    • Sistema de páginación incorporado.
    Enlace | Página oficial



    Samstyle PHP Framework


    Se trata de un framework desarrollado por Sam Yong, al que se le dejo de dar soporte, finalmente el proyecto fue retomado por otro programador.

    Orientado para programar aplicaciones web 2.0.

    Características destacables:

    • Compatible con versiones de PHP &gt; v4.
    • Fácil integración con otras API y servicios web.
    • Soporte para AJAX.
    • Incluye mecanismos de seguridad, validaciones de inputs, caché de parte del servidor.
    Enlace | Página oficial



    PHP Peanuts


    Al igual que otros frameworks mencionados en este artículo, está inspirado en Ruby on Rails.

    Cuenta con dos versiones, la versión 1.5.0 es libre y la versión 2.0 es comercial, en este aspecto pierde puntos.

    Características destacables:

    • Fácil de instalar.
    • Validación y generación automatizada de formularios.
    • Soporte para AJAX.
    • Incorpora elementos UI.
    • Soporta varias bases de datos, como SQLite, PostGreSQL.
    Enlace | Página oficial



    Zephyr Framework


    Su principal característica es la incorporación de AJAX. Orientado principalmente para aplicaciones corporativas.

    Características destacables:

    • Incorpora adoDB.
    • Utiliza Smarty para el sistema de plantillas.
    • Fácil integración con otros frameworks o librerías, ya sean PHP o javascript.
    • Incorpora mecanismo de CronJobs.
    • Se puede integrar cualquier paquete PEAR.
    Enlace | Página oficial



    Valence Web Framework


    Antes llamado Caffeine Web Framework.

    Características destacables:

    • Emplea sistema de plantillas propio.
    • Se utilizan URL's cortas sin necesidad de .htaccess.
    • Subsistema para manejar permisos de usuarios.
    • Utiliza PDO para acceder a las bases de datos.
    Enlace | Página oficial



    Fuel PHP


    Una de la gran ventaja de este framework es el soporte por la comunidad, disponen de foro, tutoriales y screencasts.
    Recomendado por Nakp, ahora mismo lo estoy probando y de momento me está convenciendo.

    Características destacables:

    • Poca curva de aprendizaje.
    • Su tamaño no llega a pesar un 1MB (son unos 750 KB comprimido).
    • Gran soporte por parte de la comunidad y buena documentación.
    • Son los creadores de PyroCMS (un CMS creado con CodeIgniter).
    Enlace | Página oficial



    Limonade PHP


    Bastante fácil de aprender y muy flexible. Lo he probado personalmente, si te gusta RoR este es tu framework.

    Características destacables:

    • Dispone de muchas aplicaciones de ejemplo.
    • Soporte vía maillist.
    • Inspirado en otros frameworks de Ruby, como Sinatra.
    Enlace | Página oficial



    Como os imaginaréis existen muchos más frameworks a parte de los que he citado, os invito a que nos comentéis vuestra experiencia con los distintos frameworks de PHP.

    Si conocéis algún framework más de este tipo os invito a que lo comentéis con nosotros.

    Os dejo unos enlaces donde podéis leer sobre más frameworks PHP: Matrix.Include_once y PHPFrameworks
    #41
    PHP / Cambiar extensión script PHP
    4 Mayo 2011, 23:11 PM
    Cambiar extensión script PHP


    Por motivos de seguridad nos puede interesar cambiar la extensión de nuestras aplicaciones en PHP, no conseguiríamos gran cosas, pero podría desorientar al atacante.

    Cuando se trata de aplicaciones donde la seguridad es fundamental cualquier pequeño detalle ayudará.

    En el fichero de configuración del intérprete php.ini podemos configurar la directiva expose_php = off , con esta directiva desactivada se reduce el número de información mostrada en caso de errores o advertencias(warnings).

    Apache con la ayuda de los ficheros .htaccess nos permite cambiar la extensión utilizada para los scripts PHP.

    Creamos un fichero .htaccess dentro del directorio de nuestra aplicación con el siguiente contenido:

    #Así parecerá que utilizamos otro lenguaje
    AddType application/x-httpd-php .asp .aspx .jsp .py .pl


    Ahora si creamos un fichero con las extensiones arriba indicadas, Apache las interpretará como si se tratara de una aplicación en PHP.

    Podemos hacer un típico Hello World para probar:

    Código (php) [Seleccionar]
    <?php
     
    echo "Esto es PHP aunque no lo parece.";
    ?>


    Con las extensiones que hemos configurado en el .htaccess.



    Al ejecutar cualquier de los archivos de arriba Apache interpretará el código como si fuera PHP, sin importar la extensión. Hay que tener cuidado, si tenemos documentos HTML es posible que no queramos que se ejecuten como scripts PHP.

    También podemos jugar con las cabeceras, para que parezca que utilizamos otro lenguaje:

    Código (php) [Seleccionar]
    <?php
    error_reporting
    (0);
    header("X-Powered-By: ASP.NET");
    ?>


    He subido a un hosting todos los ficheros junto con el .htaccess por si alguien quiere probarlo.

    Enlace| MultiUpload
    #42
    A partir de los ya existentes he creado un plugin para Firefox para buscar más rápidamente en Google pero filtrando resultados para este foro.

    Instrucciones:

    • Descargar elhackerNET.xml (1.38 KB)
    • Copiar el fichero descargado en C:\Program Files (x86)\Mozilla Firefox\searchplugins


    Si no queréis descargar el fichero, podéis crearlo vosotros mismos manualmente y copiarlo en searchplugins del Firefox.

    Contenido de elhackerNET.xml:

    <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
    <ShortName>elhacker.NET Search Engine</ShortName>
    <Description>elhacker.NET Search</Description>
    <InputEncoding>UTF-8</InputEncoding>
    <Image width="16" height="16">data:image/png;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAf//////4AAD///////8AAI//iIiIiAAAj/gAAAAAAAB/+A+IiIiAAA//D/////AAD/8IiIj/9wAI/4AAAI/4AAD/+IiI//gAAP//////+AAAeP/////3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////gAf//wAD//8AA///AAP//wAB//8AAf//gAH//4AA//+AAP//gAD//8AA///AAP//4AH/////////////</Image>
    <Url type="application/x-suggestions+json" method="GET" template="http://suggestqueries.google.com/complete/search?output=firefox&amp;client=firefox&amp;hl={moz:locale}&amp;q={searchTerms}"/>
    <Url type="text/html" method="GET" template="http://www.google.es/search?q=site:foro.elhacker.net%20">
      <Param name="q" value="{searchTerms}"/>
      <Param name="ie" value="utf-8"/>
      <Param name="oe" value="utf-8"/>
      <Param name="aq" value="t"/>
      <!-- Dynamic parameters -->
      <Param name="rls" value="{moz:distributionID}:{moz:locale}:{moz:official}"/>
      <MozParam name="client" condition="defaultEngine" trueValue="firefox-a" falseValue="firefox"/>
    </Url>
    <SearchForm>http://elhacker.net/</SearchForm>
    </SearchPlugin>



    El resultado sería el siguiente:



    A la derecha de la barra de direcciones/URL en el cuadro de búsqueda rápida, al desplegarlo aparecerá el icono de elhacker.net.

    Espero que a alguien le sirva, yo lo estoy utilizando.
    #43
    PHP / Inclusión de ficheros en PHP
    25 Abril 2011, 19:58 PM
    Inclusión de ficheros en PHP

    Vamos a ver las distintas formas para incluir un fichero en nuestro script PHP.  Esta facilidad del lenguaje se utiliza principalmente para la definición de librerías, clases, varios script, permitiendo, de este modo, una reutilización y mantenimiento del código más óptimos. La extensión del fichero a incluir puede ser de cualquier tipo, ya sea .php, .htm, .txt, .inc, etc.

    PHP dispone de una variedad de funciones que nos permiten la inclusión de ficheros en nuestros scripts. Las funciones de las que hablaremos en este articulo son las siguientes:

    include()
    Esta función incluye y evalúa un fichero externo cada vez que es interpretada. La inclusión del fichero externo y su posterior evaluación, se realizan cada vez que el flujo del programa llega a una línea que

    contenga la llamada a esta función. En caso de no encontrar el fichero especificado, se genera un warning (advertencia) y se sigue la ejecución del script.

    Cuando un archivo es incluido con esta función, el intérprete sale del modo PHP y entra en modo HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al acabar de leer dicho archivo.

    Si el código contenido dentro del archivo incluido contiene instrucciones PHP, dichas instrucciones deberán estar encerradas entre las etiquetas de inicio y fin de código PHP (<?php ?>).

    include_once()
    Funciona igual que la anterior, con la única diferencia de que esta función solo cargará y evaluará el archivo incluido solo una vez, como máximo. Con esta instrucción nos aseguramos de que un fichero sólo se ha cargado una vez a lo largo de la ejecución del script, evitando errores producidos por la redefinición de funciones o la reasignación de valores.

    require()
    Hace lo mismo que las funciones anteriores, pero con algunas diferencias. Sólo incluye el fichero referenciado, es decir, no lo interpreta. Su comportamiento es equivalente a la directiva #include del lenguaje C/C++.

    Esta función no puede ser utilizada con en estructuras condiciones o de control de bucles porque el contenido del fichero referenciado se  incluye antes de que se evalúe la sentencia que lo contiene y se incluye siempre aunque la condición que lo contiene no se cumpla.

    En caso de que el archivo pasado como parámetro a esta función no exista, se generará un error fatal que no permitirá con la ejecución del script. Es bastante desaconsejable pasar variables como parámetros a esta función.

    require_once()
    Evita la carga del fichero referenciado en más de una ocasión. Hace exactamente que include_once() pero hereda el comportamiento básico de su función padre require().

    La función que se va a emplear depende del tipo de aplicación que estamos desarrollando y del programador, hay que elegir la que más se ajuste, no hay ninguna favorita.
    #44
    Artículo perteneciente al [Taller]Instalación/Configuración y Teoría de Servicios en Red, también disponible en la Wiki del Foro



    Para sistemas GNU/Linux hay muchos software servidores de FTP que nos pueden servir para este tutorial, pero nos vamos a centrar en VSFTPD (Very Secure FTP Daemon),
    como su nombre indica, es muy seguro, probablemente uno de los mas seguros del mercado y muy fácil de configurar.

    Procedemos a instalar el daemon:

    apt-get install vsftpd

    El fichero de configuración está en /etc/vsftpd.conf.

    Vamos a ver unas de las directivas que nos pueden interesar.

    anonymous_enable = YES - Permite el acceso sin cuenta al servidor.
    local_enable = YES - Con esta directiva los usuarios locales al sistema podrán iniciar sesión en el servidor FTP, al iniciar
    sesión el usuario será redireccionado a su carpeta personal en  /home.

    Podemos probar esta última directiva creando un usuario y logueandonos con él.
    adduser demo



    Se puede decir que prácticamente tenemos un servidor FTP funcionando, ahora solo falta personalizarlo un poco más.

    write_enable = YES - Los usuarios tiene derecho a crear ficheros y archivos.
    local_umask = 022 - Representan los permisos que tendrán los archivos subidos al servidor FTP.
    anon_upload_enable = YES - El usuario anonymous tiene permisos para subir archivos.
    ftp_banner = "Bienvenido al servidor FTP de madpitbull" - El mensaje de bienvenida al servidor.
    anon_root = /home/ftp - El directorio inicial del usuario anonymous. Hay que crearlo.
    Una vez hechos algunos cambios, reiniciaremos el servidor:
    service vsftpd restart

    En la página oficial del proyecto tenéis todas las directivas (documentación).

    Una cosa interesante que podemos hacer es crear una carpeta donde se puedan subir archivos usando el usuario anonymous.
    Un requisito es tener configuradas todas las directivas que he mencionado anteriormente.

    Creamos la carpeta ftp dentro de /home.
    mkdir /home/ftp

    Le cambiamos los permisos.
    chmod 577 /sudo/ftp

    Creamos la carpeta donde se subirán los archivos.
    mkdir /home/ftp/incoming

    Y le damos todos los permisos.
    chmod 777 /home/ftp/incoming

    Solo falta cambiar el propietario de dicha carpeta.
    chown ftp /home/ftp

    Si usáis Webmin para administrar el servidor, os recomiendo que instaléis el módulo vsftpd.

    Para problemas que os pueden ocurrir, os recomiendo mirar y comprobar esta lista de errores.
    #45
    Redes / Teoría FTP
    17 Abril 2011, 16:57 PM
    Artículo perteneciente al [Taller]Instalación/Configuración y Teoría de Servicios en Red, también disponible en la Wiki del Foro


    Servicio FTP (File Transfer Protocol)



    Es un protocolo de transferencia de archivos en redes TCP/IP de forma fiable y rápida.

    Cumple la siguiente lista de objetivos:

    • Permitir el intercambio de archivos ente máquinas remotas a través de la red.
    • Fomentar el acceso a máquinas remotas.
    • Permitir total independencia entre los sistemas de archivos, del cliente y del servidor.
    • Consigue una transferencia de datos segura y fiable.


    Como todo protocolo, también tiene sus deficiencias:

    • Utiliza autenticación por medio de usuario y contraseña, no garantiza que el usuario sea quien dice ser.
    • Los datos de autenticación se envían en texto plano.
    • Las transferencias de archivos son en texto plano, tanto los datos del usuario como la información enviada/recibida se pueden interpretar fácilmente.

    Está basado en la arquitectura cliente-servidor. Emplea los siguiente puertos:

    • 20 => Transferir datos.
    • 21 => Control(Envío de ordenes).


    Características del servicio FTP:

    1)Diferentes formas de acceso al servidor:

    • Por medio de usuario y contraseña, que debe existir en el servidor.
    • De forma anónima, usando anonymous.
    • De forma virtual, por medio de cuenta, sin que ésta exista. Se trata de unos usuarios "virtuales", independientes al Sistema Operativos y solo pertenecen al servidor FTP.

    2)El acceso al sistema de archivos del servidor FTP es limitado según el tipo de usuario que se conecta:

    • El usuario anonymous solo accede al directorio principal.
    • Los usuarios locales acceden al sistema de archivos que comienza en su directorio de conexión.
    • Los usuarios FTP acceden a los directorios a los cuales tienen permisos.

    3)Una vez establecida la conexión, se pueden emplear comandos FTP para realizar diferentes tareas:

    • ? - Muestra las ordenes disponibles.
    • ? orden - Muestra la ayuda de esa orden (? get).
    • ascii/binary - La transferencia se hará en ASCII o Binario.
    • cd/lcd - Moverse por los directorios. Con lcd se mueve por el directorio local del cliente FTP.
    • close - Cierra la conexión.
    • quit - Cierra conexión y cliente.
    • get/mget - Descargar un archivo o varios, usando mget.
    • put/mput - Subir/Enviar un archivo o varios, usando mput.
    • sieze - Ver tamaño del archivo.
    • delete/mdelete - Borrar archivos.


    Formas de conectarse a un servidor FTP:

    • De modo Activo
      El cliente se conecta al puerto 21 del servidor desde un puerto superior al 1024 para enviarse comandos.
      El cliente le indica al servidor el puerto por el cuál recibirá los datos.
      El servidor abre su puerto 20 para realizar la transferencia de datos sobre el cliente en el puerto especificado.
      Importante: El servidor siempre emplea el puerto 20 para transmisión de datos.
      Problema: El cliente debe aceptar conexiones en puertos superiores a 1024 (se evita con un Firewall).

    • De modo Pasivo
      El cliente emplea un puerto superior al 1024 para conectar con el puerto 21 del servidor FTP y enviarle comandos.
      El servidor enviará por ese puerto, el puerto aleatorio que va a emplear para la comunicación de datos (puerto mayor a 1023).
      El cliente y el servidor abren el puerto especificado por el servidor y comienzan a transmitir datos.
      Aspectos a destacar: El cliente siempre inicia las comunicaciones y nunca se emplea el puerto 20 para transmitir datos.


      Hay dos modos de ejecutar el servidor FTP:
      1)Modo Standalone. El servidor se ejecuta como un proceso autónomo e independiente del sistema y siempre está activo esperando peticiones. Es el modo Recomendado.
      2)Modo Supervisor. El proceso del servidor FTP se ejecuta por el inetd como si se tratara de un proceso hijo. El proceso del servidor debe iniciarse cada vez que hay una nueva conexión.

      Mantenimiento del servidor FTP:
      Da igual como esté montado el servidor FTP, el administrador tendrá que hacer una serie de tareas cada x tiempo.

      • Organizar la información disponible en el servidor FTP por directorios, documentos, etc.
      • Gestionar las cuentas de usuario dando permisos, borrando cuentas inactivas, etc.
      • Mantener la seguridad en el acceso al contenido.
      • Realizar el mantenimiento del servidor y su contenido (actualizar el software, firewall, etc).

      Los servidores FTP trabajan con archivos Binarios(resto de archivos) y ASCII(contienen caracteres imprimibles)