Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
81 lines (69 sloc) 1.88 KB
#include "buffer.h"
#include "exit.h"
#include "fmt.h"
#include "scan.h"
#include "dns.h"
char ip[4];
int ipfixed = 0;
unsigned long loops = 10000;
unsigned char tab[256];
char strnum[FMT_ULONG];
char seed[128];
int main(int argc,char **argv)
{
unsigned long u;
int i;
int j;
unsigned char c;
dns_random_init(seed);
for (i = 0;i < 256;++i) tab[i] = i;
for (j = 256;j > 0;--j) {
i = dns_random(j);
c = tab[j - 1];
tab[j - 1] = tab[i];
tab[i] = c;
}
if (*argv) ++argv;
if (*argv) scan_ulong(*argv++,&loops);
if (*argv) { scan_ulong(*argv++,&u); ip[0] = u; ipfixed = 1; }
if (*argv) { scan_ulong(*argv++,&u); ip[1] = u; ipfixed = 2; }
if (*argv) { scan_ulong(*argv++,&u); ip[2] = u; ipfixed = 3; }
if (*argv) { scan_ulong(*argv++,&u); ip[3] = u; ipfixed = 4; }
if (ipfixed >= 1) if (loops > 16777216) loops = 16777216;
if (ipfixed >= 2) if (loops > 65536) loops = 65536;
if (ipfixed >= 3) if (loops > 256) loops = 256;
if (ipfixed >= 4) if (loops > 1) loops = 1;
while (loops) {
--loops;
u = loops;
for (i = ipfixed;i < 4;++i) { ip[i] = u & 255; u >>= 8; }
if (ipfixed == 3) {
c = ip[3];
ip[3] = tab[c];
}
else if (ipfixed < 3) {
c = 0;
for (j = 0;j < 100;++j) {
for (i = ipfixed;i < 4;++i) {
c ^= (unsigned char) ip[i];
c = tab[c];
ip[i] = c;
}
}
}
u = (unsigned char) ip[0];
buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
buffer_puts(buffer_1,".");
u = (unsigned char) ip[1];
buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
buffer_puts(buffer_1,".");
u = (unsigned char) ip[2];
buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
buffer_puts(buffer_1,".");
u = (unsigned char) ip[3];
buffer_put(buffer_1,strnum,fmt_ulong(strnum,u));
buffer_puts(buffer_1,"\n");
}
buffer_flush(buffer_1);
_exit(0);
}