[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.