Tags

, , , , , , ,

Vamos a ver cómo usar las ventajas de las librerías de pcap en nuestros programas de Windows (C o C++) y no morir en el intento. He estado buscando qué onda con ello porque lo necesito para mi trabajo terminal y me encontré con una pared de datos (la mayoría sin mucho sentido).

Importante!

Algunas funcionalidades de pcap/winpcap en windows se ven limitadas por el manejo que tiene ésta plataforma respecto a los drivers de red; por ejemplo, al abrir un dispositivo de red para captura en windows, la bandera de promiscuidad (que permite capturar TODO el trafico que pasa por la tarjeta) debe ser falsa, de otro modo no se podrá abrir.

Otro punto que recién salió a luz, es que el pcap sobre windows 7 no está probado o siquiera checado, de modo que algunas cosas corren y otras no, nosotros (el equipo del proyecto y yo) no hemos podido compilar un programa que utilice pcap sobre Win7. En cuanto lo logremos por aquí les estaré avisando.

Instalando Winpcap

  1. Primero que nada, necesitamos el driver, así que vamos a http://www.winpcap.org/ y bajamos el driver y bibliotecas (en un .exe de 894KB para la versión 4.1.2)
  2. Lo instalamos… Siguiente, siguiente, … , finalizar
  3. Ahora vamos a http://www.winpcap.org/devel.htm y bajamos las bibliotecas de desarrollo (un zip como de 757KB para la versión 4.1.2)
  4. Descomprimimos la carpeta en algún lugar cómodo, yo lo hice directamente en la raíz de C:/ y me valió gorro.

Configurando el entorno

Lo interesante de hacer las cosas a mano, es que se aprende más. Normalmente programo sin usar ningún IDE, el compilador y un editor de texto plano (Notepad++ o Gedit), no más. Así que para hacer estas cosas, necesitamos moverle a nuestras variables de entorno.

En Windows XP basta con hacer Inicio+Pausa para abrir las propiedades del sistema, ir a “Confuguración Avanzada”, luego a “Variables de Entorno” y ahí, si ya tenemos una variable PATH, habrá que agregar la dirección de la carpeta “Lib” que venia en la carpeta zip de las bibliotecas de desarrollo.

En mi caso, la dirección es: C:\WpdPack\Lib y eso fue lo que agregué al final de mi variable de entorno PATH. para probar que esto jala, tenemos que crear un archivo fuente nuevo (C/C++):

/* pcap_a.cc */
#include <iostream>
#include <pcap.h>

using namespace std;
int main(){
    pcap_if_t *alldevs;
}

Compilamos lo anterior con:

$ g++ pcap_a.cc -lwpcap -o pcap_a

Si todo está correcto, no habrá mayores problemas y compilará exitosamente.

Consideraciones

Hay algunas cosas que por lo menos, yo he aprendido sobre la práctica y aquí van algunos consejos generales:

  1. Siempre pon a pcap hasta abajo de tu bloque de includes. Esto es para que las definiciones y cabeceras de pcap no entren en conflictos con las de c++
  2. Más abajo que pcap, sólo las cabeceras que nosotros hagamos. En mi proyecto tengo 2 cabeceras propias, de modo que hago más o menos lo siguiente:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <pcap.h> //La ultima del bloque de includes, antes de las cabeceras propias
#include "protocols.h" //Hasta abajo incluso de pcap

Extra

Ahora que instale pcap en linux, les cuento cómo estuvo la cosa. Mientras tanto, unos links interesantes sobre pcap:

http://www.codeproject.com/KB/IP/winpcap_basic.aspx

http://www.winpcap.org/docs/docs_412/html/main.html

http://www.winpcap.org/docs/docs_40_2/html/funcs_2pcap_8h.html