Fundamentos de Linux, Redes y Programación AWK

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,49 KB

Práctica 1. Introducción a Linux

Comandos básicos de Linux

  • pwd: muestra el directorio actual de trabajo.
  • ls: lista el contenido del documento actual. Si se pasa el argumento "-l", muestra información extendida.
  • chmod: cambia los permisos de un fichero.
    • Ejemplo: chmod 777 fichero.c → Establecería el fichero con permisos rwxrwxrwx (dueño, grupo y otros).
  • cd: cambia de directorio.
  • mkdir: crea un directorio.
  • mv: mueve ficheros.
  • rm: elimina directorios.
  • cat/more: muestra el contenido de un fichero por la salida estándar.
  • cp: copia ficheros y directorios.
  • ps: lista los procesos activos del sistema operativo.
  • kill: mata un proceso dada su PID.

Pipes y redirecciones

  • proceso1 | proceso2: redirecciona la salida del proceso1 a la entrada de proceso2.
  • proceso1 > fichero: redirecciona la salida del proceso1 y escribe su resultado en un fichero.

Práctica 2. Servicios de Aplicación

Algoritmo de codificación UUE

  • Los bytes del fichero binario se cogen y se procesan siempre en grupos de 3 en 3 bytes (nunca puede ser otro número).
  • De cada grupo de 3 bytes se extraen cuatro grupos de 6 bits de forma ordenada, de izquierda a derecha, desde el primer hasta el tercer byte.
  • A cada grupo de 6 bits se le añaden dos bits "0" y se crea un nuevo byte (el grupo de 6 bits se empaqueta "a la derecha" del byte). De cada nuevo byte se tiene un carácter ASCII.
  • Los caracteres ASCII definitivos tienen que estar comprendidos entre los caracteres ASCII permitidos. A cada byte anterior se le suma 32. De este modo se consigue que el valor de todos los caracteres generados esté comprendido en el margen 32-96. Si el byte es 0x00, se usa directamente el carácter ASCII 0x96 (`). Esto debe tenerse en cuenta al decodificar.

Uso del algoritmo en el correo electrónico

Al codificar un fichero binario para enviarlo por correo, se obtiene algo similar a esto:

begin nombreFichero.ext
M

El resultado está formado por una cabecera (begin + nombre del archivo), el tráiler (una sola línea formada por "end" que indica el final del fichero), y las líneas que transmiten información, cuyo primer carácter (contador de octetos) indica el número de bytes originales codificados en dicha línea, sumado en 32 unidades para hacerlo compatible con ASCII.

Algoritmo de decodificación UUE

  • Se van cogiendo grupos de 4 caracteres.
  • Se resta 32 a cada carácter.
  • Se eliminan los dos ceros iniciales de cada grupo.
  • Se agrupan los bits en 3 grupos de 8 bits, donde cada grupo se corresponde a un byte de la secuencia original.

Práctica 3. Conmutación Store & Forward

Conmutación de mensajes

En la conmutación de mensajes, al mensaje m se le añade siempre una cabecera H y el conjunto se envía al mismo tiempo formando un único bloque de bytes.

Conmutación de paquetes

En la conmutación de paquetes, al mensaje m se divide en varios paquetes de tamaño p. A cada paquete se le añade siempre una cabecera H y cada conjunto cabecera-paquete H+p se envía secuencialmente formando bloques de bytes más pequeños.

Conmutación de paquetes de longitud fija

Práctica 4. El lenguaje de programación AWK

Ejecución de AWK

awk -F, -f fichero.awk captura.txt
  • -F: indica el separador de campos, en este caso, comas.
  • -f: fichero con el código AWK a ejecutar.

Variables internas

  • $0 representa toda la fila actual.
  • $1 representa el valor de la columna 1 de la fila actual.
  • $n representa el valor de la columna n de la fila actual.

Ejemplos

Ejemplo 1

($8=="ICMP") { //Acción con patrón, se ejecuta solo para las líneas que cumplen la condición
    print "Resultados del patrón ICMP";
    print "el número de línea es: ",NR;
    print "captura numero: ",$1;
}

Ejemplo 2

/ARP/ //Patrón sin acción, muestra las filas que coinciden
{ //Acción sin patrón, se ejecuta para todas las líneas
    contador=contador+1;
    print "Estamos en la línea ", contador;
}

Ejemplo 3

{t_final = $2} 
($8 != "ICMP" ) {contador= contador - 1} 
BEGIN { //Acción que se ejecuta al comienzo de un archivo, antes de procesar ninguna línea
    print "Comienza ejemplo 6"; 
    contador=8; # Inicio variable contador a 8
} 
END { //Acción que se ejecuta al final del archivo, una vez procesadas todas las líneas
    print "Numero tramas capturadas: " NR; 
    print "Instante de captura de la última trama:", t_final
}

Ejemplo 4

{  protocolo[$4] = protocolo[$4] + 1;  } 
END {
    for (nombre_protocolo in protocolo) {
        if(nombre_protocolo!="ARP")
            print nombre_protocolo, protocolo[nombre_protocolo]
    }
}

Entradas relacionadas: