Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kaxperday

#451
jajaja ok, pero como es eso de usar ¿new? ¿algún ejemplo? Si con eso quito el static por mi perfecto socio.

MyClass * p1 = new MyClass;

¿con un puntero?  :laugh: :laugh:

Pues que gracia, si me pase a clases fue para acabar con los punteros de las estructuras entre otras cosas XD.

Oye pues funciona:

Código (cpp) [Seleccionar]
lista_usuarios* buscar_usuarios()
{
lista_usuarios* lista_host = new lista_usuarios;
}


Lo compro, gracias ivancea <3.

Saludos.
#452
jajaja ostia..  :-[ :-[ :-[  :-X :-X

Código (cpp) [Seleccionar]
pAdapter = pAdapterInfo;
if (pAdapterInfo)
FREE(pAdapterInfo);


Lo vaciaba y no me daba cuenta tanto código, me paso completamente desapercibido, pero es curioso, pero sin embargo me funcionaba pasar las ips a u_char* y me hacia arp a el rango de ips, a pesar de que tenía basura y de que la había vaciado, pero claro no sabía porque era entonces.

En este caso la puse static por probar, pues para la variable lista_usuarios, gracias a que la declaré estática, luego puedo acceder a ella desde el main, devolviendo su valor con &lista_usuarios. Si no la pongo static pierde su valor y memoria al salir de la funcion, tendría que pasar un puntero como argumento a la función para obtener la lista:

Código (cpp) [Seleccionar]
lista_usuarios* buscar_usuarios()
{
static lista_usuarios lista_host;
PIP_ADAPTER_INFO adaptador;
return &lista_host;


Si no es static, se pierde su valor al recoger la lista en el main.

Por cierto que tiene de malo inicializar un puntero con un nullptr?  :xD :xD

Saludos.
#453
jajaja ¿nullptr no es como NULL para punteros?, quiero decir puse NULL pero sin darme cuenta debió de escribir nullptr..  :silbar: :silbar: XD

¿Pero no da igual eso que inicializarles a NULL? ¿Es indiferente o no? XD

Saludos.

Edito: Por cierto he modificado el código ahora tengo esto (elimine el puntero no hacia falta):

Código (cpp) [Seleccionar]
lista_usuarios* buscar_usuarios()
{
static PIP_ADAPTER_INFO adaptador;

//adaptador = (PIP_ADAPTER_INFO*)malloc(sizeof(PIP_ADAPTER_INFO));

if (seleccionar_interfaz(&adaptador))
{
printf("%s", adaptador->GatewayList.IpAddress.String);
}


Pues no era necesario realmente el puntero, pero aún así no funciona XP.
#454
Cita de: Eleкtro en  8 Julio 2015, 22:49 PM
Creo que en especial a KuBox esto le encantará xD.

jajaja en especial le mande privado con el código de hookeo de una api que encontré, pues se que estaba indagando en la materia   ;D ;D

Saludos.
#455
https://github.com/hackedteam/vector-exploit

Están filtrando nuevos datos de hacking team, en el link os dejo sus exploits, actualmente funcionales :P

Saludos.
#456
Lo de siempre diría, llamo a una función a la que le paso un PIP_ADAPTER_INFO por referencia, y me la rellenará:

Código (cpp) [Seleccionar]
bool seleccionar_interfaz(PIP_ADAPTER_INFO* adaptador)
{
bool seleccion = false;
PIP_ADAPTER_INFO pAdapterInfo;
static PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;

ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(sizeof(IP_ADAPTER_INFO));

if (pAdapterInfo == NULL)
return false;

if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL)
return false;
}

if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
while (pAdapter)
{
//Si tiene gateway y dirección IPv4 en la interfaz nos vale.
if (pAdapter->DhcpEnabled == true &&
pAdapter->GatewayList.IpAddress.String &&
pAdapter->IpAddressList.IpAddress.String &&
strcmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") != 0 &&
strcmp(pAdapter->GatewayList.IpAddress.String, "0.0.0.0") != 0 )
{
//printf("%s", pAdapter->GatewayList.IpAddress.String); Esta linea lo cambia todo, hace que funcione y no haya problema pero no quiero poner printf..
*adaptador = pAdapter;
seleccion = true;
break;
}
pAdapter = pAdapter->Next;
}
}
else
seleccion = false;
if (pAdapterInfo)
FREE(pAdapterInfo);
return seleccion;
}


La llamada y declaración de la función está aquí:

Código (cpp) [Seleccionar]
lista_usuarios* buscar_usuarios()
{
PIP_ADAPTER_INFO* adaptador = nullptr;

adaptador = (PIP_ADAPTER_INFO*)malloc(sizeof(PIP_ADAPTER_INFO));

if (seleccionar_interfaz(adaptador))
       {

       printf("%s", (*adaptador)->GatewayList.IpAddress.String);
}
{


Este printf muestra basura, ¿porqué?. Cuando pongo el printf que muestro de comentario en seleccionar_inferfaz() no muestra basura, funciona.

Lo paso como referencia esta vez, y he reservado memoria previamente. No se que puede ser XD.

Siento que abuso del foro  :rolleyes: :rolleyes: :rolleyes:

Saludos.
#457
OMG ya esta solucionado.

Mi fallo era que pensaba que al pasar a la funcion la variable su valor se podía modificar, en plan

Código (cpp) [Seleccionar]
void cambia_numero(int num){num=19;}

Eso no debería de funciona, pero si esto que cambiaria el numero:

Código (cpp) [Seleccionar]
void cambia_numero(int *num){*num=19;}

Ok muchas gracias a ambos  ;-) ;-) ;-) ;-) ;-)

De todas formas hay veces que me tiro mucho tiempo para chorradas que ya debería saber hacer XD  :-[

Saludos.
#458
Vale lo tendré en cuenta. He probado a eliminar un async el de recibir arps y pasa igual:

Código (cpp) [Seleccionar]
lista_usuarios* buscar_usuarios()
{
static lista_usuarios lista_host;
printf("ANTES: %d\n", lista_host.usuarios.size());
auto envio_arp = async(enviando_arp, capturador, ip_cliente, mac_adaptador, ip_gateway);
//auto recojo_arp = async(recogiendo_arp, capturador, lista_host);

//envio_arp.get();
//recojo_arp.get();
recogiendo_arp(capturador, lista_host);
printf("\nDESPUES: %d\n", lista_host.usuarios.size());
return &lista_host;
}


Compila y funciona, cargan los hosts (pues los muestro en recogiendo_arp() pero al salir me dice que la lista tiene 0 elementos.

Aquí muestro los elementos:

Código (cpp) [Seleccionar]

void recogiendo_arp(pcap_t *capturador, lista_usuarios lista)
{
lista.insertar_host(ip, mac);
//inserto elementos...

printf("   %d up\n", lista.usuarios.size());
for (int i = 0; i < lista.usuarios.size();i++)
{
for (int j = 0; j < 4; j++)
{
printf("%x", lista.usuarios[i].ip[j]);
}
printf("::");
for (int j = 0; j < 6; j++)
{
printf("%x", lista.usuarios[i].mac[j]);
}
printf("\n");
}

// y los muestro me salen que tiene 6, antes de llamar a la funcion tenia 0 claro.


Se me hace raro, el problema está en ese vector dinamico de estructuras y en la asignacion de la memoria, yo simplemente declaro la clase lista_usuarios, y luego la paso a una funcion como parametro para que me cargue elementos en el vector de hosts de esa clase lista_usuarios, lo hace, pero luego desaparecen.  :P :P

Pero al salir, 0 elementos, diría que los elementos nuevos que inserta en el vector están en la memoria de la funcion recogiendo_arp por ello al salir de ella, se pierden.

Si es ese el error.. ¿como corregirlo? Ya he probado a reservar con malloc(sizeof(lista_usuarios)) pero esto no vale para nada, pues lista_usuarios no tiene un tamaño fijo, sino que depende de los elementos que incluya, luego malloc no funcionaría, empiezo a pensar en quitar vector<> y poner un puntero y que vaya modificando el tamaño con realloc(), que sería el camino más dificil, pero una posible solucion, espero no llegar a ella XD


Saludos.
#459
Desconozco eso de mutex aún no se como se usa, pero lo tendré en cuenta más adelante, supongo que te referirás a una variable de control para que salga de la funcion del thread o del async, una variable volatile solía utilizar para hacerlos salir.

En este caso no hay problema pues al enviar paquetes se envía un numero definido de ellos y al recibir salgo del bucle por un contador temporal, cuando llamo a los get me aseguro de que hallan acabado y de hecho lo hacen, la siguiente instruccion que es un printf ya se ejecuta cuando ambos async han acabado.

Luego no veo porque pueda influir en el contenido del puntero  :-\ :-\

Saludos.
#460
Hola elektro gracias por la respuesta, pues he probado también a pasarlo como doble puntero (con el operador &), y el resultado era el mismo. Respecto a lo de async cuando llamo a el metodo get(), se supone que la siguiente intrucción no se ejecuta hasta que haya acabado esa. Son instrucciones que a lo sumo tardan 5 segundos ambas, cuando acaban me muestra lo de "DESPUES: .." ahí debería ponerme el numero de elementos de la lista que no puede ser 0 pues acabo de añadir 6 (ips y sus asociadas macs de la red XD).

Edito: He probado muchas cosas, y no se a cual me refería de todas XD, aquí he puesto la lista como un puntero, pero también he probado otras 2 opciones más que es como variable normal (pasandola sin más a recogiendo_arp) y devolviendola como &lista_host.

Y otra opción que es la que decía elektro, declarando un puntero y pasandoselo como doble puntero a la funcion recogiendo_arp.

Las 3 han fallado, el problema creo que es de asignación de memoria, pues cuando sale de recogiendo_arp pierde los valores que añadió allí, he probado también a reservarla memoria al puntero con malloc(sizeof(lista_usuarios)), pero lista_usuarios tiene vectores dinamicos, entonces no sé cuanta memoria debería reservar.

Saludos.