Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Stakewinner00 en 22 Enero 2014, 15:42 pm



Título: Convertir de u_int32_t a int y al reves
Publicado por: Stakewinner00 en 22 Enero 2014, 15:42 pm
Buenas, hoy estaba programando una cosa con sockets y me encontre que tenia que pasar de u_int32_t a int y al revés. Vi cosas por internet pero no aclaran mucho. Alguien sabe como se puede pasar de u_int32_t a int no con código sino manualmente (con una calculadora en mano)? xD

Saludos y gracias


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: amchacon en 22 Enero 2014, 15:49 pm
Un u_int32_t es un unsigned int en la inmensa mayoría de las maquinas actuales.

Pasar de u_int32_t a int sería dejarlo tal como esta, pasar de int a u_int32_t sería hacerle el valor absoluto.


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: ivancea96 en 22 Enero 2014, 16:36 pm
Además, siempre puedes hacer un union.


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: Stakewinner00 en 22 Enero 2014, 20:04 pm
Gracias por las respuestas, pero no me funciona nada xD.

Estaba editando el code del ejemplo de https://repolinux.wordpress.com/2011/09/18/libnet-1-1-tutorial/#example-6  (https://repolinux.wordpress.com/2011/09/18/libnet-1-1-tutorial/#example-6) para hacer spoof de la ip de origen, funciona pero no con la ip que quiero. Supongo que algo estaba haciendo mal.

ahora fijándome en todo el code veo que quizás no sea 32 bits sino 8

Código
  1. libnet_autobuild_arp (ARPOP_REQUEST,\
  2. src_mac_addr->ether_addr_octet,\
  3. [b](u_int8_t*)(&src_ip_addr), mac_zero_addr,[/b]\
  4. (u_int8_t*)(&target_ip_addr), l) == -1)

bueno, a ver si logro resolver el problema.


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: xv0 en 22 Enero 2014, 20:42 pm
Bueno, no entiendo esas definiciones de C, pero si estas trabajando con direcciones ipv4 estas son de 32 bits vamos que son un int, ejemplo: 0xffffffffff seria 255.255.255.255.
Las Mac serian 6 bytes, si no me confundo.

Y para ponerlas al reves o invertirlas puedes usar bswap en ASM en linea, o hacer algo en C. No se si eso responde tu pregunta.

Un saludo.


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: ivancea96 en 22 Enero 2014, 20:50 pm
Código
  1. union{
  2.    int a;
  3.    uint32_t b;
  4. }n;
  5.  
  6. n.a = 666;
  7. cout << n.b;


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: Stakewinner00 en 22 Enero 2014, 22:50 pm
ivancea96, ya lo probe y tras estar rato probando me estoy dando cuenta de que lo que falla no es la transformación a unsigned de 32 sino luego con el
Código:
(u_int8_t*)(&src_ip_addr), mac_zero_addr,
de 8 bits. Por ejemplo la dirección "2080483526" me devuelve que la ip es 192.168.1.124 y la dirección "2080483526+1" me devuelve que es 26.121.117.141 no 192.168.1.125


Título: Re:
Publicado por: ivancea96 en 22 Enero 2014, 23:35 pm
Pon el code de como lo transformas, a ver

Enviado desde mi ST21i mediante Tapatalk


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: xv0 en 22 Enero 2014, 23:45 pm
Creo que estas incrementando mal.

Porque no pones las direcciones en hexadecimal. 192.168.1.124 = 0x7c01a8c0, tendrias que incremental 0x7c. "2080483526" en teoria tendria que devolver 198.168.1.124.

Un saludo.


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: Stakewinner00 en 23 Enero 2014, 15:39 pm
hoy encontre como solucionarlo mientras estaba en clase cpu2 en efecto, así también funciona.

El problema era que yo lo hacia directamente y antes de hacerlo debería dividir las ips por octetos,
por ejemplo la ip 192.168.1.129 se tendría que convertir a binario (es como yo lo hice) y sería 11000000.10101000.00000001.10000001 entonces paso el "10000001000000011010100011000000" a decimal unsigned de 32 bits que es "2164369600" y cuando lo paso al socket ya lo lee como debería (192.168.1.129)
gracias a todos por su ayuda ;)


Título: Re: Convertir de u_int32_t a int y al reves
Publicado por: xv0 en 23 Enero 2014, 20:43 pm
Si, es lo que intente decirte en mi primer mensaje, pero bueno a la segunda me haces caso.

En el link que nos pasaste si te fijas declara un array para 6 octeos que son para la direccion MAC, tu puedes hacer lo mismo si quieres para las direcciones ipv4 solo que con 4 octeos.

Un saludo.


Título: Re:
Publicado por: dato000 en 23 Enero 2014, 21:10 pm
Pon el code de como lo transformas, a ver

Enviado desde mi ST21i mediante Tapatalk

finalmente vi a ivan jajajajajajaja simplemente con ese avatar no me ponia a ver el nick ajajajajaj perdon por el mensaje troll es que no pude resistirme, lamento no poder ayudar, simplemente esto excede mis conocimientos.