Beispiel #1
0
int main(int argc, char **argv) { 

    char *dev = NULL; 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    pcap_t *descr;
    
    memset(&descr, 0, sizeof(descr)); 
    const u_char *packet = NULL;

    struct ether_header *eptr; /* net/ethernet.h */
    memset(&eptr, 0, sizeof(eptr));

    struct bpf_program fp;     /*выражение фильтрации в составленном виде */ 
    memset(&fp, 0, sizeof(fp));

    bpf_u_int32 maskp = 0;         /*маска подсети */ 
    bpf_u_int32 netp = 0;          /* ip */ 

    if (argc != 2) {

        fprintf(stdout, "Usage: %s \"expression\"\n", argv[0]); //Если кол-во аргументов <> 2, показываем пользователю, как работать с программой
        exit(0);

    } 

    /* Получение имени сетевого адаптера */
    dev = Pcap_lookupdev(errbuf); //Все функции-обертки для этого задания см. в файле unp.h (line 245+)

    /* Получение ip и маски сети для выбранного адаптера */ 
    Pcap_lookupnet(dev, &netp, &maskp, errbuf); 

    /* Открытие устройства в promiscuous-режиме (требуются права администратора) */ 
    descr = Pcap_open_live(dev, BUFSIZ, 1,-1, errbuf);

    printf("DEVICE: %s \n", dev);

    /* Собираем фильтр */ 
    Pcap_compile(descr, &fp, argv[1], 0, netp);

    /* Применяем фильтр*/ 
    Pcap_setfilter(descr, &fp);

    /* Обратный вызов */ 
    Pcap_loop(descr, -1, callback, NULL);

    pcap_close(descr);

    return 0; 

}
Beispiel #2
0
int main()
{
    int count = 0;
    char *device = NULL;
	pcap_t *descr = NULL;

	/*获取第一个适合捕获的网络设备名称*/
	device = Pcap_lookupdev();
	printf("Opening device %s\n", device);

	/*以混杂模式打开网络设备*/
	descr = Pcap_open_live(device, MAXBYTES2CAPTURE, 1, 512);

	/*死循环并在每一次接收到数据包时调用回调函数processPacket()*/
	pcap_loop(descr, -1, processPacket, (u_char *)&count);

	return 0;
}