Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Marovingio en 15 Septiembre 2010, 05:23 am



Título: ¿Problema con srand()?
Publicado por: Marovingio en 15 Septiembre 2010, 05:23 am
  Bueno estoy haciendo un proyecto en VC++ 2008, y este modulo lo estoy probando en builder para luego meterlo al proyecto en VC++, por la cuestion de las gui  :silbar: ....

 Cuando el programa se ejecuta genera una serie de Ips Aleatorias, lo cierro y cuando lo vuelvo a ejecutar genera las mismas Ips Aleatorias como veran en la grafica ....

  (http://img833.imageshack.us/img833/7383/dibujoantes.jpg)


  (http://img806.imageshack.us/img806/1028/dibujodespues.jpg)

  Si el programa nunca se cerrara y la pc siempre estuviera conectada no habria problema pero si la apagan y la encienden el programa escaneara las mismas Ips y como veran eso no me sirve.......

  Aqui el code:

  
Código:
 void __fastcall TForm18::Button1Click(TObject *Sender)
{

 AnsiString Host;
 in_addr *o;
 char *p;
 hostent* hp;
 int ban,exitcode;
 WSADATA wsadata;
if (WSAStartup(MAKEWORD(1, 0), &wsadata) != 0)
ban= 0;
else
 {
  for(int i=0;i<=20;i++)
 {
 try
{
 Host=AnsiString(rand()%256)+"."+AnsiString(rand()%256)+"."+AnsiString(rand()%256)+"."+AnsiString(rand()%256);
 hp = gethostbyname(Host.c_str() );

 }
  catch(...)
 {
  hp = NULL;
 }
  if (hp == NULL)
int g=0;//Memo1->Lines->Add(Host+" No existe");
  else
{
if(EsacnearIPX(Host))
  Memo1->Lines->Add(Host+" Puerto 80 Disponible");
else
  Memo1->Lines->Add(Host+" Puerto 80 Cerrado");
}

  }
  }
 WSACleanup( );
}

  Las funciones random() y randomize() de stdlib.h me andan en Builder pero en Vc++ me dice algo asi como libreria desconocida, me inmagino que estas funciones usan la funcion rand() y por lo tanto tendre resultados similares, al parecer rand() genera numeros aleatorios a partir de datos del programa y por eso siempre es la misma frecuencia ....

  Necesito ayuda en esto especificamente en una manera de que el programa genere Ips aleatorias diferentes en cada ejecucion, estuve pensando en algo como:

  (GetTickCount()%256*rand()%256)%256;

  Pero no se si me funcione ...

  Alguna ayuda ..  :)

  PD: Mastico algo de Asm inline asi que una solucion por esta via me servira  :)


Título: Re: ¿Problema con srand()?
Publicado por: Littlehorse en 15 Septiembre 2010, 05:39 am
Código
  1. srand(time(NULL));

srand (http://www.cplusplus.com/reference/clibrary/cstdlib/srand/)
time (http://www.cplusplus.com/reference/clibrary/ctime/time/)


Citar
For every different seed value used in a call to srand, the pseudo-random number generator can be expected to generate a different succession of results in the subsequent calls to rand.
Two different initializations with the same seed, instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.

Igualmente si el proyecto es lo suficientemente serio tal vez debas considerar utilizar PRNG mas robustos.

Saludos


Título: Re: ¿Problema con srand()?
Publicado por: Marovingio en 15 Septiembre 2010, 05:48 am
  Perfecto ahora si funciona bien .....

  Gracias Littelhorse   :D


Título: Re: ¿Problema con srand()?
Publicado por: Littlehorse en 15 Septiembre 2010, 05:51 am
De nada.  :D