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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  La broma del sizeof(mac)
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: La broma del sizeof(mac)  (Leído 4,783 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
La broma del sizeof(mac)
« en: 3 Octubre 2015, 13:47 pm »

Resulta que al hacer sizeof(mac), obtengo 4 bytes, cuando una mac tiene 6 bytes, uno para cada u_char si no me equivoco.

Código
  1. u_char *mac_gateway = new u_char[6]();
  2.  
  3. u_long num_gateway = inet_addr(adaptador->GatewayList.IpAddress.String);
  4.  
  5.  
  6. if (num_gateway == INADDR_NONE){
  7. Sleep(REINTENTAR_MITM * 1000);
  8. continue;
  9. }
  10.  
  11. if (!enviar_arp(adaptador->GatewayList.IpAddress.String,
  12. adaptador->IpAddressList.IpAddress.String, mac_gateway)){
  13. Sleep(REINTENTAR_MITM/2 * 1000);
  14. continue;
  15. }
  16.  
  17. for (int i = 0; i < 6; i++)
  18. printf("%d=%x ", i,mac_gateway[i]);
  19.  
  20. system("pause");
  21.  
  22. for (int i = 0; i < 4; i++)
  23. printf("%d=%x ", i, ip_gateway[i]);
  24. system("pause");
  25. cout << sizeof(mac_gateway) << sizeof(mac_atacante);

Me salen que todas las macs tienen 4 bytes WTF, la ip son 4 bytes, pero las macs no se supone que tienen 6?.

Me he quedado un poco loco con esto. Haber si sabéis algo.

Gracias, un saludo.

Edito: Que broma es esta:

Código
  1. u_char *mac = new u_char[500]();
  2. cout << sizeof(mac);
Citar
4


« Última modificación: 3 Octubre 2015, 13:59 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
A.I.

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: La broma del sizeof(mac)
« Respuesta #1 en: 3 Octubre 2015, 14:40 pm »

¿Estás en un pc de 32 bits?


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #2 en: 3 Octubre 2015, 15:01 pm »

No, es de 64 bits
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #3 en: 3 Octubre 2015, 15:18 pm »

mac no es un array de 500 elementos. mac es un puntero. Un puntero que apunta a un array de 500 elementos.
Los punteros tienen un tamaño generalmente de 4 bytes.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #4 en: 3 Octubre 2015, 15:21 pm »

Ahh vale, estaba cambiandolo por variables estaticas u_char[6] etc, pero no creo que sea buena idea, ¿como puedo hacer para que me diga el tamaño de lo que apunta el puntero? XP porque con sizeof(*mac) me sale uno el primer elemento, pero para que me diga el tamaño de todos como se puede hacer?.

Gracias como siempre, un saludo.

Edito: Parece que no se puede, hay que hacer una variable estatica y pasar su dirección al puntero, luego ¿la unica solucion es multiplicar por 2 las variables declaradas?.

porque ahora habra:

Código
  1. u_char mac[6]; u_char *pmac; pmac = &(mac[0]); ...

Y me parece una caca tremenda XD.

Bueno parece que sustituyendo los punteros por esto:

Código
  1. &(mac_gateway[0])

Se soluciona parcialmente el problema, pero esto no lo consigo solucionar:

Código
  1. &(ip_atacante[0]) = (u_char*)&num_atacante;

ERROR: La expresion debe tener valor L modificable.

Solución:

Código
  1. memcpy(&(ip_atacante[0]), (u_char*)&num_atacante, sizeof(u_char)* 4);
  2. memcpy(&(ip_gateway[0]), (u_char*)&num_gateway, sizeof(u_char)* 4);
  3. memcpy(&(mac_atacante[0]), (u_char*)adaptador->Address, sizeof(u_char)* 6);

Así funciona, ¿os parece  buena idea? O es mala calidad de código?
« Última modificación: 3 Octubre 2015, 15:40 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #5 en: 3 Octubre 2015, 15:40 pm »

Código
  1. &(ip_atacante[0]) = (u_char*)&num_atacante;

ERROR: La expresion debe tener valor L modificable.

Tal como dice, la parte L (left) de la expresión (L = R), debe ser modificable. La dirección de una variable no es modificable, es solo un número.


Puedes hacer eso con memoria dinámica. ¿Para qué necesitas saber su tamaño? ¿No es siempre 6?
Y en caso de que por lo que fuera cambiase, ¿no puedes crear una variable y guardarle un 6?
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #6 en: 3 Octubre 2015, 15:43 pm »

La idea de conocer el tamaño de bytes de la variable es para detectar posibles errores al pasar la mac, por ejemplo si llegan 4 bytes solo, pues que detecte error apartir del tamaño, pues deberían llegar 6.

Pero con un puntero parece que no se puede por si mismo, por ello es mejor haciendo u_char mac[6]; y pasar &(ip_gateway[0]) como puntero ¿no?

Saludos.

Quiero saber los bytes que tiene cada u_char*, supongo que no podré utilizar entonces u_char* mac= new...
« Última modificación: 3 Octubre 2015, 15:45 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #7 en: 3 Octubre 2015, 15:54 pm »

Vamos a ver. No hay manera de que te envíen "solo 4 bytes" y que lo puedas detectar, salvo que la función te especifique la cantidad de bytes.

Una de 2, o te llegan 6 bytes, o no te llegan. No necesitas saber el tamaño.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #8 en: 3 Octubre 2015, 16:52 pm »

Vamos a ver. No hay manera de que te envíen "solo 4 bytes" y que lo puedas detectar, salvo que la función te especifique la cantidad de bytes.

Una de 2, o te llegan 6 bytes, o no te llegan. No necesitas saber el tamaño.

Necesito declararlo en la HEAP, por lo tanto lo dejaré como lo tenía al principio.

Y ¿como sé si me llegan los bytes o no me llegan?, me refiero me pasan un puntero que apunta a 2 u_char, y lo copio en un puntero de mac, no daría error, pero la mac solo tendría 2 caracteres válidos.

Código
  1. u_char *mac1 = u_char[6]();
  2. u_char * mac2 = u_char[6]();
  3.  
  4. mac1[0] = 0x12; mac 1[1] = 0xc3;
  5.  
  6. mac2 = mac1; // ¿Como detecto que no tiene 6 bytes válidos
  7. //¿tengo que crear una función que lo calcule? o hay alguna funcion que lo haga o algo?
  8.  
  9.  

La idea es que no de lugar a problemas como el que puse, por ejemplo al añadir una victima (ip y mac) a la lista de hosts):

Código
  1. u_char* lista_victimas::obtener_ip(u_char* mac)
  2. {
  3. if (sizeof(mac) != sizeof(u_char)* 6)
  4. return NULL;

Quizaaas:

Código
  1. u_char* lista_victimas::obtener_ip(u_char* mac)
  2. {
  3. if (strlen((char*)mac) != sizeof(u_char)* 6)
  4. return NULL;

Aunque así da desde la posicion del puntero que pasamos hasta el final de este. Si es mayor no hay problema, si es menor que 6 la mac que obtendremos será erronea.
« Última modificación: 3 Octubre 2015, 17:23 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: La broma del sizeof(mac)
« Respuesta #9 en: 3 Octubre 2015, 17:19 pm »

¿Por qué te iban a pasar un puntero que apunta a 2 elementos? O te pasan una mac, o no te la pasan. Si la función no te pasa 6 elementos, y no te marca ningun tipo de error, entonces la función no es correcta.

Si le pasas un valor incorrecto a la función, no es culpa de la función, sino de pasarle el valor incorrecto. No hay forma lógica de saber cuantos bytes son correctos y cuantos no. Cada error, lo tienes que tener en cuenta en su momento. No puedes andar acarreándolo hasta ese momento.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
broma bat!!! « 1 2 ... 8 9 »
Hacking
von Newman 88 60,212 Último mensaje 27 Diciembre 2010, 23:42 pm
por von Newman
broma con vb « 1 2 »
Programación Visual Basic
vivachapas 17 6,377 Último mensaje 20 Abril 2007, 23:54 pm
por Ch3ck
[C++][AYUDA] problema con sizeof
Programación C/C++
anonimo12121 7 3,945 Último mensaje 4 Mayo 2010, 17:42 pm
por Littlehorse
como crear link con broma (joke),estilo broma (ooskar)
Foro Libre
Mamba Negra2 0 5,017 Último mensaje 19 Enero 2014, 11:24 am
por Mamba Negra2
El "sizeof" para saber el tamaño del arreglo no me funciona
Programación C/C++
RGT 9 4,251 Último mensaje 5 Abril 2015, 04:33 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines