lcrzo_sniff(3)

NAME
lcrzo_sniff - bibliotheque lcrzo : sniffing (interception de paquets)

CONTENU
/*    Bibliotheque reseau de Laurent Constantin (lcrzo)
                 Module lcrzo_sniff
  Les fonctions presentes dans ce module permettent de sniffer
  le reseau.
*/
/*-------------------------------------------------------------*/
/* definition d'un lcrzo_sniff. Vous ne devriez pas utiliser
   directement ses champs. */
typedef struct
{ void *ppcapt;
  lcrzo_list seenippackets;
  lcrzo_list waitingippackets;
  lcrzo_list seentcppackets;
  lcrzo_list waitingtcppackets;
  lcrzo_uint16 para_ipreastimeout1;
  lcrzo_uint16 para_ipreastimeout2;
  lcrzo_uint16 para_tcpreortimeout1;
  lcrzo_uint16 para_tcpreortimeout2;
  lcrzo_int32 linktype;
  lcrzo_int16 snifftype;
  lcrzo_bool dataend;
  lcrzo_data storeddata;
  lcrzo_int32 storeddatasize;
  int pcapfd;
} lcrzo_sniff;
/*-------------------------------------------------------------*/
/***************************************************************
 * Note sur les filtres de sniff :                             *
 * Les filtres permettent de selectionner les paquets que l'on *
 * accepte de sniffer                                          *
 * Les elements de base d'un filtre bpf sont de la forme :     *
 *    host 1.2.3.4                                             *
 *    net 192.168.10                                           *
 *    net 192.168.10.0 mask 255.255.255.0                      *
 *    net 192.168.10.0/24                                      *
 *    port 21                                                  *
 *    dst host 1.2.3.4                                         *
 *    src port 2345                                            *
 *    ether host a:b:c:d:e:f ("ether a:b:c:d:e:f" marche pas)  *
 *    ether src aa:bb:cc:dd:ee:ff                              *
 *    ip                                                       *
 *    arp                                                      *
 *    rarp                                                     *
 *    tcp                                                      *
 *    icmp                                                     *
 *    udp                                                      *
 * Un filtre complet est donc par exemple :                    *
 *    host 1.2.3.4                                             *
 *    net 192.168 and icmp                                     *
 *    host 1.2.3.4 or dst port 80                              *
 *    (udp or tcp) and not host 1.2.3.4                        *
 ***************************************************************/
/*-------------------------------------------------------------*/
/***************************************************************
 * Note sur LCRZO_SNIFF_TYPE_xx :                              *
 * Les fonctions de sniff peuvent retourner differents types   *
 * de paquets :                                                *
 *   LCRZO_SNIFF_TYPE_NORMAL :                                 *
 *    - retourne tous les paquets comme ils transitent sur le  *
 *      reseau                                                 *
 *   LCRZO_SNIFF_TYPE_IPREAS :                                 *
 *    - reassemble les paquets IP fragmentes                   *
 *    - supprime les paquets IP en double                      *
 *    - ne fait rien avec les autres paquets                   *
 *   LCRZO_SNIFF_TYPE_TCPREOR :                                *
 *    - reassemble les paquets IP fragmentes                   *
 *    - supprime les paquets IP en double                      *
 *    - ne fait rien avec les autres paquets                   *
 *    - reordonne les sequences TCP                            *
 ***************************************************************/
#define LCRZO_SNIFF_TYPE_NORMAL  1
#define LCRZO_SNIFF_TYPE_IPREAS  2
#define LCRZO_SNIFF_TYPE_TCPREOR 3
/*-------------------------------------------------------------*/
/* Nom : lcrzo_sniff_init
   Description :
     Initialise un lcrzo_sniff.
   Parametre(s) d'entree :
     device : device ou l'on sniffe
     maxsniffedsize : taille maximale des donnees sniffees
     snifftype : type de sniff (cf. le cadre ci-dessus)
     filter : filtre de sniff ("" pour tout sniffer)
   Parametre(s) d'entree-sortie :
   Parametre(s) de sortie :
     *psniff : lcrzo_sniff initialise
   Valeurs de retour normales :
     LCRZO_ERR_OK : ok
*/
int lcrzo_sniff_init(lcrzo_constdevice device,
		     lcrzo_int32 maxsniffedsize,
		     lcrzo_int16 snifftype,
		     lcrzo_conststring filter,
		     lcrzo_sniff *psniff);
/* Nom : lcrzo_sniff_close
   Description :
     Ferme un lcrzo_sniff.
   Parametre(s) d'entree :
   Parametre(s) d'entree-sortie :
     *psniff : lcrzo_sniff a fermer
   Parametre(s) de sortie :
   Valeurs de retour normales :
     LCRZO_ERR_OK : ok
*/
int lcrzo_sniff_close(lcrzo_sniff *psniff);
/* Nom : lcrzo_sniff_nextm
   Description :
     Sniffe un paquet.
   Parametre(s) d'entree :
     *pmaxwaitingtime : temps maximum d'attente (peut etre un
                        lcrzo_time, LCRZO_WAIT_NODELAY ou
                        LCRZO_WAIT_INFINITE)
   Parametre(s) d'entree-sortie :
   Parametre(s) de sortie :
     *pdataout : pointeur qui sera alloue (la memoire
                 devra etre liberee par l'utilisateur
                 avec 'free(*pdataout)').
                 Cette memoire allouee recevra les donnees lues
     *pdataoutsize : taille atteinte par dataout
   Valeurs de retour normales :
     LCRZO_ERR_OK : ok
     LCRZO_ERR_OKTEMPDATAEND : la fonction n'a pas recu de donnees
                               avant pmaxwaitingtime, donc on
                               retourne sans donnees.
*/
int lcrzo_sniff_nextm(lcrzo_sniff *psniff,
 		      lcrzo_time *pmaxwaitingtime,
		      lcrzo_data *pdataout,
		      lcrzo_int32 *pdataoutsize);
/*-------------------------------------------------------------*/
/* Nom : lcrzo_sniff_loop
   Description :
     Appelle une fonction chaque paquet sniffe.
   Parametre(s) d'entree :
     device : device ou l'on sniffe
     maxsniffedsize : taille maximale des donnees sniffees
     filter : filtre de sniff ("" pour tout sniffer)
     beblocking : si on veut bloquer jusqu'a recevoir des donnees
     snifftype : type de sniff (cf. le cadre ci-dessus)
     pfunc : adresse memoire de la fonction appelee pour chaque
             paquet sniffe. Lors de chaque appel, le
	     premier/second parametre ('data', 'datasize') est
             affecte avec le paquet sniffe, et le troisieme
             parametre ('pinfos') est affecte avec la valeur
             de pinfos ci-dessous.
   Parametre(s) d'entree-sortie :
     pinfos : parametre optionnel (peut mettre NULL) qui sera
              passe en deuxieme parametre de pfunc. Il peut
              servir a envoyer des informations a pfunc.
   Parametre(s) de sortie :
   Valeurs de retour normales :
     LCRZO_ERR_OK : ok
*/
int lcrzo_sniff_loop(lcrzo_constdevice device,
		     lcrzo_int32 maxsniffedsize,
		     lcrzo_int16 snifftype,
		     lcrzo_conststring filter,
		     lcrzo_time *pmaxwaitingtime,
		     int (*pfunc)(lcrzo_constdata data,
				  lcrzo_int32 datasize,
				  void *pinfos),
		     void *pinfos);
/*-------------------------------------------------------------*/
/***************************************************************
 * Note sur les fonctions suivantes :                          *
 * Les valeurs par defaut sont correctes pour la majorite des  *
 * applications.                                               *
 * Vous ne devriez modifier les parametres que si vous savez   *
 * ce que vous faites.                                         *
 ***************************************************************/
/* avec LCRZO_SNIFF_TYPE_IPREAS, duree durant laquelle
   les paquets vus doivent etre gardes */
int lcrzo_sniff_set_ipreas1timeout(lcrzo_sniff *psniff,
				   lcrzo_uint16 timeout);
int lcrzo_sniff_get_ipreas1timeout(lcrzo_sniff *psniff,
				   lcrzo_uint16 *ptimeout);
/* avec LCRZO_SNIFF_TYPE_IPREAS, duree durant laquelle
   les paquets en attente de traitement doivent etre gardes */
int lcrzo_sniff_set_ipreas2timeout(lcrzo_sniff *psniff,
				   lcrzo_uint16 timeout);
int lcrzo_sniff_get_ipreas2timeout(lcrzo_sniff *psniff,
				   lcrzo_uint16 *ptimeout);
/* avec LCRZO_SNIFF_TYPE_TCPREOR, duree durant laquelle
   les paquets vus doivent etre gardes */
int lcrzo_sniff_set_tcpreor1timeout(lcrzo_sniff *psniff,
				    lcrzo_uint16 timeout);
int lcrzo_sniff_get_tcpreor1timeout(lcrzo_sniff *psniff,
				    lcrzo_uint16 *ptimeout);
/* avec LCRZO_SNIFF_TYPE_TCPREOR, duree durant laquelle
   les paquets en attente de traitement doivent etre gardes */
int lcrzo_sniff_set_tcpreor2timeout(lcrzo_sniff *psniff,
				    lcrzo_uint16 timeout);
int lcrzo_sniff_get_tcpreor2timeout(lcrzo_sniff *psniff,
				    lcrzo_uint16 *ptimeout);

VOIR AUSSI
lcrzo(3), lcrzo_types(3), lcrzo_data(3), lcrzo_string(3), lcrzo_time(3), lcrzo_file(3), lcrzo_address(3), lcrzo_device(3), lcrzo_list(3), lcrzo_process(3), lcrzo_ipc(3), lcrzo_header(3), lcrzo_ipopt(3), lcrzo_tcpopt(3), lcrzo_packet(3), lcrzo_icmp(3), lcrzo_print(3), lcrzo_record(3), lcrzo_conf(3), lcrzo_spoof(3), lcrzo_sniff(3), lcrzo_sock(3), lcrzo_wait(3), lcrzo_global(3), lcrzo_error(3) lcrzo_misc(3),