prngd simula "/ dev/random" e "/ dev/urandom" su una connessione di rete. Supporta un socket di dominio basato su stream Unix ("/ var/run/egd-pool") o (se configurato) o IP che utilizza le porte TCP 708 o 4840 (i valori predefiniti --- possono essere modificati).
Quindi, utilizzando la presa dominio Unix, sarebbe qualcosa di simile:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
int devrandom(void)
{
union
{
struct sockaddr sa;
struct sockaddr_un path;
} location;
int sock;
memset(&location,0,sizeof(location));
location.path.sun_family = AF_UNIX;
strcpy(location.path.sun_path,"/var/run/egd-pool");
sock = socket(AF_UNIX,SOCK_STREAM,0);
if (sock < 0)
return -1;
if (connect(sock,&location.sa,sizeof(struct sockaddr_un)) < 0)
return -1;
return sock;
}
Ciò restituirà un descrittore di file si può passare a read() al fine di ottenere i dati casuali (nota: questo il codice non è stato testato). Una connessione basata su TCP/IP è un po 'più coinvolta, richiedendo il binding del socket a un indirizzo locale e la connessione all'indirizzo remoto, ma ci sono molti esempi su Internet per quel tipo di codice.
fonte
2013-02-21 22:22:28