Perdón la ausencia no he ingresado mucho por trabajo aunque no me cuesta nada, igual me escuso, trataré de ayudar en lo que pueda, aunque siempre que se algún tema alguien los contesta, ni que decir Ethernal Idol un mostro.
Esta está difícil, yo no comprendo que pasa el caso es el siguiente:
tengo una estructura declarada de la siguiente manera, que son los campos de ARP.
Código
#ifndef __ARP__20111128 #define __ARP__20111128 #include <pcap/pcap.h> #include <netinet/in.h> //Opcodes #define ARP_OP_REPLY 0x0002 #define ARP_OP_REQUEST 0x0001 namespace Crossover{ namespace Framework{ namespace Net{ namespace Protocols{ struct ARP{ u_short hrd; // Hardware address space (e.g., Ethernet, Packet Radio Net.) u_short pro; // Protocol address space. For Ethernet hardware, this is from the set of type fields ether_typ$<protocol>. u_char hln; // byte length of each hardware address u_char pln; // byte length of each protocol address u_short op; // opcode (ares_op$REQUEST | ares_op$REPLY) u_char sha[6]; // Hardware address of sender of this packet, n from the ar$hln field. in_addr spa; // Protocol address of sender of this packet, m from the ar$pln field. u_char tha[6]; // Hardware address of target of this packet (if known). in_addr tpa; // Protocol address of target. }; }}}}; #endif
y en el main tengo el siguiente código.
Código
#include "Crossover/Crossover.h" using namespace Crossover::Framework::Net::Protocols; using namespace Crossover::Framework::Net; using namespace std; int main(){ try { ARP arp; memset(&arp, 0 , sizeof(arp)); arp.spa.s_addr = 0xffffffff; unsigned char *szBuff = (unsigned char *)malloc(1024); memcpy( szBuff, &arp, sizeof(arp)); } catch(Exception ex) { cout << ex.message() << " OS: " << ex.systemMessage() << endl; } return 0; }
El problema es que al momento de pasar esta linea.
memcpy( szBuff, &arp, sizeof(arp));
Los 0xffffffff asignados ( arp.spa.s_addr) no comienzan desde el indice 14 (szBuff[14]) como debería ser, si no que desde el 16.
de antemano gracias. saludos!