jueves, 7 de febrero de 2013

Creación página web con Google Drive

No hace mucho tiempo se ha implementado una opción bastante interesante en google drive.
Y es la de poder acceder a los documentos html como si drive fuese un servidor web.

En unos sencillos pasos podemos crear una página web pública incluso con estilos css y javascript.

Empezamos creando una carpeta en google drive, y en la opción compartir de la propia carpeta, cambiamos los permisos a "público en la web".



Subimos a esa carpeta los archivos de nuestra página web (HTML, JS, CSS, imágenes...).

En el ejemplo subiremos, un archivo html "índex.html" y una imagen para mostrar "pulp_fiction.jpg".

Index.html
 <html>   
      <head>   
           <title>Drive Web</title>   
      </head>   
      <body>   
           <h1>It works<h1>  
           <img src="pulp_fiction.jpg" widt=178 height=180 alt="Pulp Fiction">            
      </body>   
 </html>   

Por último una vez subido el archivo que usaremos como índice, para obtener su enlace, visualizamos dicho archivo desde google drive, y se le da a la opción de "Vista Previa/Preview". El enlace al que nos lleva será el de nuestra página web.

jueves, 27 de diciembre de 2012

Ver hosts en una red

Una necesidad básica de cualquier dueño o administrador de una red, es ver qué equipos están conectados a ella.

Vamos a comprobar el funcionamiento de algunas herramientas que nos servirían para hacer un host discovery.

El entorno de pruebas se basa en una red local IP 192.168.1.0 formada por:
  • Router - 192.168.1.1
  • PC Linux - 192.168.1.128
  • PC MAC - 192.168.1.129
  • Telefono android - 192.168.1.130
  • Propia máquina - 192.168.1.131


NMAP
Una de las herramientas para escaneo de redes por excelencia es Nmap y como no también nos vale para hacer escaneo de hosts. Emplearemos un escaneo de ping sencillo (nmap permite diferentes técnicas para hacer el host discovery).

Host discovery con Nmap:

nmap -sP 192.168.1.0/24

 #nmap -sP 192.168.1.0/24  
   
 Starting Nmap 5.00 ( http://nmap.org ) at 2012-12-24 13:02 CET  
 Host 192.168.1.1 is up (0.0039s latency).  
 MAC Address: 00:1A:2B:5D:F8:C1 (Ayecom Technology Co.)  
 Host 192.168.1.128 is up (0.039s latency).  
 MAC Address: 00:0E:A6:3C:57:06 (Asustek Computer)  
 Host 192.168.1.129 is up (0.00037s latency).  
 MAC Address: 70:56:81:AD:93:E7 (Unknown)  
 Host 192.168.1.130 is up (0.016s latency).  
 MAC Address: B4:07:F9:D9:D0:59 (Unknown)  
 Host 192.168.1.131 is up.  
 Nmap done: 256 IP addresses (5 hosts up) scanned in 4.46 seconds  
NOTA:
"-sP" hace que el tipo de escaneo sea un ping scan, la dirección que enviamos es la de la red a escanear poniendo la máscara. Poniendo una máscara de 24 bits se le indica que el campo host de la dirección IP es de 8 bits.


FPING
Otra herramienta bastante útil es fping, ésta utiliza el protocolo ICMP al igual que ping, pero permite bastantes más opciones a mayores, una de ellas es la de enviar peticiones ICMP a un segmento de la red y mostrar que máquinas responden:

fping -g 192.168.1.0/24 2> /dev/null | grep alive

 # fping -g 192.168.1.0/24 2> /dev/null | grep alive  
 192.168.1.128 is alive  
 192.168.1.129 is alive  
 192.168.1.131 is alive  
 192.168.1.130 is alive  
 192.168.1.1 is alive  
NOTA:
En este caso se uso fping para enviar una petición a un segmento de la red, para ello como en el caso anterior se usó la máscara para indicar qué bits son los que definen los host de la red.
"2> /dev/null" hace que la salida de error se redireccione a /dev/null y así no nos aparezca por pantalla.
"| grep alive" con esto sólo nos mostrará las IP de las máquinas que respondieron al ping


NBTSCAN
Por otro lado nos puede ser útil explotar el host discovery de una manera diferente. Nbtscan escanea la red enviando peticiones de nombre NetBIOS a las diferentes IP.

nbtscan -r 192.168.1.0/24
 # nbtscan -r 192.168.1.0/24  
 Doing NBT name scan for addresses from 192.168.1.0/24  
   
 IP address    NetBIOS Name   Server  User       MAC address     
 ------------------------------------------------------------------------------  
 192.168.1.0     Sendto failed: Permission denied  
 192.168.1.131  <unknown>         <unknown>      
 192.168.1.129  R2D2            <unknown>    70:56:81:ad:93:e7  
 192.168.1.255     Sendto failed: Permission denied  
NOTA:
Se comprueba que a las peticiones de nombre de NetBIOS no todas las máquinas han respondido. En este entorno esta herramienta no nos mostró todas las máquinas realemte conectadas.

miércoles, 19 de diciembre de 2012

Borrado recursivo de archivos LINUX

Hay ocasiones en las que se necesita borrar archivos o directorios que siguen un patrón (se llaman igual, son archivos de imagen, archivos .html...) y éstos están repartidos dentro de una jerarquía de directorios en los que borrar uno a uno sería una tarea muy tediosa.

Una manera sencilla de hacer esta tarea sería usando find y rm conjuntamente.



Ejemplo1:
Borrado de todas las imágenes .jpg en una jerarquía de directorios.

rm `find <directorio> -type f -name <nombre archivo>`

 $rm `find . -type f -name '*.jpg'`  



Ejemplo2:
Borrado de todos los directorios .svn en una jerarquía de directorios.

rm -rf `find <directorio> -type d -name <nombre directorio>`

 $rm -rf `find . -type d -name .svn`  




NOTA:
-Nótese que el comando find varía según lo que se quiera borrar. Se eligió en la opción "-type" el tipo "f" para archivos y "d" para directorios. 
En el manual de find se comentan todos los tipos de archivos que se pueden elegir.

viernes, 7 de diciembre de 2012

Pmap en OS X es vmmap

Para los usuarios que estamos acostumbrados al uso Linux el cambio a OS X puede suponer algunos problemas en cuanto a querer usar algún programa o configurar algo.
Uno que me surgió a mí al poco tiempo de uso de mi mac fue el de mapear la memoria que usa un proceso cuando me di cuenta que no tenía pmap.

Cabe recordar que en OS X subyace el sistema operativo Darwin cuyo kernel incluye varios elementos de BSD.
Los sistemas BSD usan vmmap para el mapeo de la memoria, el cual viene incluido en OS X.



Uso de Pmap en Debian 6(32 bits)

$pmap PID
 2393:  ./a.out  
 08048000   4K r-x-- /Home/Desktop/a.out  
 08049000   4K rw--- /Home/Desktop/a.out  
 b7611000   4K rw---  [ anon ]  
 b7612000  1280K r-x-- /lib/i686/cmov/libc-2.11.3.so  
 b7752000   4K ----- /lib/i686/cmov/libc-2.11.3.so  
 b7753000   8K r---- /lib/i686/cmov/libc-2.11.3.so  
 b7755000   4K rw--- /lib/i686/cmov/libc-2.11.3.so  
 b7756000   12K rw---  [ anon ]  
 b776b000   8K rw---  [ anon ]  
 b776d000   4K r-x--  [ anon ]  
 b776e000  108K r-x-- /lib/ld-2.11.3.so  
 b7789000   4K r---- /lib/ld-2.11.3.so  
 b778a000   4K rw--- /lib/ld-2.11.3.so  
 bf8eb000   84K rw---  [ stack ]  
  total   1532K  



Uso de vmmap en OS X 10.8(64 bits)

$vmmap PID
 Virtual Memory Map of process 984 (a.out)  
 Output report format: 2.2 -- 64-bit process  
 ==== Non-writable regions for process 984  
 __TEXT         0000000102918000-0000000102919000 [  4K] r-x/rwx SM=COW /Users/XXXXXX/a.out  
 __LINKEDIT       000000010291a000-000000010291b000 [  4K] r--/rwx SM=COW /Users/XXXXXX/a.out  
 MALLOC metadata    000000010291b000-000000010291c000 [  4K] r--/rwx SM=COW   
 MALLOC guard page   000000010291d000-000000010291e000 [  4K] ---/rwx SM=NUL   
 MALLOC guard page   0000000102933000-0000000102935000 [  8K] ---/rwx SM=NUL   
 MALLOC guard page   000000010294a000-000000010294b000 [  4K] ---/rwx SM=NUL   
 MALLOC metadata    000000010294b000-000000010294c000 [  4K] r--/rwx SM=COW   
 STACK GUARD      00007fff592e8000-00007fff5cae8000 [ 56.0M] ---/rwx SM=NUL stack guard for thread 0  
 __TEXT         00007fff62518000-00007fff6254d000 [ 212K] r-x/rwx SM=COW /usr/lib/dyld  
 __LINKEDIT       00007fff62589000-00007fff6259c000 [  76K] r--/rwx SM=COW /usr/lib/dyld  
 __TEXT         00007fff85cf9000-00007fff85d1c000 [ 140K] r-x/r-x SM=COW /usr/lib/system/libxpc.dylib  
 __TEXT         00007fff85fc8000-00007fff85fff000 [ 220K] r-x/r-x SM=COW /usr/lib/system/libsystem_info.dylib  
 __TEXT         00007fff8691b000-00007fff8691c000 [  4K] r-x/r-x SM=COW /usr/lib/system/libkeymgr.dylib  
 __TEXT         00007fff86e75000-00007fff86f8e000 [ 1124K] r-x/r-x SM=COW /usr/lib/libobjc.A.dylib  
 __TEXT         00007fff8717a000-00007fff87180000 [  24K] r-x/r-x SM=COW /usr/lib/system/libcompiler_rt.dylib  
 __TEXT         00007fff871f1000-00007fff871f9000 [  32K] r-x/r-x SM=COW /usr/lib/system/libcopyfile.dylib  
 __TEXT         00007fff88c21000-00007fff88c25000 [  16K] r-x/r-x SM=COW /usr/lib/system/libdyld.dylib  
 __TEXT         00007fff88c6d000-00007fff88c6f000 [  8K] r-x/r-x SM=COW /usr/lib/system/libdnsinfo.dylib  
 __TEXT         00007fff8907c000-00007fff890e5000 [ 420K] r-x/r-x SM=COW /usr/lib/libc++.1.dylib  
 __TEXT         00007fff89150000-00007fff8917f000 [ 188K] r-x/r-x SM=COW /usr/lib/system/libsystem_m.dylib  
 shared memory     00007fffffe00000-00007fffffe01000 [  4K] r--/r-- SM=SHM   
 shared memory     00007ffffff60000-00007ffffff61000 [  4K] r-x/r-x SM=SHM   
 ==== Writable regions for process 984  
 __DATA         0000000102919000-000000010291a000 [  4K] rw-/rwx SM=PRV /Users/XXXXX/a.out  
 MALLOC metadata    000000010291c000-000000010291d000 [  4K] rw-/rwx SM=COW   
 MALLOC metadata    000000010291e000-0000000102933000 [  84K] rw-/rwx SM=COW   
 MALLOC metadata    0000000102935000-000000010294a000 [  84K] rw-/rwx SM=COW   
 MALLOC_TINY      00007fe633c00000-00007fe633d00000 [ 1024K] rw-/rwx SM=COW DefaultMallocZone_0x10291b000  
 MALLOC_SMALL      00007fe634000000-00007fe634800000 [ 8192K] rw-/rwx SM=COW DefaultMallocZone_0x10291b000  
 Stack         00007fff5cae8000-00007fff5d2e7000 [ 8188K] rw-/rwx SM=ZER thread 0  
 Stack         00007fff5d2e7000-00007fff5d2e8000 [  4K] rw-/rwx SM=COW thread 0  
 __DATA         00007fff6254d000-00007fff62589000 [ 240K] rw-/rwx SM=COW /usr/lib/dyld  
 __DATA         00007fff75cdf000-00007fff75ce4000 [  20K] rw-/rwx SM=COW /usr/lib/system/libxpc.dylib  
 __DATA         00007fff75d55000-00007fff75d58000 [  12K] rw-/rwx SM=COW /usr/lib/system/libsystem_info.dylib  
 __DATA         00007fff75f4f000-00007fff75f50000 [  4K] rw-/rwx SM=COW /usr/lib/system/libkeymgr.dylib  
 __DATA         00007fff75ff8000-00007fff76000000 [  32K] rw-/rwx SM=COW /usr/lib/libobjc.A.dylib  
 __DATA         00007fff76049000-00007fff7604a000 [  4K] rw-/rw- SM=COW /usr/lib/system/libcompiler_rt.dylib  
 __DATA         00007fff76067000-00007fff76068000 [  4K] rw-/rw- SM=COW /usr/lib/system/libcopyfile.dylib  
 __DATA         00007fff7627b000-00007fff7627c000 [  4K] rw-/rwx SM=COW /usr/lib/system/libdyld.dylib  
 __DATA         00007fff7628b000-00007fff7628c000 [  4K] rw-/rwx SM=COW /usr/lib/system/libdnsinfo.dylib  
 __DATA         00007fff7634b000-00007fff76353000 [  32K] rw-/rwx SM=COW /usr/lib/libc++.1.dylib  
 ==== Legend  
 SM=sharing mode:   
      COW=copy_on_write PRV=private NUL=empty ALI=aliased   
      SHM=shared ZER=zero_filled S/A=shared_alias  
 ==== Summary for process 984  
 ReadOnly portion of Libraries: Total=57.6M resident=17.6M(31%) swapped_out_or_unallocated=40.0M(69%)  
 Writable regions: Total=17.4M written=12K(0%) resident=128K(1%) swapped_out=0K(0%) unallocated=17.3M(99%)  
 REGION TYPE           VIRTUAL  
 ===========           =======  
 MALLOC               9216K    see MALLOC ZONE table below  
 MALLOC guard page          16K  
 MALLOC metadata           180K  
 STACK GUARD            56.0M  
 Stack               8192K  
 __DATA               592K  
 __LINKEDIT             53.1M  
 __TEXT               4568K  
 shared memory             8K  
 ===========           =======  
 TOTAL               131.3M  
                  VIRTUAL ALLOCATION   BYTES  
 MALLOC ZONE             SIZE   COUNT ALLOCATED % FULL  
 ===========           ======= ========= ========= ======  
 DefaultMallocZone_0x10291b000   9216K    292    27K   0%  

jueves, 6 de diciembre de 2012

Sincronizar reloj linux vía terminal NTPDATE.

Los sistemas operativos linux utilizar en protocolo NTP para sincronizar sus relojes y mantener su hora actualizada correctamente.
El demonio ntpd se lanza al iniciar la máquina e irá haciendo peticiones que sincronizarán la hora de nuestro sistema operativo a intervalos de tiempo a través de la red.
Estas peticiones siguen una jerarquía que al final concluye en un reloj externo como puede ser un reloj atómico.

El problema radica en que si tenemos el reloj desactualizado este protocolo tardará un tiempo en sincronizarlo debido a como tenemos el demonio configurado.
Si no queremos tocar los archivos de configuración para que este protocolo envíe peticiones más rápidamente o porque después querríamos volverlos a tener como estaban en un principio y queremos tener la hora correcta en este preciso momento.
Una solución sería mandar  una petición de sincronización a un servidor NTP (pool.ntp.org, ntp.ubuntu.com...)

Dicha petición sería con el comando ntpdate.

$sudo ntpdate -u pool.ntp.org

Después de esta petición, la hora de nuestro sistema estaría correctamente actualizada.