La captura de paquetes del nivel Ethernet en Linux requiere
generalmente privilegios de superusuario. Para permitir a usuarios sin privilegios
de administrador acceder a los paquetes que circulan por la red se ha diseñado
un servidor que redirige las tramas Ethernet a aplicaciones de usuario.
Para acceder al servicio se ha preparado una librería llamada
sockpromis.
El código objeto se encuentra en el fichero
libsockpromis.a
y las declaraciones en
sockpromis.h, que se pueden encontrar
en
/opt3/ro/ficheros/sockpromis/. La librería exporta
las siguientes funciones:
- int sp_recv(void* buf, int len)
Esta función lee una nueva trama del nivel de enlace (con la cabecera
pero sin la cola/trailer). El puntero buf debe hacer referencia
a una zona de memoria de al menos len bytes. Devuelve -1 en caso
de error o de ser interrumpida, si no devuelve el número de bytes
colocados en el buffer.
En paquetes de los protocolos TCP o UDP la sección de datos es sustituida
por ceros por el servidor, manteniendo la longitud original del paquete.
- int sp_defichero(char *nombre)
Esta función le indica a la librería que no obtenga
los paquetes de la tarjeta de red sino que los lea de un fichero. El argumento
es el nombre del fichero con los paquetes. A partir de llamar a esta función
los paquetes que se lean con sp_recv() vendrán del fichero.
Sólo hay que llamar a la función una vez dado que en ese momento
se abre el fichero, si se la llamara más veces, cada vez empezaría
del comienzo del fichero.
El objetivo es que se pueda comprobar el correcto funcionamiento del programa.
Para ello se dispodrá de diversos ficheros con paquetes de la red
y los resultados esperados del programa para.