Se me ha ido un punto, no he mostrado la cabecera Ethernet, comencemos con un resumen de esta y luego su código, la cabecera Ethernet es la primera en ser empaquetada después viene la cabecera ARP que ya fue explicada, la cabecera Ethernet esta compuesta por 3 campo:
- Dirección mac destino: (6 bytes)
- Dirección mac origen: (6 bytes)
- Y el tipo de protocolo de capa superior: (2 bytes)
Los primeros 6 bytes, representan la dirección mac de destino, los siguientes 6 bytes la dirección de origen y luego viene el tipo de protocolo de capa superior que en este caso deberás indicarle el tipo asignado para ARP.
El Frame Type Tendrá un valor de 0×0806 para especificar el protocolo ARP, es necesario asignar este campo, para que el nucleo entienda y sepa como desempaquetar el paquete que viene a continuación, este campo podría ser uno distinto si es que quisieras especificar el siguiente protocolo como IP.
Ahora el código en C/C++ para especificar la cabecera Ethernet:
#ifndef __Ethernet__20111128 #include <pcap/pcap.h> namespace Crossover{ namespace Framework{ namespace Net{ namespace Protocols{ #define ETHERNET_TYPE_ARP 0x0806 #define ETHERNET_TYPE_IP 0x0800 #define ETHERNET_TYPE_ETHER 0x0001 struct Ethernet{ u_char dst[6]; // 48.bit: Ethernet address of destination u_char src[6]; // 48.bit: Ethernet address of sender u_short type; // 16.bit: Protocol type = ether_type$ADDRESS_RESOLUTION }; }}}} #endif
No comments:
Post a Comment