[extraido de http://informatica.uv.es/it3guia/ARS/Practica-2.pdf]

 

Apéndice B: Filtros en ethereal.

 

En ethereal es posible construir filtros que determinen si un determinado paquetes van a ser o no capturado. En caso de que no se utilice ningún filtro, todos los paquetes son capturados.

 

Los filtros se construyen mediante expresiones que consisten en una o más primitivas. Las primitivas, usualmente, consisten en un identificador (nombre o número), precedidas por uno o más calificadores. Existen tres tipos diferentes de calificadores:

 

De tipo: Identifican un nombre o dirección, sus posibles valores son host, net y port. Por ejemplo, host glup.uv.es, net 147.156, port 20. Si no existe ningún calificador de tipo, se asume que el tipo es host.

 

De dirección: Identifican una dirección particular de transferencia, esto es, un origen o destino. Sus valores posibles son src, dst, src or dst y src and dst. Por ejemplo, src glup.uv.es, dst net 147.156, src or dst port ftp-data. Si no se indica ningún calificador de dirección, se toma el calificador de dirección por defecto (src or dst).

 

De protocolo: Identifican un protocolo particular. Sus valores posibles son ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp y udp. Por ejemplo, ether src glup.uv.es, arp net 147.156, tcp port 21. Si no se especifica ningún protocolo, todos los protocolos que sean consistentes con la identificación de tipo son capturados.

 

Como puede verse por la explicación de los diferentes tipos de calificadores, siempre están presentes, aunque sea por defecto, los tres tipos de calificadores. Así, la expresión ip 147.156.222.65 es equivalente a ip src or dst host 147.156.222.65. Pueden construirse filtros más complejos mediante la combinación de primitivas mediante la utilización de paréntesis y/o las palabras and, or y not., siendo la prioridad de not mayor que la de and y or, cuya prioridad entre si es igual. Así, por ejemplo, host glup.uv.es and not port ftp indica que se capturen todos los paquetes cuyo origen o destino es glup.uv.es excepto aquellos cuyo puerto de origen o destino es el de ftp (puerto 21). Un listado de las primitivas más utilizadas se encuentra en la siguiente tabla:

 

Primitiva y  Descripción

dst host <ordenador>:         Verdad si el campo destino del paquete es el <ordenador>

src host <ordenador>:          Verdad si el campo origen del paquete es el <ordenador>

host <ordenador>:                Verdad si el campo origen o destino del paquete es el <ordenador>

ether dst <ordenador>:        Verdad si la dirección ethernet de destino es el <ordenador>

ether src <ordenador>:        Verdad si la dirección ethernet de origen es el <ordenador>

 

Primitiva y Descripción

ether host <ordenador>:               Verdad si la dirección ethernet de origen o destino es el <ordenador>

gateway <ordenador>:                  Verdad si el paquete utiliza como pasarela (gateway) el <ordenador>

dst net <red>:                                Verdad si la dirección de destino del paquete corresponde a una dirección de la <red>

src net <red>:                                Verdad si la dirección de origen del paquete corresponde a una dirección de la <red>

net <red>:                                       Verdad si las dirección de origen o destino del paquete corresponde a una dirección de la <red>

dst net <red> mask <mascara>:  Verdad si la dirección de destino del paquete corresponde a una dirección de la <red> de máscara <mascara>

src net <red> mask <mascara>:   Verdad si la dirección de origen del paquete corresponde a una dirección de la <red> de máscara <mascara>

net <red> mask <mascara>:        Verdad si las dirección de origen o destino del paquete corresponde a una dirección de la <red> de máscara <mascara>

dst net <red>/<longitud>:            Verdad si la dirección de destino del paquete corresponde a una dirección de la <red> cuya máscara se indica por <longitud>

src net <red>/<longitud>:             Verdad si la dirección de origen del paquete corresponde a una dirección de la <red> cuya máscara se indica por <longitud>

net <red>/<longitud>:                  Verdad si las dirección de origen o destino del paquete corresponde a una dirección de la <red> cuya máscara se indica por <longitud>

dst port <puerto>:(5)                     Verdad si el paquete tiene como destino el puerto dado por <puerto>

src port <puerto>:                          Verdad si el paquete tiene como origen el puerto dado por <puerto>

port <puerto>:                               Verdad si el paquete tiene como origen o destino el puerto dado por <puerto>

less <longitud>:                              Verdad si el paquete tiene una longitud menor o igual que <longitud>

greater <longitud>:                        Verdad si el paquete tiene una longitud mayor o igual que <longitud>

ether broadcast:                             Verdad si el paquete es un paquete ethernet broadcast.

ip broadcast:                                   Verdad si el paquete es un paquete IP broadcast.

ether multicast:                              Verdad si el paquete es un paquete ethernet multicast.

ip multicast:                                    Verdad si el paquete es un paquete IP multicast.

5 Esta expresión y las dos siguientes pueden ir precedidas de tcp o udp, para indicar que solo se desea el

puerto correspondiente al protocolo tcp o udp.

 

Además de las expresiones anteriores, existen expresiones del tipo <expresión 1> <operador> <expresión 2>, donde <operador> es <, >, <=, >=, =, != y <expresión 1> y <expresión 2> son expresiones aritméticas compuestas por constantes enteras (expresadas con la sintaxis de C), los operadores +, -, *, /, &, |, y un acceso especial a los datos del paquete.

 

Para acceder a los datos de un paquete se utiliza la sintaxis protocolo [desplazamiento : tamaño], donde protocolo es uno de los protocolos validos (ether, fddi, tr, ip, arp, rarp, tcp, udp, icmp o ip6), desplazamiento es el desplazamiento, en bytes, desde el comienzo de los datos del protocolo especificado, y tamaño son los bytes a analizar. Así, ip[0] & 0x0F !=5 indica todos los paquetes que contienen opciones IP (campo IHL de valor distinto de 5), mientras que ip[6 : 2] & 0x1FFF = 0 indica solo datagramas no fragmentados o el último fragmento de los datagramas fragmentados.