sábado, diciembre 20

Wireshark

WireShark


Ethereal ahora conocido como wireshark es una herramienta con interfaz gráfica que se encarga de analizar todo tipo de tráfico que circula por la red, analiza paquetes (sniffers); con el fin de solucionar problemas en la red y un propósito didáctico. Es compatible tanto como para Linux, Solaris, FreeBSD, NetBSD, OpenBSD, Android, y Mac OS X, así como en Microsoft Windows.


Wireshark:
  • Captura los paquetes directamente desde una interfaz de red.
  • Obtiene detalladamente la información del protocolo utilizado en el paquete capturado.
  • Cuenta con la capacidad de importar/exportar los paquetes capturados desde/hacia otros programas.
  • Filtra los paquetes que cumplan con un criterio definido previamente.
  • Realiza la búsqueda de los paquetes que cumplan con un criterio definido previamente.
  • Permite obtener estadísticas.
  • Sus funciones gráficas son muy poderosas ya que identifica mediante el uso de colores los paquetes que cumplen con los filtros establecidos.

Instalación sobre Ubuntu


Instalación por consola

  1. Comprobar que tengamos acceso a Internet.
  2. En el terminal si trabajamos en el entorno gráfico o directamende en el entorno consola ejecutamos el comando sudo apt-get install wireshark; y nos autenticamos.

    .
  3. Elegimos y (yes/si) o n (no) según si queremos continuar con la instalación; en este caso elegimos y.
    .
  4. Esperemos que nuestra instalación concluya y listo, la aplicación esta lista para usarse.
    .
    .
  5. Comprobamos su funcionamiento ejecutando el comando sudo wireshark; es necesario anteponer el comando sudo para que se tenga permiso de acceso a la tarjeta de red, lopback, etc; el el programa empezará a ejecutarse.
    .

Instalación por Ubuntu Software Center

  1. Comprobar el acceso a Internet. 
  2. Esta forma solo es posible si se trabaja dentro del entorno gráfico de ubuntu; abrimos la aplicación Ubuntu Software Center.

  3. En al barra de búsqueda escribimos el nombre de la aplicación wireshark.

    .
  4. El siguiente paso es dar clic en install, y esperar que se instale el programa.

    .
  5. Una vez instalado en ícono  del programa tendrá in visto y esta lista nuestra aplicación para usarse y la opción de remover o desinstalar aparecerá.

    .
  6. Comprobamos su funcionamiento a través del terminal ejecutando el comando sudo wireshark; es necesario anteponer el comando sudo para que se tenga permiso de acceso a la tarjeta de red, lopback, etc; el el programa empezará a ejecutarse.



Interfaces a escuchar


La misma herramienta wireshark, nos la opción de escuchar a varios tipos de interfaces, con la ayuda del botón "list the available capture interfaces" señalado en el recuadro en rojo. el cual nos mostrará la ventana contenida en el centro de la imagen.


La interfaces disponibles son:

eth0.- tarjeta de red ethernet de nombre eth0.
nflog.-  es el registro genérico de espacio de usuario original añadido en Kernel 2.4 para IPv4.

nfqueue.- delega la decisión sobre qué hacer con un paquete de red a un programa que se ejecute en el espacio de usuario.

lo = loopback.- es una interfaz de red virtual, que los hots la emplean para dirigir el tráfico hacia ellos mismos.


Filtrado en Ubuntu


Para realizar un filtrado es necesario ejecutar el programa wireshark desde la consola anteponiendo el comando sudo para poder tener acceso a las distintas interfaces de red como son eht0, loopback, nflog,etc.


A continuación se mostrará la siguiente ventana:


Donde los botones básicamente más importantes son:

Lista de interfaces.- permite elegir rápidamente las interfaces con las cuales trabajaremos, mostrándonos una ventana con una lista rápida.
Opciones de captura.- nos permite elegir y detallar las interfaces con las cuales trabajaremos., aqui podemos especificar el filtrado y sus interfaces mostrándonos una ventana mas completa.
Control de filtrado.- con la ayuda de estos botones podemos iniciar, parar o volver a cargar un filtrado.
Barra de filtrado.- aquí especificamos los parámetros que queremos que contengan las líneas filtradas.

Antes de realizar un filtrado es necesario especificar las interfaces por medio del botón de lista de interfaces, , activando todas los recuadros excepto any; o por medio de del botón opciones de captura, o a través de las mismas opciones pero direccionadas por la barra de menús del programa.





Filtrado de http
En la barra de filtrado digitamos http tomando en cuenta lo mencionado anteriormente y necesariamente para poder evidenciar el filtrado estar conectados a una red, y abrir un navegador web.
.
.
http es un Protocolo de Transferencia de Hipertexto (HyperText Transfer Protocol) es un método de intercambio de información más utilizado en la world wide web, el método mediante el cual se transfieren las páginas web a un ordenador.

Al momento de filtrar http podemos danos cuenta que aparecen varios protocolos de red por ejemplo:
SSDP.- es un protocolo que encuentra de dispositivos UPnP en una red.

Al momento de abrir el navegador web:
SSDP
TCP
DNS.- es un servicio que se encarga de traducir una dirección IP a una dirección web.
TLSv1.2.- es un protocolo criptográfico versión 1.2 que proporciona comunicaciones seguras por una red.




Filtrado de icmp
En la barra de filtrado digitamos icmp tomando en cuenta lo mencionado anteriormente  y necesariamente para poder evidenciar el filtrado hacer ping hacia una máquina o que una máquina nos este enviando paquetes icmp haciendo ping; si se hace ping desde la misma máquina tenemos tomar en cuenta que la interface loopback este activada.


icmp es un Protocolo de Mensajes de Control de Internet (Internet Control Message Protocol) es un sub protocolo de control y notificación de errores de una IP, sin dejar de notar que es una herramienta herramienta ping y traceroute, que envían mensajes de petición echo icmp para determinar si un host está disponible.

Al momento de filtrar htt podemos danos cuenta que aparecen varios protocolos de red por ejemplo:
ICMP
ARP.- es un protocolo de la capa de enlace de datos que se encarga de encontrar la dirección hardware a la cual pertenece una dirección IP determinada.
SSDP.-  es un protocolo que encuentra de dispositivos UPnP en una red.

Dentro del filtrado icmp, como ya conocemos que ping envía datos a otra máquina y esta los devuelve , wireshark nos ayuda a reconocer la la máquina con la dirección IP de origen como la de destino, como en el caso resaltado, la IP origen 192.168.107.138 empieza enviado un paquete de datos icmp a la dirección IP destino 192.168.107.1, después el ordenador con dirección IP 192.168.107.1 recibe los datos y devuelve una respuesta se convierte en origen, y el la IP destino es 192.168.107.138.

Paquete ICMP


Al momento de dar doble clic sobre un paquete ICMP dentro del filtrado podemos obtener sus características y descripción del mismo. Obtenemos lo siguiente:


Tamaño del paquete enviado
Tamaño del paquete receptado

Tarjeta de red origen
Tarjeta de red destino

Dirección IP origen
Dirección IP destino



Referencias:
    UNIVERSIDAD CENTRAL DE VENEZUELA, dirección de tecnología de información y comunicaciones, Manual de WireSshark
    https://www.wireshark.org/
    http://sistemasoperativosepn.blogspot.com/
    http://blog.elevenpaths.com/
    https://www.wireshark.org/docs/wsug_html_chunked/ChCapInterfaceSection.html
    http://unix.stackexchange.com/questions/138135/whats-the-difference-between-ulog-and-nflog
    http://www.masadelante.com/faqs/que-significa-http
    http://www.mastermagazine.info/termino/4930.php


    domingo, noviembre 9

    crontab

    crontab


    Crontab es un archivo de texto que almacena uno o una lista de scripts o comandos a ejecutarse en un tiempo programado por el usuario; crontab se encarga de comparar la fecha y la hora del ordenador con la fecha y hora que se programo para ejecución del script o comandos, cada usuario puede tener su propio archivo crontab; este comando cuenta con 4 editores de texto, para su modificación.


    Estructura: 

         crontab  <opcion>

    Opciones: 

    Para el uso de crontab debemos tener en cuenta las siguientes opciones:

    • - l   Permite visualizar por medio de la consola todos los procesos programados en crontab.
    • - e  Abre un editor de texto el cual nos permitirá crear, agregar o modificar un comando o lista de comandos para programar su ejecución.
    • - r  Permite eliminar que el proceso actual de crontab.

    Programación de una tarea:


    Para programar una tarea es necesario ejecutar el comando crontab con la opción -e para crear nuestra orden en un editor de texto.




    En este caso como es la primera vez que utlizamos esta aplicacíon vamos a utilizar el editor de texto que nos recomienda el /bin/nano, entonces elegimos la opción 2.





    A continuación se abre el editor de texto /bin/nano:



    Una vez en el editor de texto tenemos que configurar el tiempo de ejecución de los comandos o scripts de la siguiente manera, con referencia a la siguiente estructura.


    Estructura dentro del editor de texto: 

    <mm> <hh> <dd> <mm> <wd> <comando_o_direccion_de comando>
    • mm   se especifican los minutos del 00 al 59.
    • hh     se delimita la hora desde 00 hasta 23.
    • dd     se establecen el día del mes del 01 al 31.
    • mm   se detalla el mes del 01 (enero)  al 12 (diciembre).
    • wd    se establece el día de la semana del 1 (lunes) al 7 (domingo).
    • comando_o_direccion_de comando   se específica el archivo con el conjunto de ordenes que se desea ejecutar en cierto tiempo ya especificado.

    Símbolos auxiliares:


    • -   Se lo utiliza para establecer intervalos ya sen minutos, horas, días del mes o la semana,
    • ,   Se la utiliza para detallar los días, meses o días de la semana específicos.
    • *  Se lo emplea para no especificar dicha opción.


    Ejemplo:

    31 10 3-4 * 7,5 echo "ejemplo" >> newfile


    Entonces estamos diciendo que: los domingos (7) y viernes (5), de cualquier mes (*), los días del 3 al 4, a las 10 de la mañana, con 31 minutos se ejecuta el comando echo cuyo resultado lo direcciona al archivo newfile.


    APLICACIÓN


    Crear un script que se ejecute todos los días lunes a las 7 de la mañana; el script debe crear una copia de respaldo del directorio /etc que contenga todos sus archivos de configuración, la carpeta de respaldo debe tener por nombre etc.backup.

    a. Creamos y probamos el funcionamiento de nuestro script que realice las acciones pedidas.

    1. Utilizamos el editor de texto vim y a nuestro script lo nombramos script2.sh, con el comando: vim script2.sh

    2. Escribimos nuestro código por medio de comandos que realice la orden pedida.



    3. Una ves terminado cerramos y guardamos el vim con nuestro código con :wq, y ejecutamos nuestro archivo para verificar su funcionamiento, como estamos copiando un directorio necesitamos anteponer el comando sudo:  sudo sh script2.sh




    4. El comando se ejecuto correctamente:


    5. Comprobamos la tarea del comando: ls -l


    b. Necesitamos que nuestro script se ejecute desde cualquier parte para esto lo copiamos al directorio /bin del directorio raíz, con el comando: sudo cp /home/dario/script2.sh /bin (anteponemos sudo porque estamos trabajando con un directorio root).



    c. Como vamos a copiar un directorio del directorio raíz, es necesario anteponer el comando sudo, para lograr la ejecución de nuestro script, pero 
    para no tener que loggear la contraseña en la ejecución programada le otorgamos permisos de super-usuario, con el comando sudo chmod u+s script2.sh.
    Script con permisos de ejecución. lectura y escritura.


    Comando, para el permiso de super-usuario:


    Script con el permiso de super-usuario.


    d. Ya creado nuestro script, vamos a lograr que su ejecución de forma automática. Ejecutamos el comando crontab -e  para abrir nuestro editor de texto, y especificamos el tiempo en que se ejecute nuestro script.

    Abrimos el editor de texto de crontab:




    Especificamos el tiempo: 00 7 * *  1 sudo script2.sh . El sript  por nombre script2.sh se ejecutara los días lunes a las 7 de la mañana de cualquier mes, cualquiera que sea el día. Para salir tecleamos Ctrl + X, y luego pulsamos Y para guardar los cambios y damos enter si estamos de acuerdo con el nombre.


    e. Listo el día lunes en nuestra carpeta home de usuario tendremos al siguiente carpeta de respaldo:




    Referencias:

    http://blog.desdelinux.net/cron-crontab-explicados/
    http://linux.die.net/man/5/crontab
    https://help.ubuntu.com/community/CronHowto
    http://www.youtube.com/watch?v=UlVqobmcPuM

    domingo, noviembre 2

    PATH

    Variable PATH

    PATH es una variable de entorno, para comprender mejor es donde se van a almacenar las direcciones de los archivos ejecutables de los comandos y ejecutables que queramos añadir; cuando ejecutamos un comando directamente en la consola desde cualquier ruta estamos invocando un archivo ya compilado anteriormente, y se va a buscar a este archivo ejecutable en todas las rutas guardadas en la variable PATH.


    Modificación temporal de la variable PATH

    Podemos decir modificación temporal de la variable PATH, en realidad nos referimos a agregar una nueva ruta de búsqueda de archivos ejecutables, y además este cambio de nuestra variable permanecerá mientras no apague o reinicie el ordenador.
    Para esto previamente debemos crear un archivo ejecutable en este caso es ejectbl y se encuentra en el directorio home de usuario.

    Comprobamos la existencia de nuestro archivo ejecutable ejectbl de nuestro programa scripthola.c creados previamente.



    Revisamos las rutas de búsqueda del PATH; con el comando: echo $PATH$ como prefijo de la variable podemos imprimir el contenido de la variable.



    Notamos que no esta dentro de las rutas, la dirección de nuestro ejecutable ejectbl, es necesario añadir la dirección /home/dario/ejectbl al PATH, esto lo logramos con el comando:
    export PATH=$PATH:/home/dario/ejectbl.



    Comprobamos que se agrego la ruta: echo $PATH



    Listo podemos ejecutar el comando desde cualquier directorio  o ruta que estemos actualmente por ejemplo: desde la raiz /, desde el directorio home /home, o desde la capeta Music /home/dario/music.


    En este ejercicio trabajamos con rutas absolutas, así que no importa donde nos encontremos, pero en este caso lo hicimos desde el directorio raíz.


    Modificación permanente de la variable PATH

    Para modificar de forma permanente es necesario trabajar con ~/.bashrc y modificarlo.

    ~/.bashrc

    ~ .-significa la ruta al directorio personal (del usuario); contiene lo mismo que la variable $HOME.

    .bashrc .- es un fichero de texto, contiene la configuración de nuestro terminal, que es donde podemos interactuar por medio de texto con nuestra computadora, en una interfaz no gráfica, lee y ejecuta comandos desde ~/.bashrc, podemos en este cualquier orden de la linea de comandos; se encuentra en en el directorio home de usuario como archivo oculto (por eso lleva el punto ante del nombre).
    Para poder visualizarlo podemos hacerlo  mediante le comando: ls -a dentro del directorio home de usuario.



    Para concluir con la modificación realizamos lo siguiente:

    Revisamos las rutas de búsqueda del PATH; con el comando: echo $PATH.



    Introducimos el comando para modificar de forma permanente ~/.bashrc:
    echo 'export PATH=$PATH:/home/dario/eject' >> /home/dario/.bashrc.



    Comprobamos que se agrego la ruta: echo $PATH



    Listo podemos ejecutar el comando desde cualquier directorio  o ruta que estemos actualmente por ejemplo: desde la raiz /, desde el directorio home /home, o desde la capeta Music /home/dario/music.



    Glosario:
    echo .- muestra un mensaje por pantalla.

    .   .- el punto antes del nombre de un archivo permite mantenerlo como oculto.

    ls -a  .- lista todos los archivos, incluidos los ocultos y los del sistema

    Variables de entorno.- variables de entorno son unos valores, etiquetados con un nombre ne amyúsculas. 
    • Usarlos para escribir menos, o tener valores fijos. Si no entiendes esto, probablemente no te sirva. Tampoco es que se utilicen mucho.
    • Variables que consulten otros programas. Esto es importante, y estas variables, para que las vean otros programas, tenemos que exportarlas (lo explico luego).
    • Variables para consultar, que generalmente no se modifican. Por ejemplo, dan información sobre el directorio raíz del usuario.


      Referencias:
        http://blockdeubuntu.blogspot.com/2009/01/cmo-modificar-la-variable-path.html

        http://elpuig.xeill.net/Members/rborrell/articles/los-archivos-bashrc-bash_profile-etc-bashrc-etc-profile-los-archivos-bashrc-bash_profile-etc-bashrc-etc-profile-cual-utilizar

        http://sistemasoperativosepn.blogspot.com/2014/11/path.html?showComment=1414964445368#c4234272832250407468

        http://www.guia-ubuntu.com/?title=Comandos

        jueves, octubre 16

        Raspberry Pi

        Raspberry Pi


        Fue creado por la Fundación Raspberry Pi, con el único objetivo de incentivar el aprendizaje de las ciencias de computación, ya que es un ordenador competo reducido a una placa única, y de bajo costo; es muy pequeño y portátil solo soporta sistemas operativos livianos, para el cual se han desarrollado por Linux ARM sus distintas distribuciones como Debian, Fedora,Arch Linux, RISC OS2 y tiene su propio sistema operativo.





        Existen dos modelos de Rasperry Pi, el modelo A (mas básico), y el modelo B que es mas completo, cuyas diferencias radican más en los sockets de entrada y de salida, el costo y el consumo de energía, por ejemplo el modelo B tiene una ranura de USB adicional y tarjeta de red. Podemos observar en la figura de la derecha que se trata del modelo B, y de su "disco duro" en este caso una memoria SD como medio de almacenamiento permanente; haremos el análisis o descripción de su arquitectura del modelo B porque estructuralmente son muy similares.


        Componentes externos


        Antes del análisis es muy importante observar y reconocer los componentes externos generales de nuestro dispositivo, aunque es un modelo genérico de un ordenador.




        Arquitectura de Raspberry Pi



        Un computador es un sistema secuencial síncrono complejo que procesa la información, que esta representada en forma binaria para lo cual solo utiliza ceros "0" y unos "1",estos son valores lógicos que corresponden con valores de tensión eléctrica, de manera que un ‘1’ lógico (si o verdadero) corresponde a un nivel alto a 5 voltios y un ‘0’ lógico (no o falso) corresponde a un nivel bajo de tensión cercano a 0 voltios; la variación de los voltajes dependen de la capacidad de los componentes del computador.
        La arquitectura de un ordenador en este caso Raspberry Pi, nos ayuda a comprender la ubicación componentes y permite determinar la capacidad de un sistema informático, para emplear su uso. La arquitectura básica de cualquier ordenador completo está formado por 5 componentes básicos: procesador, memoria RAM, disco duro, dispositivos de entrada/salida y software.


        Unidad Central de Procesamiento UPC o CPU


        Este segmento del ordenador se encarga del funcionamiento de los elementos de un computador. Desde que el sistema es alimentado por una corriente, hasta que se corta dicha alimentación,  no para de procesar la información; es la parte más importante del procesador, ya que es utilizado para realizar todas las operaciones y cálculos del computador, posee su propia estructura de este modo:

        Unidad de Control (UC): aquí se lee de la memoria las instrucciones que deben ser ejecutadas y secuenciadas, el acceso a datos y operaciones a realizar por la unidad de proceso; también se generan señales de control que forman un flujo de datos.

        Unidad Aritmética Lógica o ALU (Arithmetic Logic Unit): aquí se realizan las transformaciones  de datos, consta de una serie de módulos que realizan operaciones aritméticas y lógicas.

        Registros Internos: aquí se almacenan los resultados de la ejecución de las instrucciones en la  tarjeta SD que hace las veces de disco duro o memoria de interface.



        La UC se encarga de seleccionar la operación a realizar habilitando los caminos de datos entre los diversos operadores de la ALU y entre los Registro Internos.


        Memoria RAM


        En la memoria se almacena el programa y los datos que va a ejecutar el CPU, cuyas instrucciones son códigos binarios (lenguaje de máquina) que solo son interpretados por la unidad de control; estos datos siempre están de forma binaria almacenados en el ordenador.
        Una memoria RAM, eficiente depende del tiempo de acceso a los datos, mientras este sea menor es mas eficaz; por tanto lo mas lógico es hacer un diseño jerárquico de la distribución memoria.


        La memoria principal se la considera como un vector o una matriz de celdas; esta matriz está organizada por palabras, cada una de las cuales tiene asignada una dirección, a este direccionamiento de celdas se lo representa por el sistema hexadecimal, que indica su posición. Cada palabra está formada por una serie de celdas a las que se accede en paralelo; en cada una se almacena un bit y estos definen las instrucciones.


        Entrada / Salida


        Nuestro computador tiene dispositivos de entrada y salida para poder interactuar con el usuario, ya que estos componentes son externos y de distinta tecnología necesitan su propio entorno de funcionamiento por lo que es necesario, que esta interfaz decodifique el bus de direcciones para poder detectar que el CPU se dirige a él, este proceso se asemeja al de las memorias. 

        El bus de datos se utiliza para el paso de datos entre el periférico y la memoria. Las líneas especiales de control sirven para coordinar y sincronizar la transferencia.


        Sistema de Interconexión: Buses


        Para poder lograr las conexiones de distintos componentes del ordenador como discos duros, tarjetas madres, unidades de CD, teclados, ratones, cámaras, etc. se efectúan a través de los buses. Un bus es conocido como el enlace de comunicación compartido, compuesto de varios cables para conectar subsistemas, estos pueden ser:

        Buses de datos: transmiten datos entre los diferentes elementos del computador.
        Buses de Direcciones: indican la posición del dato que se requiere acceder.
        Bus de Control: seleccionan al emisor y al receptor en una transacción del bus.
        Bus de alimentación: proporcionan a los dispositivos  voltajes distintos.


        En este caso como el ordenador es tan solo una placa yo considere los buses como las ranuras de conexión, los caminos internos de la placa.


        Periféricos


        Son considerados todos los dispositivos que son necesarios para suministrar datos a la computadora o visualizar los resultados, entre los periféricos de entrada tenemos al teclado, ratones, pantallas, digitalizadoras, terminales de video y las tarjetas gráficas; los periféricos se conectan mediante un bus especial a su controlador o al modulo de E/S.



        Glosario:
        síncrono.- en un sistema de comunicación, el transmisor debe coordinarse con el receptor antes del envío de datos. Con frecuencia, la sincronización se maneja haciendo que el hardware transmisor envíe un pulso regular al no haber datos disponibles. El receptor usa los pulsos para determinar el comienzo y fin de los bits. Son procesos síncronos los que dependen de un acontecimiento externo que los dispara.

        Referencias:
        https://www.youtube.com/watch?v=udby3yaR1o8
        http://cpc.farnell.com/jsp/bespoke/bespoke2.jsp?bespokepage=cpc/en_CC/special_offers/bargains/part_detail/RPi_infoLP.jsp
        http://www.frro.utn.edu.ar/repositorio/catedras/electrica/2_anio/fundamentos_informatica/apuntes/arquitectura/Tema1.pdf
        http://www.raspberryshop.es/
        http://es.wikipedia.org/wiki/Raspberry_Pi
        https://www.youtube.com/watch?v=Btr_jJA1S5w
        http://148.204.211.134/polilibros/portal/Polilibros/P_Terminados/PolilibroFC/Unidad_II/Unidad%20II_5.htm