pcap_despacho Subroutine

Propósito

Coleta e processa pacotes.

Biblioteca

Biblioteca pcap (libpcap.a)

Sintaxe

#include <pcap.h>

int pcap_dispatch(pcap_t * p, int  cnt, pcap_handler  callback,
   u_char *
user);

Descrição

O subroutine pcap_despacho lê e processa pacotes. Este subroutine pode ser chamado para ler e processar pacotes que são armazenados em um arquivo de dados de captura de pacotes previamente salvos, conhecido como savefile. A subroutine também pode ler e processar pacotes que estão sendo capturados ao vivo.

Observe que o terceiro parâmetro, callback, é do tipo pcap_handler. Este é um ponteiro para uma subroutinha fornecida pelo usuário com três parâmetros. Defina esta subroutinha fornecida pelo usuário da seguinte forma:

   void user_routine(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata)

O parâmetro, user, é o parâmetro user que é passado para a subroutine pcap_despacho . O parâmetro, phdr, é um ponteiro para a estrutura pcap_pkthdr que anteceda cada pacote no savefile. O parâmetro, pdata, aponta para os dados do pacote. Isso permite que os usuários definam o seu próprio manuseio de dados de captura de pacotes.

Parâmetros

Item Descrição
callback Aponta para uma rotina fornecida pelo usuário que será chamada para cada pacote lido. O usuário é responsável por fornecer um ponteiro válido, e que resultados imprevisíveis podem ocorrer se um ponteiro inválido for fornecido.
Nota: A subroutine pcap_dump também pode ser especificada como o parâmetro callback . Se isso for feito, a subroutine pcap_dump_open deve ser chamada primeiro. O ponteiro para a estruturação pcap_dumper_t retornado da subroutine pcap_dump_open deve ser usado como o parâmetro user para a subroutine pcap_despacho . O fragmento do programa a seguir ilustra este uso:
pcap_dumper_t *pd
pcap_t * p;
int rc = 0;

pd = pcap_dump_open(p, "/tmp/savefile");

rc = pcap_dispatch(p, 0 , pcap_dump, (u_char *) pd);
Cnt Especifica o número máximo de pacotes a processar antes de retornar. Um cnt de -1 processa todos os pacotes recebidos em um buffer. Um cnt de 0 processa todos os pacotes até que ocorra um erro, EOF é atingido, ou o tempo de leitura fora (ao fazer leituras ao vivo e um tempo limite de leitura diferente de zero é especificado).
P Aponta para um descritor de captura de pacotes retornado a partir do pcap_open_offline ou da subroutina pcap_open_live . Isto será usado para armazenar dados de pacotes que são lidos em.
Usuário Especifica o primeiro argumento a passar para a rotina callback .

Valores De Retorno

Após a conclusão bem-sucedida, a subroutine pcap_despacho retorna o número de pacotes lidos. Se EOF for alcançado em um savefile, zero é retornado. Se a sub-rotina pcap_dispatch não for bem-sucedida, -1 será retornado. Neste caso, o subroutine pcap_geterr ou pcap_perror pode ser usado para obter o texto de erro.