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