David Bohm

Hay dos frases que definen mi manera de pensar:
Realmente no hemos prestado mucha atención al pensamiento como un proceso; hemos participado en pensamientos, pero sólo hemos prestado atención al contenido, no al proceso.
La capacidad de percibir o pensar de manera diferente es más importante que el conocimiento adquirido.
Ambas son de David Bohm.

domingo, 16 de octubre de 2016

Algunos caracteres especiales para "batchear"

Una pequeña referencia a algunos de los parámetros básicos, y muy útiles, a utilizar al crear un buen archivo .bat

%n donde n es un número, hacemos referencia a un parámetro pasado al ejecutar el archivo .bat
      Por ejemplo %1 sería el primer parámetro, %2 el segundo, etcétera

%0 Hacemos referencia al nombre del archivo batch que estamos ejecutando, pero tenemos mas opciones, si hacemos un archivo .bat que tenga este contenido quedará suficientemente claro:

      echo %0
      echo Nombre : %~n0
      echo Extension : %~x0
      echo Unidad : %~d0
      echo Ruta : %~p0
      echo Ruta completa : %~s0
      echo Fecha-Hora del archivo : %~t0
      echo Atributos : %~a0
      echo Nombre y extension : %~nx0

"    Los parámetros con espacios deben de entrecomillarse.

% sirve para tomar el valor de una variable, %nombrevariable%

%%L donde L es una letra, sirve para hacer referencia al valor de la variable definida para construir un bucle for, por ejemplo %%a, y si tratamos de tomar el valor de diferentes tokens sería: el primer token, %%a, el segundo %%b, etcétera.

! como el %, nos dará el valor de una variable pero expandida tras activar setlocal enabledelayedexpansion. Muy útil dentro de bucles for por ejemplo.

&    Separa comandos en una misma linea. Muy útil para concatenar varios comandos cortos y que el script no quede infinitamente largo. Por ejemplo echo hola & echo adios. Pruebalo.

&&    Ejecuta el siguiente comando solo si el anterior comando ha dado un errorlevel 0.

||    Ejecuta el siguiente comando solo si el anterior comando NO ha dado un errorlevel 0.

>    Salida a un archivo. El ejemplo clásico es hacer un echo Texto de ejemplo  > archivo.txt

>>    Salida a un archivo pero agregando al contenido ya existente.

|    La salida del comando anterior se introduce como entrada del siguiente comando. Un ejemplo sencillo es directamente en el cmd:

Creo que para empezar son suficientes.

SaluDOS.

martes, 11 de octubre de 2016

¿msconfig olvidado por los técnicos de hoy en día?

Entrada rápida.

No hace mucho me paso una cosa curiosa en un equipo que tuve que intervenir técnicamente. Tenía tantas cosas instaladas y arrancaba tantas aplicaciones de inicio, que comenzaba con la memoria RAM a full.

Me dí cuenta por una conversación con un técnico que el msconfig parecía ser una herramienta que Windows nos ofrece y no forma parte del presente. ¿Me estoy haciendo viejo? Curiosamente el técnico se descargaba una herramienta que hacia lo mismo... curioso ¿no? Como es debido, no la memoricé, para eso está la Configuración del sistema que vamos a ver.

Pulsamos la tecla Windows + R, tecleamos msconfig y pulsamos Enter. Si usamos a Cortana en Windows 10, al buscar msconfig nos aparecerá un resultado llamado "Configuración del sistema".

Tenemos algunas opciones interesantes, veamos un par de ellas:

Por un lado podemos ir a la ficha de selección Arranque, y hacemos clic en Opciones avanzadas...


De forma predeterminada Windows arranca con un solo procesador, podemos aumentar esta cantidad al máximo de procesadores que tenga el equipo y en la cantidad máxima de  memoria indicamos la que tenga instalada. Pruebalo!

Por otro lado podemos decidir que se lanza en el arranque de Windows haciendo clic en la ficha de selección "Inicio de Windows", en el caso de Windows 7 mostrará una lista y en el caso de Windows 10 nos remite al Administrador de tareas.

Solo tenemos que desactivar las casillas de verificación que hagan referencia a un programa que no queramos que se arranque en el inicio. Hay que tener cuidado y estar seguro de que elegir o no. Probad a quitar por ejemplo el Adobe updater o aplicativos que controlemos que hacen exactamente.

SaluDOS.


lunes, 10 de octubre de 2016

Reinicia todos los servidores en la distancia desde batch de Windows o PowerShell. Elige!

Muchas veces veo como administradores de sistemas para reiniciar servidores, van a formas muy rudimentarias como, por ejemplo, coger control remoto de los 5 o 6 servidores para reiniciarlos, uno a uno. ¿Que pasa cuando son 20 o 30 servidores los que hay que reiniciar? ¿o muchos mas?

Esto hoy por hoy no tiene sentido ya que abriendo una consola cmd en windows, por poner un ejemplo, podemos utilizar el comando shutdown que admite establecer el servidor de destino y algún que otro parámetro más:

C:\> shutdown /r /m \\servidor01 /t 10 /c "Reiniciado por usuario Admin01"

Esto en un script batch de Windows, por ejemplo, podemos automatizar para que vaya reiniciando una lista de servidores. Podríamos hacer algo así:

set LISTADO_SERVERS=servidor01 servidor02 servidor03

for %%a in (%LISTADO_SERVERS%) do (
   shutdown /r /m \\%%a /t 10 "Reiniciado por usuario Admin01"
   )

Incluso previamente podríamos primero controlar la conectividad antes de lanzar el comando. Puedes ver un ejemplo de esto en esta entrada: Control de conectividad en batch de Windows o en PowerShell

Vale, vamos a ver como sería hacer lo mismo desde PowerShell. El cmdlet es Restart-Computer y el ejemplo extraído de la misma ayuda de powershell. Para realizar lo mismo que antes y reiniciar una lista de servidores e incluso el equipo cliente desde donde lo estamos lanzando:

C:\PS>restart-computer -computername servidor01 servidor02 localhost

Fácil, rápido y sencillo.

SaluDOS.

Control de conectividad en batch de Windows o en PowerShell, tu decides, fácil o más fácil...

Muchas veces tenemos que controlar si un script se lanza o no dependiendo de si hay conectividad con la unidad de red, el servidor o simplemente a internet.

Un apaño muy típico mio, y realmente rápido y facil de hacer, pasa por controlarlo desde el batch de windows para posteriormente ejecutar el comando que sea, aunque esto se puede hacer desde powershell de forma muy sencilla. Veamoslo primero desde un .bat y vamos a hacerlo a lo artesanal, así repasamos algunos conceptos básicos como volcar y buscar en un archivo .txt o los bucles for, así le añadimos un poco de lío.

REM deshabilitamos el echo y retardamos la carga de las variables, para los bucles for

@echo off
setlocal enabledelayedexpansion

:: Establecer variables

REM En este caso vamos a separar los almacenamientos de los servidores

set ADMIN_UDs_Red=almacenamiento01 almacenamiento02 almacenamiento03
set ADMIN_Servers=servidor01 servidor02 servidor03

REM Vamos a volcar el resultado a un log, controlamos la ruta para crearla si es necesario y el nombre del log depende de la fecha, para poder lanzarlo a diario cuando llegamos al trabajo. Vamos a borrar su contenido con el echo. >

set ruta=C:\Connectivity_Logs
if not exist %ruta% mkdir %ruta%
set rutalog=%ruta%\%date:~6,4%%date:~3,2%%date:~0,2%_Connectivity_Test.log
echo. >%rutalog%

REM Nos vamos a apoyar en un par de archivos txt y una variable que me permita controlar que si hay una ip que no tiene conectividad mande un mail

set pinged=%ruta%\ping.txt
set pinged2=%ruta%\ping2.txt
set ENVIOMAIL=NO

:: Lanzar comprobaciones

REM Volcamos una cabecera en el .log

echo. >>%rutalog%
echo ************************* >>%rutalog%
echo *** CONNECTIVITY TEST *** >>%rutalog%
echo ************************* >>%rutalog%
echo. >>%rutalog%

REM Recorremos las unidades de red de la variable ADMIN_UDs

for %%a in (%ADMIN_UDs_Red%) do (
echo Checking %%a

REM Hacemos un ping y volcamos el resultado al primer .txt

PING -w 3000 %%a > %pinged%

REM Buscamos si en el primer .txt hay indicios de conectividad y volcamos al segundo .txt

@find /C "TTL=" %pinged% > %pinged2%

REM Ahora la variable estado es la que marcará la conectividad, viendo el número que se ha volcado al segundo .txt si no es 0 es que ha encontrado alguna coincidencia, en este caso por como hemos hecho el ping será 1

set estado=[nOK]
for /F "tokens=1,2,3" %%h in (%pinged2%) do (
set control=%%j
if "%%h" EQU "----------" (
if "!control!" NEQ "0" set estado=OK
)
)

REM Volcamos el resultado al .log

echo Checked ... %%a: !estado! >>%rutalog%

REM En caso de no haber conectividad en cualquiera de las ips activa el envio de un mail

if !ENVIOMAIL! EQU NO (
if !estado! EQU [nOK] set ENVIOMAIL=SI
)
)

REM Realizamos exactamente lo mismo con la lista de servidores

for %%a in (%ADMIN_Servers%) do (
echo Checking %%a
PING -w 3000 %%a > %pinged%
@find /C "TTL=" %pinged% > %pinged2%
set estado=[nOK]
for /F "tokens=1,2,3" %%h in (%pinged2%) do (
set control=%%j
if "%%h" EQU "----------" (
if "!control!" NEQ "0" set estado=OK
)
)
echo Checked ... %%a: !estado! >>%rutalog%
if !ENVIOMAIL! EQU NO (
if !estado! EQU [nOK] set ENVIOMAIL=SI
)
)

REM Volcamos un pie de log para constatar que hemos terminado con el

echo. >>%rutalog%
echo ************************* >>%rutalog%
echo ***        END        *** >>%rutalog%
echo ************************* >>%rutalog%

REM Borramos los ficheros .txt en los que nos hemos apoyado.

del %pinged%
del %pinged2%

REM Aqui controlariamos el envio del mail, en este caso solo hago un echo.

ECHO %ENVIOMAIL%
PAUSE

Si quieres saber como enviar el mail, mira esta entrada: Enviar un mail con PowerShell

Bien, esto sería mas fácil haciéndolo desde powershell, ya que con un único comando obtenemos true o false al comprobar la conectividad y lo almacenamos en una variable:

a$=test-connection -computername <nombre_servidor> -quiet

En este caso la variable a$ tendrá el resultado true o false de la comprobación de conexión.
Por ejemplo, para saber si tenemos conectividad a internet, podemos lanzar directamente el comando en la consola de windows powershell:

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Reservados todos los derechos.

PS C:\> test-connection -computername google.com -quiet
True
PS C:\>

Si consultamos la ayuda, podemos ver que admite algunas variantes, por ejemplo si queremos comprobar varios equipos:

test-connection -computername server01, server02, server12 -credential domain01\user01

Incluso personalizando los parametros del ping

test-connection -computername Server01 -count 3 -delay 2 -TTL 256 -buffersize 256 -throttle 32

Podríamos ir mas allá y concatenar la condición de conexión con un servidor a si esta es true lanzar una sesión interactiva:

if (test-connection -computername Server01 -quiet) {new-pssession Server01}

Veamos como lo realiza:

PS C:\> if (test-connection -computername servidor01 -quiet) {new-pssession servidor01}

 Id Name       ComputerName   State                   ConfigurationName      Availability
 -- ----            -----------------      -----------------     ------------                      -----------
  1 Session1    servidor01          Opened                Microsoft.PowerShell   Available

PS C:\>

Nos ha creado la sesión en el servidor, introducimos el número de id en el comando Enter-PSSession 1 y cambiamos a esa sesión interactiva para lanzar comandos en el propio servidor:

PS C:\> Enter-PSSession 1
[servidor01]: PS C:\Users\usuario01\Documents>

Para gustos colores yo a veces prefiero coger scripts que ya tengo hechos y no perder ni un segundo y otras veces me apetece recordar un poco comandos y métodos olvidados.

Piensa en variantes de este método, si cambias el listado de servidores o almacenamientos por lista de dominios controlas si hay conectividad hacia los dominios que administras, o los que consultas de normal, etcétera.

SaluDOS.



Enviar un mail con PowerShell

En algunos de los desarrollos que he hecho últimamente con scripts, siempre acabo teniendo que enviar un correo electrónico, o bien a los usuarios, o bien a los administradores.

Veamos de forma muy simple y con un ejemplo concreto como sería ese script:

# Tomamos el valor de un argumento al ejecutar el script, este va a ser un archivo del que cogeremos su contenido.
$archivo=$args[0]

# Especificamos los destinatarios, en caso de ser varios hay que separarlos con coma.
$to = "destinatario1@dominio.com, destinatario2@dominio.com"

# Especificamos el remitente.
$from = "remitente@dominio.com"

# Especificamos el Asunto del correo electronico.
$subject = "Escribimos entre comillas el Asunto del correo electrónico"

# Aqui vamos a definir el cuerpo del mensaje. En este caso vamos a transformar el contenido de un fichero plano formateado en el contenido que agregará al correo.
$body = Get-Content -path $archivo | Out-String

#Definimos el servidor de correo mediante su ip
$smtpServer = "172.16.15.83"

#Creamos el objeto mail
$smtpClient = New-Object Net.Mail.SmtpClient($smtpServer, 25)
$smtpClient.EnableSsl = $false

#Lo enviamos
$smtpClient.Send($from, $to, $subject, $body)

Pues nada espero que sirva como referencia.

SaluDOS.

Hackers, ciberdelicuentes y la mala prensa

Este tema es un tema que me toca la moral, o la cibermoral, por decirlo de un modo mas técnico. Así que recupero una antigua entrada, la actualizo y vamos allá.

Cuando miramos la increible definición que la RAE tiene sobre hacker:

hacker
Voz ingl.
1. m. y f. Inform. pirata informático.
Real Academia Española © Todos los derechos reservados

¿Alucinante verdad?, si seguimos consultando esta fuente inagotable de conocimiento tecnológico:

pirata informático, ca
1. m. y f. Persona que accede ilegalmente a sistemas informáticos ajenos para apropiárselos u obtener información secreta.
Real Academia Española © Todos los derechos reservados

Es curioso, hace muchos años ya me dedicaba a temas de seguridad y el primer libro "físico", con páginas, de las que se tocan y da gusto pasar, que compré sobre el tema de los hackers fue allá por el 2001 y se llamaba, no os asustéis con el título, os adjunto una foto:

 
Copyright: © 2001 by Data Becker GmbH & Co. KG

Alguna vez suelo cogerlo, y siempre, siempre, siempre lo primero que hago es mirar la contraportada y ver el precio, os adjunto una foto, que no tiene desperdicio:

 

Allá quedaron las pesetas.

Bueno pues sabéis con que palabras comienza el prólogo de este libro...si...exactamente, lo habéis adivinado: "Piratas informáticos...bla bla bla"

Fijaos lo curioso del tema, si consultamos Wordreference, también es interesante la definición:

Wordreference
hacker
(voz i.) com. inform. Persona muy aficionada y hábil en informática que entra ilegalmente en sistemas y redes ajenas:
el hacker se adentra en un sistema como desafío intelectual

Pero, ¿alguien se ha preguntado alguna vez que piensa un verdadero hacker sobre esto? Bueno, pues os puedo decir que un hacker no es un ciberdelincuente. Anda mira, esa palabra nueva define lo que los "malos" hacen con la tecnología ¿curioso no?

Un hacker es una persona que totalmente enamorado de la tecnología, apasionada, busca sus limites, agujeros, puertas traseras o simplemente errores, para rápidamente solicitar que se corrijan por el bien común, es curiosa y dedicada así como comprometida con el aprendizaje, con la investigación. Realizar comprobaciones de seguridad sobre un sistema, ponerse en la piel del ciberdelincuente y ver los agujeros que tiene todo sistema tecnológico, permite protegerlo mejor y mejorarlo en la medida de lo posible ante futuros ataques. No existe un sistema 100% seguro, hay que revisarlo periódicamente y tiene que haber tecnólogos que lo pongan a prueba.

Hay que señalar que en muchos casos, no solamente se utiliza este término en el ámbito de la informática, el espíritu de esta cultura se extiende a cualquier conocimiento humano donde la creatividad y la curiosidad son vitales.

El objetivo del ciberdelincuente es fundamentalmente una actividad delictiva, en cambio un hacker puede ser un investigador, un profesional o un estudiante, por poner algunos ejemplos, con altos conocimientos informáticos.

Hace ya bastantes años que se dividió a los hackers en 3 categorías, aunque no estoy muy de acuerdo con esto, tengo que comentarlo si toco este tema:

- Los hackers de sombrero blanco (white hat), los buenos, los profesionales de la seguridad, los que revisan todo para que no entren los malos.

- Los hackers de sombrero negro (black hat), los que usan sus destrezas de forma maligna, los que se dedican a crackear sistemas. Normalmente se mueven por intereses propios.

- Y finalmente los hackers de sombrero gris (gray hat), que sería como un hacker con conocimientos de sombrero negro y que se dedica a chequear sistemas, encontrar agujeros y cobrar por solucionarlos. Digamos que es una mezcla entre los dos tipos de hackers anteriormente comentados.

Yo creo en la división de los expertos tecnólogos que se dedican a reventar sistemas, basicamente, los hackers que son los buenos, los que intentan que las cosas funcionen correctamente y con seguridad, y por otro lado los ciberdelincuentes, que movidos por diferentes motivaciones se dedican a hacer el mal.

Hay por ejemplo un termino que define a los ciberdelincuentes que se fundamentan en una ética, unos ideales, que son los hacktivistas.

Pero bueno no me quiero liar, la idea era aclarar un concepto que, siempre que alguien ha visto una noticia sobre un "hacker" que pertenecía a una mafia y ha hecho algo muy malo, me veo obligado a corregir y adiestrar a la gente a decir: ciberdelincuente.

Creo que el problema fundamental es como se dan las noticias y, en muchas ocasiones, la falta de información de los medios con respecto a la seguridad informática.

SaluDOS.

sábado, 8 de octubre de 2016

Languard network scanner, un viejo amigo

Entrada corta, simplemente debería haberle puesto el título: Nostalgía de tiempos pasados.

Fue toda una aventura cuando lo encontré allá por el año 2001, y madre mía, fue todo un descubrimiento. Un escaner de red que daba muchísima información. Lo introdujimos enseguida en los protocolos de las auditorias de seguridad.


Es que miro esta captura de cuando arrancaba el programa, y me trae tantos recuerdos. Por favor, que viejo me voy haciendo poco a poco.

Me acuerdo que tenia una versión shareware, que podías utilizar depues de descargarlo. Este producto como es lógico ha ido evolucionando con los años, y sigue estando como una opción, creo que interesante, para el escaneo de redes en la fase de recolección de información. Lo podéis encontrar en http://www.gfi.com/downloads y sigue teniendo una versión trial de 30 días, aunque te recalca en negrita, cuando te pide tus datos personales, que: This software is designed for business use only

La auditoría de red con GFI LanGuard te proporciona una visión integral de tu red: PCs clientes y servidores, dispositivos USB, smartphones y tablets conectados, software instalado, cualquier recurso compartido abierto, puertos, contraseñas débiles en uso e información del hardware por poner algunos ejemplos.

Estos escaneos te proporcionan una instantánea en tiempo real del estado de tu red. Como es lógico tiene la opción de realizar informes, lo que permite tomar acciones correctoras sobre la seguridad de la red y sus dispositivos y además, con el historial que almacena, puedes ir comprobando dichos cambios.

Un producto que lleva muchos años funcionando.

SaluDOS.


Robocopy, ese amigo inseparable que lo copia casi todo

En Windows y de cara tanto a realizar volcado de datos entre unidades, servidores como incluso para copias de seguridad de nuestros archivos en el equipo, la herramienta que tenemos a mano y podemos sacarle partido es Robocopy.

Tiene una pega, y es que no realiza copias de archivos que estén en uso, es decir, archivos abiertos, pero si lo hacemos en una ventana de tiempo apropiada, es muy muy útil. Veamos algunos de los modificadores mas útiles y como quedaría el comando finalmente:

/MIR hace un espejeado y establece el origen como maestro, cualquier cambio en origen hace que se reproduzca en destino. Es la opción más importante para las copias incrementales. Se suele proponer usar encarecidamente /MIR para copias incrementales, pero en el caso en el que quieras mantener en destino archivos que ya no existen en origen, hay que sustituir /MIR por /E. Si usamos esta opción, archivos que hayan sido renombrados o movidos en origen generaran duplicados en destino. Se suele proponer crear una subcarpeta llamada backup en destino que contenga una copia 1:1 del árbol de carpetas de origen. De esta forma se puede todavía mantener archivos históricos junto a la carpeta backup y eliminar o reorganizarlos con seguridad más adelante.

/FFT es una opción muy importante, ya que permite una diferencia de 2 segundos al comparar las marcas de tiempo de archivos, que no importen las diferencias de reloj menores entre tu ordenador y el dispositivo de copia de seguridad. Esto asegurará que se copian sólo los archivos modificados, aunque los tiempos de modificación de archivo no estén sincronizados.

Estas son las primordiales, en cuanto a opciones adicionales que podemos usar son, por ejemplo:

/R:3 especifica el número de reintentos, en este caso tres, Si fallara la conexión,  /W:10 especifica un tiempo de espera de 10 segundos entre reintentos. Estas son opciones útiles al hacer la copia de seguridad en una red.

/LOG para mi tener un .log final que consultar es vital. La información que consultamos es muy poca, miramos la cabecera para ver la hora de ejecución y el final del documento para ver el resumen y si hay carpetas o archivos que no han sido copiados, errores, etc. Merece la pena. Tenemos que especificar la ruta y el nombre del fichero log, como por ejemplo /LOG:C:\copia.log

El fichero puede ser de extension .log o .txt como lo deseemos, lo va a realizar en formato totalmente plano. /LOG:C:\log.txt

/NP y /NDL suprime algunas de las salidas que se muestran en el log, además se puede Agregar /NS /NC,  /NFL que reducen aún más la cantidad de salida. Sin embargo, se sugiere siempre grabar cierta depuración de salida durante las primeras ejecuciones, para asegurarse de que todo está funcionando como se esperaba.
      /NP - No Progress: No muestra el % copiado
      /NDL -  No Directory List: No muestra nombres de directorios
      /NS - No Size: No muestra tamaño de archivos
      /NC - No Class: No muestra las clases de archivos
      /NFL - No File List: No muestra nombres de archivos

Bien, con todo esto, podríamos construir un comando bastante efectivo tal que así:

robocopy C:\origen G:\destino /MIR /FFT /R:3 /W:10 /Z /NP /NDL /LOG:C:\Copia.log

Donde C:\origen y G:\destino, obviamente, deben sustituirse por la ruta de la carpeta que queremos copiar de nuestro equipo, por ejemplo, y el destino al que deseemos realizar la copia de seguridad. Lo mismo haremos con C:\Copia.log, lo personalicemos para especificar la ruta y el nombre del archivo log.

Como siempre en estos asuntos, para gustos colores y se pueden aplicar variantes y otros parámetros que cada cual considere mas eficientes o vitales. Yo para un primer acercamiento, creo que estos son los mas interesantes.

Además, este comando se puede agregar a un script .bat y lanzarlo, o bien como tarea programada, o dentro del menú inicio para que se ejecute cuando el usuario inicia sesión en windows, por poner un ejemplo.

SaluDOS.

Modelo OSI y TCP/IP

El modelo de interconexión de sistemas abiertos, más conocido como modelo OSI que viene del inglés: Open System Interconnection, es un modelo de referencia para los protocolos de red de arquitectura en capas. Fue creado en el año 1980 por la Organización Internacional para la estandarización llamada ISO, del inglés: International Organization for Standardization.

Bien, el modelo OSI divide en 7 capas la comunicación entre equipos informáticos, vemos cuales son:

   7. Aplicación

   6. Presentación

   5. Sesión

   4. Transporte

   3. Red

   2. Enlace de datos

   1. Física

Nos fijamos en el detalle mas importante que siempre remarcaba en mis cursos de antaño: Las dos únicas capas con las que el usuario final interactua son las capas 1 y 7, la capa física y la capa aplicación.

La capa física abarca los elementos físicos de la red, los cables, switches, routers, puntos de acceso y resto de dispositivos que conforman el entorno físico de la red. Se encarga de la transmisión y recepción de los bits a través de los dispositivos físicos. Básicamente codifica la información a transmitir, 1 y 0, a través de sistemas analógicos o digitales mediante señales eléctricas u ópticas.

La capa de aplicación proporciona la interfaz que utiliza el usuario en su ordenador para manejar crear documentos, enviar correos electrónicos, guardar un archivo, etc. Sin saberlo, cuando manejamos el ordenador, o cogemos un cable para conectar el equipo a una red de datos en una toma de pared, estamos interactuando con 2 de las 7 capas del modelo OSI... ¿curioso no?

Otro detalle que siempre comentaba en los cursos, y ante lo cual los alumnos se quedaban, no se como decirlo, "atónitos", es que existía una octava capa no contemplada en el modelo, y que era muy usado entre los técnicos, "error en capa 8", para indicar que el usuario era el problema. Efectivamente, el usuario es la capa 8. Esto obviamente es un termino coloquial entre los técnicos de soporte a usuarios.

En cuanto al protocolo Transfer Control Protocol y al protocolo Internet Protocol, cada uno tiene una función básica a desempeñar en el envio y recepción de los datos, cuando por ejemplo estamos conectados a una página web en internet, enviando un mail o guardamos archivos en una unidad de red en la empresa. Sin entrar en profundidad e intentar entender que son estos dos protocolos, TCP se encarga de definir como hay que trocear los datos para que viajen por la red, e IP se encarga de definir como hay que etiquetar esos paquetes para que lleguen a destino. Imaginemos que enviamos mediante un transportista las piezas de un mueble a montar, cada una en un paquete individual correctamente etiquetado, indicando remitente y destinatario. Así viaja la información que enviamos por internet, troceada y etiquetada.

El modelo TCP/IP contempla la siguiente distribución de capas:

   4. Aplicación

   3. Transporte

   2. Internet

   1. Acceso a la red

El conjunto de protocolos TCP e IP está basado en el modelo OSI, es por ello que existe una correspondencia entre las diferentes capas:


Como se puede ver los tres niveles superiores del modelo OSI, Aplicación, Presentación y Sesión son considerados como un nivel único de aplicación en el conjunto TCP/IP. En el caso de las capas inferiores, Enlace de datos y Física, ocurre lo mismo, conforman una capa única llamada de Acceso a la Red.

Si analizamos qué funciona dentro de esas 4 capas  podríamos hacer el siguiente esquema a modo de resumen:

   4. Aplicación: HTTP, FTP, SMTP, Telnet, DNS, SNMP, DHCP, SSH, rlogin, etcétera.

   3. Transporte: TCP, UDP

   2. Internet: IP

   1. Acceso a la red: Ethernet, Frame relay, ATM

Bueno, lo dejamos aquí.

SaluDOS.

Atajos de teclado en Windows 10

Siempre que alguien me ve manejando Windows me pregunta cosas como ¿que has pulsado para hacer eso tan rápido?

Algunos de estos atajos son conocidos por la mayoria, otros no. Ahí van los principales atajos de teclado relacionados con la barra de tareas de Windows 10, para acceder rápidamente a sus principales funciones, hacer zoom, etcétera:

Tecla de Windows - Abre y cierra el Menú de Inicio.

Tecla de Windows + 1/2/3/4... etc. - Abre las aplicaciones de la barra de tareas según su orden. Si tenemos aplicaciones ancladas, empieza por ellas.

Tecla de Windows + E - Abre el Explorador de archivos.

Tecla de Windows + M - Muestra el escritorio y minimiza todas las ventanas abiertas.

Tecla de Windows + TAB - Abre la vista de tareas.

Tecla de Windows + Cualquiera de las flechas, Arriba, abajo, derecha o izquierda - Muy útil para organizar las ventanas y colocar una junto a la otra aprovechando todo el espacio disponible.

Alt + Tab - Cambia entre diferentes ventanas abiertas.

Alt + F4 - Cierra la ventana activa.

Tecla de Windows + D - Hace que todas las ventanas desaparezcan y muestra el escritorio o lo devuelve a su estado anterior mostrando el Escritorio con lo que teníamos abierto. Esta opción complementa la combinación mas conocida: Windows + M.

Tecla de Windows + T - Selecciona de forma alternada las aplicaciones de la barra de tareas.

Tecla de Windows +/- - Efecto lupa, aumenta la ventana activa, con el ratón puedes moverte con ella.

La que mas uso porque siempre me meto al cmd para lanzar comandos:

Tecla de Windows + R - Abre el cuadro de diálogo Ejecutar... tecleas cmd, calc, notepad, etcétera  y pulsas Enter.

SaluDOS.

Variable JAVA_HOME siempre actualizada con script Powershell

Aunque ha sido una cuestión de trabajo, he tenido que invertir cierto tiempo personal para definir un procedimiento sencillo, a mi alcance,  y sobretodo que se pueda implantar rápido en ciertos archivos .bat de una aplicación.

La idea es muy básica, aunque estuve estudiando otras posibilidades, coger del registro de Windows la versión actual de Java, y dentro de esta el valor de la variable JavaHome, donde está la ruta del JRE que queremos actualizar en la variable de sistema JAVA_HOME.

Por lo que he ido comprobando es un problema recurrente, al actualizar la versión de Java, cambia la ruta y la variable ya no apunta a donde debería. Pero claro, esto a la hora de gestionarlo en cientos de usuarios y equipos, pues no es como cuando te pasa a ti, que identificas el problema, cambias el valor de la variable y listo.

Bien, la idea es crear un archivo .bat que realizará la llamada a un powershell .ps1 y después realizará la limpieza de archivos temporales. Esto se va a integrar en el lanzamiento de la aplicación, pero esta parte ya no puedo ponerla aquí, se complicaría mucho la entrada.

Veamos el script powershell donde está el meollo de la cuestión. Este sería el archivo .bat que realiza la llama al powershell simplificado y sin los condicionantes que pondría la aplicación que utilizamos.

REM---Comienzo de script .bat---

REM version_java.bat
powershell -noprofile ".\ruta_java.ps1" C:\ruta_java_current.txt C:\ruta_java.txt C:\ruta_java_final.txt
del C:\ruta_jav*.txt

REM---Fin de script .bat---

A continuación el script powershell que realiza el proceso de identificar la versión actual de java, voy a ir poniendo comentarios que no están en el script para que se entienda a rasgos generales que hace cada parte:

#version_java.ps1
#Tomamos los argumentos que nos pasa al .ps1 el script .bat. Esos argumentos son las rutas y nombres de archivos que utilizaremos posteriormente en el script.

$ruta_current=$args[0]
$ruta=$args[1]
$ruta_final=$args[2]

# Obtenemos la version actual, accediendo a la ruta concreta del registro de windows y lo almacenamos en el primer argumento ($ruta_current). Después le hacemos una limpieza quedándonos con lo que nos interesa, que sería un valor tal que 1.8 por ejemplo.

  $ruta_java=get-ItemProperty -Path "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment" -name CurrentVersion
  #Write-Host $ruta_java
  $ruta_java | Out-File $ruta_current
  (Get-Content -Path $ruta_current) | Where-Object -FilterScript {$_.Trim() -ne '' } | Set-Content -Path $ruta_current
  $texto_current = Get-Content -Path $ruta_current | Select-Object -Last 1
  $texto_current | Out-File $ruta_final
  (Get-Content $ruta_final) | ForEach-Object { $_ -replace "CurrentVersion", "" } | Set-Content $ruta_final
  (Get-Content $ruta_final) | ForEach-Object { $_ -replace ":", "" } | Set-Content $ruta_final
  (Get-Content $ruta_final) | ForEach-Object { $_ -replace " ", "" } | Set-Content $ruta_final
  $texto_current = Get-Content -Path $ruta_final
  #Write-Host $texto_current

# Obtenemos la ruta de la version actual. Ahora ya podemos profundizar un poco mas en la ruta del registro de windows añadiendo el valor obtenido en las lineas anteriores. Vamos a realizar un proceso muy parecido al anterior, una vez obtenida la ruta almacenada en JavaHome, le hacemos una limpieza y finalmente esa ruta la dejamos en una ruta final.

  $ruta_current = "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment\"+$texto_current
  $ruta_java=get-ItemProperty -Path $ruta_current -name "JavaHome"
  #Write-Host $ruta_java
  $ruta_java | Out-File $ruta
  (Get-Content -Path $ruta) | Where-Object -FilterScript {$_.Trim() -ne '' } | Set-Content -Path $ruta
  $texto = Get-Content -Path $ruta | Select-Object -Last 1
  $texto | Out-File $ruta_final
  (Get-Content $ruta_final) | ForEach-Object { $_ -replace "JavaHome     : ", "" } | Set-Content $ruta_final

  $variable = Get-Content -Path $ruta_final

# Cambiamos las variables de entorno. Una vez que ya tenemos almacenada la ruta exacta, la utilizamos para actualizar la variable JAVA_HOME. Tenemos en cuenta si existe alguna que sea de usuario y la borramos, siempre utilizaremos la variable de entorno pero de máquina.

  [Environment]::SetEnvironmentVariable("JAVA_HOME",$null,"User")
  [Environment]::SetEnvironmentVariable("JAVA_HOME", $variable, "Machine")
  $env:JAVA_HOME = $variable

A partir de aqui lo único que hace el .bat es borrar los archivos temporales.

En principio los resultados son muy buenos en equipos con Windows 7 SP1, veremos si no se estropea con alguna actualización de Java o de Windows.

SaluDOS

Windows 10 se bloquea por la hibernación

Un problema que estoy notando en los equipos actualizados a Windows 10, por lo menos en portátiles, es que pasado un buen rato, sobretodo cuando te despistas del ordenador para estirar las piernas, o para cenar, o para lo que sea que vayas a estar sin tocarlo, éste se bloquea.

Es como si Windows no se recuperase correctamente de la hibernación del equipo. Y es un tema curioso, porque por ejemplo en un par de equipos ni con Windows 7 ni con Windows 8 pasaba, justo al actualizarlo a Windows 10 ha empezado a dar problemas.

Tras darle vueltas con la configuración del equipo, limpieza: antivirus, ccleaner, spybot y programas del estilo, al final parece que la solución definitiva ha sido deshabilitar la hibernación.

Para hacerlo desde Windows, es muy sencillo: Abrimos una consola cmd en modo administrador, para ello buscamos en cortana cmd y cuando aparezca el "Simbolo de sistema", nos ponemos encima, hacemos clic derecho y seleccionamos en el menú contextual "Ejecutar como administrador".

Una vez abierta la consola tecleamos lo siguiente:

c:\> powercfg.exe /hibernate off

Solo dos apuntes, /hibernate se puede cambiar por /h, y si lo que queremos es volver a habilitar la hibernación, solo tenemos que cambiar el off por on:

c:\> powercfg.exe /hibernate on

c:\> powercfg.exe /h on

Acto seguido pulsamos Enter. Si todo ha ido bien Windows no muestra absolutamente nada.

Si por ejemplo muestra el siguiente mensaje: "No se puede realizar la operación. Se produjo un error inesperado (0x65b): Error de una función durante la ejecución." es que no estamos ejecutando la consola como administrador.

Si esto no funciona, se puede deshabilitar la función de hibernación desde la BIOS. Aunque como siempre recomiendo, si no sabes muy bien que es la BIOS, toca lo menos posible e infórmate en profundidad antes de hacerlo.

SaluDOS.

Las 3s, cuestión de seguridad, cuestión de sentido común

Siempre he dicho que en nuestra vida tecnológica hay que aplicar las 3s, que son:

Seguridad, Seguridad y por último la más importante, Seguridad.

Al margen de esta broma que llevo gastando años, como siempre estoy obsesionado con la seguridad, últimamente me hacen muchas preguntas del estilo: ¿este mail lo puedo abrir? ¿esto que me hace el ordenador es normal o se me ha colado algo "raro"? ¿que opinas de esta App,  me la puedo instalar en el móvil?

Voy a resumir algunos de los muchas recomendaciones que suelo dar. Quizás vaya ampliando poco a poco la lista, ya que a veces juntar de tirón todos estos conceptos que vas soltando a los usuarios, pues la verdad es que cuesta un poco.

En cuanto al uso del dispositivo, sea cual sea, ten cuidado con el, una de las formas más habituales de conseguir tus datos es un método muy tradicional: el Robo. No seas despistado y no lo dejes por cualquier sitio. ¿Sabes que si pierdes el móvil, y tienes un patrón para desbloquearlo, con que el que lo encuentre mire un poco al trasluz la pantalla del terminal, y vea tu huella, va a poder ver el patrón que has utilizado la última vez que lo has desbloqueado? Es fácil, rápido y sencillo. Explota al máximo tu dispositivo para que el inicio de sesión o desbloqueo sea, ante todo, seguro.

En cuanto a qué aplicaciones instalar, pues yo siempre digo que hay que aplicar el sentido común. En cuanto al antivirus, es básico, sea un PC, sea un móvil, ponle un antivirus. En esto en general veo que los usuarios solo piensan en el virus tradicional, el que hace muchos años era curioso mencionar la palabra virus, que a mucha gente le evocaba el virus de verdad, el de la gripe por ejemplo. Hoy por hoy hay un montón de formas de infectar nuestro dispositivo, y muchas variantes, por ejemplo el software malicioso que quizás nosotros mismos hemos instalado para probar un nuevo programa que hemos descubierto. Aunque se le llama genéricamente antivirus, piensa que es un antiTODO, sea lo que sea que entre en tu dispositivo quizás tu antivirus te liberé de un disgusto. Algo básico y que en general no se realiza, actualiza todas tus aplicaciones siempre, esto mantendrá el dispositivo mas seguro.

En cuanto al manejo, se un poco lógico. ¿Te meterías en una bajera que no tiene rótulo de que tipo de establecimiento es porque la fachada te parece bonita? Bueno, pues esa misma lógica debes aplicar con el uso en general de tu dispositivo. No entres a páginas webs que no conozcas, intenta que siempre sea por https (la s es de seguro), verifica los certificados, ante una nueva aplicación, infórmate, aprovecha que hoy por hoy podemos saber la opinión de miles de usuarios que se la han descargado antes que tu. Compra solo en webs verificadas, y si es una nueva que te ofrece algo bueno, bonito y barato, infórmate muy muy bien.

Las contraseñas, lo que menos preocupa a los usuarios y la ponen con un post it en el monitor, tienen que ser como cuando limpias tu casa a fondo un par de veces al año, renuevalas, por lo menos eso, un par de veces al año, si son 3 mejor, y son 4 pues ¡genial!, ya estás cumpliendo correctamente con una buena política de seguridad. Usa contraseñas robustas, a ser posible alfanuméricas, combina mayúsculas y minúsculas y con algún carácter especial, y lo mas importante: No tengas la misma contraseña para todo. Si alguien es capaz de conseguirla, puede acceder a toda tu identidad digital, correo, facebook, twitter, etcétera. Yo siempre recomiendo usar una regla para memorizarlas todas de un tirón, por ejemplo, mientras escribo esta entrada, vamos a definir una regla y vamos a usarla con varios accesos diferentes:

- Como tiene que ser alfanumérica voy a definir una frase: "Este acceso" es sobretodo súper robusto "número"
- Donde "Este acceso" lo sustituiremos por el sitio web, la tienda, la red social, etcétera.
- Donde "número" será un número, pero para que no sea siempre el mismo, vamos a contar el número de letras que tiene "Este acceso" y así no lo olvidamos nunca.
- Elegimos un carácter especial...venga, lo voy a sacar al azar: el punto, y lo colocarémos justo antes y después del número X
- Para el resto de palabras usaré una letra de cada palabra, por ejemplo la segunda: eS sObretodo sUper rObusto
- Intentaremos poner alguna letra mayúscula, para que quede perfecta.

Pongamos unos ejemplos:

- mail.google.com, la contraseña quedaría así: GoogleSOUO.6.
- facebook.com, la contraseña quedaría así: FacebookSOUO.8.
- amazon.es, la contraseña quedaría así: AmazonSOUO.6.

Por último, siempre que puedas utiliza un segundo factor de autenticación, no voy a extenderme ahora en esto, pero cada vez son mas los servicios que te dan esa opción. Además de que introduces tu contraseña súper segura, el sistema se asegura de que eres tu, por ejemplo, enviándote un sms a tu móvil con un código que será valido durante unos minutos. Mira, este es un buen ejemplo de porqué no hay que configurar en tu móvil, el que aunque esté bloqueado, muestre el contenido de los whatsapp o mensajes sms que llegan. Conozco a muchísima gente que por "comodidad", es decir, vagueza, lo tienen así en su móvil. Un ladrón que te haya robado el bolso con tu móvil y tu cartera, en un momento de despiste, puede utilizar por ejemplo tu tarjeta visa en internet. Increíble ¿verdad?

Bien, ahora vamos con la regla de oro, puede que tengas todo lo anteriormente mencionado, pero ¿te conectas a cualquier wifi pública desde cualquier sitio en el que te encuentres? como por ejemplo la de tu ciudad, la del bar al que vas todos los días a tomar un café, la del aeropuerto, etcétera. Si, lo sé, es gratis, pero igual no tanto y te cuesta algún disgusto, finalmente caro. Una de las formas mas sencillas de conseguir datos de usuarios sin mucho esfuerzo es montando una red wifi que sea de acceso gratuito y si encima su nombre contempla la palabra Free o Gratis, pues ya está, consigues contraseñas, fotos, números de cuenta o tarjeta de crédito de un montón de usuarios confiados.

Veamos, en un momento de urgencia, te puedes conectar a una red de estas características, pero piensa bien que necesitas hacer, porque si vas a conectarte a tu banco, a la intranet de tu trabajo o algún sitio en el que tengas que introducir usuario y esa contraseña que tanto te ha costado aprender, como por ejemplo para comprar algo, pues vas mal. Esa información se te puede robar fácilmente.

Vamos a analizar un fallo común en la mayoría de usuarios que tienen hijos, ¿les dejas el móvil o el ordenador para que lo usen y así te olvidas un rato de ellos y su "hiperactividad"? Vale, no voy a entrar en el concepto moral o ético desde la responsabilidad que tiene ser un padre o madre, y qué supone hacer esto. Pero piensa en términos de seguridad, tu criatura puede instalar una aplicación maliciosa, bloquear tu acceso al banco por número de reintentos, solicitar que se reinicie una contraseña de uno de tus accesos para luego utilizarlo para "jugar", acceder a sitios web indebidos, no se, acciones que parece a priori sin importancia pero a la larga te puede suponer un problema serio. ¿Controlas el uso que hace tu hijo o hija de la conexión a internet que compartís en la familia? Mas adelante te pongo un ejemplo serio, sigue leyendo. Trata de explicarle, si ya tiene edad para ello, las consecuencias de un mal uso de las nuevas tecnologías, y sino usa el control parental que seguramente tu dispositivo te permite configurar.

Un aspecto vital, ¿que te gusta compartir en las redes sociales? ¿tienes la ubicación de tu movil siempre activa? ¿que información se publica en las redes sociales cuando compartes, por ejemplo,  cada vez que sales a correr? Piensa, si das demasiada información en redes sociales, sobre tu vida, tus gustos, tu actividad diaria, etcétera, estás siendo un objetivo fácil. He puesto el ejemplo de correr, porque como me comentaba un amigo hace mucho tiempo, de pronto se dio cuenta que al publicar sus salidas deportivas, se mostraba el punto de inicio y el recorrido, es decir, cualquiera que viese esos datos sabrá donde vive aproximadamente, que recorrido hace y cuanto tiempo aproximado deja su domicilio vulnerable. Con seguirle unos días, ¡zas! en toda la boca. Ten mucho cuidado que datos muestras en la red y no aceptes solicitudes de amistad o conectar de gente que no conozcas en las redes sociales. Puedes estar pasando información a quien no conozcas y tenga malas intenciones contigo, quizás simplemente por diversión.

Voy incluso mas lejos, ¿Sabes que hay cientos de casos, por no decir miles, de personas que suplantan la identidad de otra persona para contactar con sus amigos, compañeros de trabajo, etcétera? ¿Sabes que ahora mismo tu hijo o hija puede estar chateando con un pederasta que finge ser un chico o chica de su edad? ¿Sabes que cualquiera que te esté robando tu wifi (esa que te da igual la configuración de seguridad que tenga) puede estar haciendo un uso ilegal de tu conexión y tu eres el responsable? Si alguien a través de tu conexión, está consultando o descargando material ilegal, como por ejemplo, vamos a poner el mismo ejemplo de antes, material de pornografía infantil, todo esa actividad en la red queda registrada a tu conexión, es decir a tu nombre, habrá que demostrar que no has sido tu el autor del delito. Ten cuidado con que ficheros dejas en la ya tan famosa nube, y que todo el mundo utiliza con alegría y descontrol. Como me dijo hace tiempo un amigo, y me encantó el concepto, estás dejando tus datos, tus fotos, tus vídeos, toda tu vida digital, en el ordenador de otra persona.

Los ciberdelincuentes están ahí, son mafias que ganan mucho dinero vendiendo cualquier dato tuyo, tu número de tarjeta de crédito, un viaje que has contratado para dentro de un mes, cualquier cosa, aunque te parezca que no tiene valor. De repente te llega un cargo a la tarjeta de crédito de casi 2.000 euros, esto lo he visto muy de cerca, cargos en USA cuando tu justamente estabas en España, con tu visa y te preguntas ¿qué ha pasado?. Simplemente te sientes indefenso, te han robado por mucho que tapas el número secreto cada vez que lo introduces en el cajero. ¿Cómo? pues nadie te lo va a decir, al año se mueve en el mercado negro cientos de miles de millones de euros por estas mafias.

Recuerda tapar tu webcam, no es una "frikada", nunca sabes quien está grabando, y lo mas importante, se prudente con todo lo que hagas en tu dispositivo, da igual ordenador, tablet o móvil. Se precavido.

Y por último, y esto ya estoy cansado de ayudar, aunque lo seguiré haciendo encantado, vamos a ver como lo digo: HAZ COPIAS DE SEGURIDAD PERIODICAS DE TUS ARCHIVOS VALIOSOS por favor, por tutatis, por belcebú, el disco duro de tu ordenador puede fallar, la tarjeta de memoria de tu móvil se puede estropear, y de repente pierdes esas fotos que ahora te resultan tan valiosas, ese libro que estabas escribiendo. Piénsalo, hoy por hoy un pendrive, un disco duro externo, otra tarjeta de memoria cuestan poco dinero. Pero si no eres metódico en hacer las copias de seguridad, pues no sirve de nada ese dispositivo extra que has comprado. Ayúdate de software que te haga esas copias de seguridad.

Bueno, aquí lo dejo. Volveré.

SaluDOS.