elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Estructura ARP a buffer unsigned char *
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estructura ARP a buffer unsigned char *  (Leído 3,460 veces)
ahkbar87

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Estructura ARP a buffer unsigned char *
« en: 2 Febrero 2012, 22:08 pm »

Hola hackearianos maestros,
        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
  1. #ifndef __ARP__20111128
  2. #define __ARP__20111128
  3.  
  4. #include <pcap/pcap.h>
  5. #include <netinet/in.h>
  6.  
  7. //Opcodes
  8. #define ARP_OP_REPLY    0x0002
  9. #define ARP_OP_REQUEST  0x0001
  10.  
  11.  
  12. namespace Crossover{
  13. namespace Framework{
  14. namespace Net{
  15. namespace Protocols{
  16.  
  17.  
  18.    struct ARP{
  19.        u_short hrd;    // Hardware address space (e.g., Ethernet, Packet Radio Net.)
  20.        u_short pro;    // Protocol address space.  For Ethernet hardware, this is from the set of type fields ether_typ$<protocol>.
  21.        u_char  hln;    // byte length of each hardware address
  22.        u_char  pln;    // byte length of each protocol address
  23.        u_short op;     // opcode (ares_op$REQUEST | ares_op$REPLY)
  24.        u_char  sha[6]; // Hardware address of sender of this packet, n from the ar$hln field.
  25.        in_addr spa;    // Protocol address of sender of this packet, m from the ar$pln field.
  26.        u_char  tha[6]; // Hardware address of target of this packet (if known).
  27.        in_addr tpa;    // Protocol address of target.
  28.    };  
  29.  
  30. }}}};
  31.  
  32. #endif
  33.  

y en el main tengo el siguiente código.
Código
  1.  
  2. #include "Crossover/Crossover.h"
  3.  
  4. using namespace Crossover::Framework::Net::Protocols;
  5. using namespace Crossover::Framework::Net;
  6. using namespace std;
  7.  
  8. int main(){
  9.  
  10.    try
  11.    {  
  12.  
  13.        ARP arp;
  14.        memset(&arp, 0 , sizeof(arp));
  15.        arp.spa.s_addr = 0xffffffff;
  16.        unsigned char *szBuff = (unsigned char *)malloc(1024);
  17.  
  18.        memcpy( szBuff, &arp, sizeof(arp));
  19.  
  20.  
  21.  
  22.    }  
  23.    catch(Exception ex)
  24.    {  
  25.        cout << ex.message() << " OS: " << ex.systemMessage() << endl;
  26.    }  
  27.    return 0;
  28. }
  29.  
  30.  
  31.  


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!



En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Estructura ARP a buffer unsigned char *
« Respuesta #1 en: 3 Febrero 2012, 00:53 am »

En una estructura los campos de esta no necesariamente están colocados uno inmediatamente después del otro (como sucede en el caso de los arrays).

Si es necesario para cumplir con los requisitos de alineación algunos bytes no se utilizan (eso se conoce como "padding"). Casi te puedo asegurar que el tamaño del tipo "in_addr" dado por "sizeof(in_addr)" es cuatro y de ahí que la siguiente posición libre utilizada y que debe ser múltiplo de ese numero es 16.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ahkbar87

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Estructura ARP a buffer unsigned char *
« Respuesta #2 en: 3 Febrero 2012, 01:28 am »

Gracias rir3760,
                         Estaba buscando el problema del padding en las estructuras, aún no se como solventar el problema, para que el padding no lo haga entre sha y spa:

u_char  sha[6]; // Aquí el compilador le agregar 2 bytes de padding.
in_addr spa;


¿Sabes cual podría ser la solución?

 :)
En línea

ahkbar87

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Estructura ARP a buffer unsigned char *
« Respuesta #3 en: 3 Febrero 2012, 01:44 am »

Llegue a la solución gracias por leer.

http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/2009-July/006339.html

__attribute__ ((packed)) arp
« Última modificación: 3 Febrero 2012, 02:00 am por ahkbar87 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como es que un unsigned tiene 16 bits?
Programación C/C++
traviatØ 2 2,462 Último mensaje 24 Octubre 2012, 12:58 pm
por xiruko
Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Programación C/C++
harry_the_blogger 4 3,443 Último mensaje 5 Octubre 2014, 21:40 pm
por harry_the_blogger
unsigned int 8 , unsigned int 8 y demas [DUDA] « 1 2 »
Programación C/C++
bash 10 4,730 Último mensaje 9 Abril 2015, 20:08 pm
por bash
de wchar_t a unsigned char
Programación C/C++
pikoc 3 3,647 Último mensaje 21 Mayo 2015, 17:06 pm
por pikoc
Ayuda por favor! Con c, unsigned char y array de char !
Programación C/C++
Yurasamai 1 3,534 Último mensaje 24 Noviembre 2015, 09:14 am
por avesudra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines