Librería para captura de paquetes sockpromis

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:
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.
Programa ejemplo:

Fichero /opt3/ro/ficheros/sockpromis/ejemplos/ejemplo1.c:



#include <stdio.h>
#include "
/opt3/ro/ficheros/sockpromis/include/sockpromis.h"

print_packet(char * buf, int tam)
{
   int    i;
   
   for (i=0;(i<tam)&&(i<80);i++)
      printf("%x ", buf[i]&0xff);
   printf("\n");
}

main()
{
   int    s;
   char    buf[3000];
   int    tam;
   
    for (s=0;s<10;s++)
    {
       tam=sp_recv(buf, 3000);
       if (tam==-1) exit(-1);
   
       print_packet(buf,tam);
    }
}


Compilación:

[]% gcc /opt3/ro/ficheros/sockpromis/ejemplos/ejemplo1.c  /opt3/ro/ficheros/sockpromis/lib/libsockpromis.a -o ejemplo_sockpromis