Algo heavy en C++

Iniciado por Kaxperday, 12 Julio 2015, 20:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

#10
Bueno iba a meter una santa parrafada, pero he llegado a la conclusión de QUE, lo mejor es usar un solo thread, ya que si voy a tener 2 y voy a estar llamando al uno cada X tiempo luego al otro.. mutex.. lo mejor hago uno y ya esta, porque si el mutex lo que va a acabar haciendo es bloquear un thread, tengo lo mismo que si trabajo con un solo thread.

Escuchare paquetes de la red, cada X tiempo escaneare la red, y cada Z tiempo mandaré arp spoofing, todo en un thread, ya que con 2 threads y mutex, me da errores, y voy a tener lo mismo, pues haría el lock() para mandar arp spoofing a los hosts, apenas tarda tiempo, para eso lo hago en un thread y me ahorro mutex y demás.

Aunque el tiempo que tardo en spoofear no estaría recogiendo paquetes... pero si hago lock() para spoofear tampoco lo estaría haciendo luego ¿porque no solo usar un thread? (Ya que en ambos casos usaria la lista de usuarios y el vector de hosts, estaría compartiendo la variable.

Edito: O mejor hacer el spoofing y el escaneo de host (donde uso la variable) en una funcion, y la otra simplemente escucha y redirige el tráfico. Podría ir. No necesitaría mutex.


Saludos.
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

El mutex no ha de retrasar tu programa ni 1 milisegundo por segundo. Basta que lo organices bien. Pero tú verás dónde quieres colocar 1, 2 o 100 threads.

Kaxperday

Pff es que es bastante jodido, tengo que llamar al mutex para actualizar los hosts (que haga arp scanning) y eso lleva tiempo, sin embargo tienes razón si está bien organizado podría tenerlos ya listos y solo insertarlos o eliminarlos del vector, pero.. el problema es que para eso los he tenido que escanear anteriormente y debería de estar esperando a que me llamasen, ¿como?

Saludos socio.
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

A que te llamasen, ¿quienes?

Kaxperday

#14
Ha que llamasen a la funcion, cuando se ejecuta cada cierto tiempo el escaner de red, se llama a su funcion, pero lleva tiempo hacer el escaner unos 5 segundos, luego deberia de estar ya hecho y esperando a que lo llamasen, pero ¿como? Ademas ademas el escaner de red se ejecuta cada X tiempo, pasado ese tiempo escanearia, y mientras ese tiempo tiene que mandar arp poisoning en bucle con los hosts.

Saludos.

Edito: Haber lo que decía, estoy en este bucle:

Código (cpp) [Seleccionar]
control.lock();
for (int i = 0; i < lista->usuarios.size(); i++)
{
paquete = respuesta_arp(ip_puerta, mac_cliente, lista->usuarios[i].ip, lista->usuarios[i].mac);
pcap_sendpacket(capturador, paquete, 42);
printf("%d = %d\n", i, lista->usuarios.size() - 1);
if (i == (lista->usuarios.size() - 1))
{
printf("mandados los arps\n");//aqui desbloquea pero aun no ha llegado el otro para darnos los datos :)
i = 0;
control.unlock();
}
//control.lock(); ?? como vuelvo a recuperar el control del mutex?
if (lista->usuarios.size() == 0)
break;
}


Cuando acabo de spoofear a los usuarios, hago un descanso en ese descanso desbloqueo el mutex para que me modifique la lista, pero que pasa? que la lista se reescanea en otro bucle cada X tiempo, y no siempre está lista por lo que da error, ¿como puedo esperar al mutex?

Lo que pasa es que el arp spoofing es cada segundo, y el escaneo de red cada 60 segundos por ejemplo, en el arp spoofing estoy siempre usando la lista, pero cuando hago el reescaneo pasado X tiempo (60 seg) trato de acceder a la variable usando mutex, para una operacion de apenas milisegundos pero no puede acceder, ¿alguna posible solucion?



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