djbdnscurve6  38
djbdnscurve6
random-ip.c
Go to the documentation of this file.
1 #include "buffer.h"
2 #include "exit.h"
3 #include "fmt.h"
4 #include "scan.h"
5 #include "dns.h"
6 
7 /* Generates random IPv4 numbers for tests only */
8 
9 char ip[4];
10 int ipfixed = 0;
11 unsigned long loops = 10000;
12 unsigned char tab[256];
13 
14 char strnum[FMT_ULONG];
15 
16 char seed[128];
17 
18 int main(int argc,char **argv)
19 {
20  unsigned long u;
21  int i;
22  int j;
23  unsigned char c;
24 
26 
27  for (i = 0; i < 256; ++i) tab[i] = i;
28  for (j = 256; j > 0 ;--j) {
29  i = dns_random(j);
30  c = tab[j - 1];
31  tab[j - 1] = tab[i];
32  tab[i] = c;
33  }
34 
35  if (*argv) ++argv;
36  if (*argv) scan_ulong(*argv++,&loops);
37  if (*argv) { scan_ulong(*argv++,&u); ip[0] = u; ipfixed = 1; }
38  if (*argv) { scan_ulong(*argv++,&u); ip[1] = u; ipfixed = 2; }
39  if (*argv) { scan_ulong(*argv++,&u); ip[2] = u; ipfixed = 3; }
40  if (*argv) { scan_ulong(*argv++,&u); ip[3] = u; ipfixed = 4; }
41 
42  if (ipfixed >= 1) if (loops > 16777216) loops = 16777216;
43  if (ipfixed >= 2) if (loops > 65536) loops = 65536;
44  if (ipfixed >= 3) if (loops > 256) loops = 256;
45  if (ipfixed >= 4) if (loops > 1) loops = 1;
46 
47  while (loops) {
48  --loops;
49  u = loops;
50  for (i = ipfixed; i < 4; ++i) { ip[i] = u & 255; u >>= 8; }
51  if (ipfixed == 3) {
52  c = ip[3];
53  ip[3] = tab[c];
54  }
55  else if (ipfixed < 3) {
56  c = 0;
57  for (j = 0; j < 100; ++j) {
58  for (i = ipfixed;i < 4;++i) {
59  c ^= (unsigned char) ip[i];
60  c = tab[c];
61  ip[i] = c;
62  }
63  }
64  }
65 
66  u = (unsigned char) ip[0];
67  buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
68  buffer_puts(buffer_1,".");
69  u = (unsigned char) ip[1];
70  buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
71  buffer_puts(buffer_1,".");
72  u = (unsigned char) ip[2];
73  buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
74  buffer_puts(buffer_1,".");
75  u = (unsigned char) ip[3];
76  buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
77  buffer_puts(buffer_1,"\n");
78  }
79 
80  buffer_flush(buffer_1);
81  _exit(0);
82 }
unsigned int dns_random(unsigned int)
Definition: dns_random.c:52
void dns_random_init(const char *)
void c(const char *home, const char *subdir, const char *file, int uid, int gid, int mode)
int ipfixed
Definition: random-ip.c:10
int main(int argc, char **argv)
Definition: random-ip.c:18
char strnum[FMT_ULONG]
Definition: random-ip.c:14
unsigned long loops
Definition: random-ip.c:11
unsigned char tab[256]
Definition: random-ip.c:12
char ip[4]
Definition: random-ip.c:9
char seed[128]
Definition: random-ip.c:16
unsigned long u
Definition: utime.c:10