Moin, Am Freitag, 8. Oktober 2004 14:23 schrieb David Haller:
Am Fri, 08 Oct 2004, Jan Trippler schrieb:
Am Donnerstag, 7. Oktober 2004 20:00 schrieb Daniel Lord:
[..]
/* Initialise random number generator */ srand (time (0)); /* init random */
/* Initialise random number generator */ srand (time (0));
Ihr wisst, dass ihr damit innerhalb einer Sekunde immer die gleiche Sig bekommt?
Das wäre wohl nur für Spammer schlimm ;-) - Ich habs noch nie geschafft, mehr als 1 Mail / Sekunde abzusetzen (gaaanz grob geschätzt ;-) [...]
Ok, bei sigs ist das wohl nicht so schlimm ;)
Jepp.
Generell waere es besser, z.B. mit vier Bytes aus /dev/urandom zu initialisieren:
$ cat testrandom.c #include
#include #include #include #include int main(void) { unsigned int buf; int status; int rfd = open("/dev/urandom", O_RDONLY); if(rfd == -1) { perror(""); exit(errno); } status = read(rfd, &buf, sizeof(rfd)); if( status == -1 ) { perror(""); close(rfd); exit(errno); } if( status != sizeof(rfd) ) { fprintf(stderr, "Short read from '/dev/urandom'\n"); close(rfd); exit(1); } close(rfd); srand(buf); printf("%i\n", rand()); return 0; }
Das wäre IMHO mit Kanonen auf Spatzen geschossen: - Die Wahrscheinlichkeit ist annähernd 0, dass man mehrmals / Sekunde Mails schickt (es sei denn, man ist Spammer) - Wenn die gleiche Signatur 2x hintereinander kommt: na und? - Auch so ist es möglich, dass mehrmals die gleiche Signatur kommt, es sind eben Zufallszahlen - da können schon mal die gleichen Zahlen mehrmals fallen (je geringer die Anzahl der Signaturen, desto höher die Wahrscheinlichkeit). Man muss immer Aufwand und Nutzen gegeneinander abwägen. In diesem Fall ziehe ich Daniels Lösung definitiv vor. Wenn ich einen Programmaufruf so oft starten muss, dass ich mehrmals pro Sekunde einen Zufallswert brauche, dann implementiere ich ihn lieber als persistenten Dienst und initialisiere nur einmal. Jan -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org