for (i=0;i<TROJANSCAN_CLONE_TOTAL;i++)
if(trojanscan_swarm[i].clone) {
deregisterlocaluser(trojanscan_swarm[i].clone, NULL);
+ derefnode(iptree, trojanscan_swarm[i].fakeipnode);
trojanscan_swarm[i].clone = NULL;
}
trojanscan_free_database();
void trojanscan_generateclone(void *arg) {
int i, loops = 0, modes = UMODE_XOPER | UMODE_INV;
char c_nick[NICKLEN+1], c_ident[USERLEN+1], c_host[HOSTLEN+1], c_real[REALLEN+1];
- long fakeip;
+ patricia_node_t *fakeip;
i = (int)arg;
trojanscan_genreal(c_real, trojanscan_minmaxrand(15, TROJANSCAN_MMIN(50, REALLEN)));
trojanscan_swarm[i].clone = registerlocaluser(c_nick, c_ident, c_host, c_real, NULL, modes, &trojanscan_clonehandlemessages);
- trojanscan_swarm[i].fakeip = fakeip;
+ trojanscan_swarm[i].fakeipnode = fakeip;
if(trojanscan_swarm[i].clone && !trojanscan_swarm_created) {
nick *np = trojanscan_selectuser();
if ((!rc->remaining) && (!rc->sitting)) {
if (rc->clone) {
deregisterlocaluser(rc->clone, NULL);
+ derefnode(iptree, rc->fakeipnode);
rc->clone = NULL;
}
trojanscan_generateclone((void *)rc->index);
/* hack hack hack */
int trojanscan_nickbanned(trojanscan_clones *np, channel *cp) {
int ret;
- long realip = np->clone->ipaddress;
+ patricia_node_t *realipnode = np->clone->ipnode;
- np->clone->ipaddress = np->fakeip;
+ np->clone->ipnode = np->fakeipnode;
ret = nickbanned(np->clone, cp);
- np->clone->ipaddress = realip;
+ np->clone->ipnode = realipnode;
return ret;
}
glining = 0;
usercount = -1;
} else if (worm->glinehost && (hp->clonecount <= TROJANSCAN_MAX_HOST_GLINE)) {
- snprintf(glinemask, sizeof(glinemask) - 1, "*@%s", trojanscan_iptostr(ip, sizeof(ip) - 1, sender->ipaddress));
+ snprintf(glinemask, sizeof(glinemask) - 1, "*@%s", IPtostr(sender->p_ipaddr));
usercount = hp->clonecount;
}
else if (worm->glineuser || (worm->glinehost && hp->clonecount > TROJANSCAN_MAX_HOST_GLINE)) {
userbit = sender->ident;
if(userbit[0] == '~')
userbit++;
- snprintf(glinemask, sizeof(glinemask) - 1, "*%s@%s", userbit, trojanscan_iptostr(ip, sizeof(ip) - 1, sender->ipaddress));
+ snprintf(glinemask, sizeof(glinemask) - 1, "*%s@%s", userbit, IPtostr(sender->p_ipaddr));
for (j=0;j<NICKHASHSIZE;j++) {
for (np=nicktable[j];np;np=np->next) {
if ((np->host==hp) && (!ircd_strcmp(np->ident,sender->ident)))
ptc[i] = '\0';
}
-void trojanscan_genhost(char *ptc, char size, long *fakeip) {
+void trojanscan_genhost(char *ptc, char size, patricia_node_t **fakeipnode) {
int dots = trojanscan_minmaxrand(2, 5), i, dotexist = 0, cur;
-
+ struct irc_in_addr ipaddress;
+
while (!dotexist) {
for (i=0;i<size;i++) {
ptc[i] = trojanscan_genchar(0);
}
ptc[i] = '\0';
- *fakeip = (trojanscan_minmaxrand(0, 65535) << 16) | trojanscan_minmaxrand(0, 65535);
+ memset(&ipaddress, 0, sizeof(ipaddress));
+ ((unsigned short *)(ipaddress.in6_16))[5] = 0;
+ ((unsigned short *)(ipaddress.in6_16))[6] = trojanscan_minmaxrand(0, 65535);
+ ((unsigned short *)(ipaddress.in6_16))[7] = trojanscan_minmaxrand(0, 65535);
+
+ *fakeipnode = refnode(iptree, &ipaddress, PATRICIA_MAXBITS);
}
void trojanscan_genreal(char *ptc, char size) {
return NULL;
}
-void trojanscan_generatehost(char *buf, int maxsize, long *fakeip) {
+void trojanscan_generatehost(char *buf, int maxsize, patricia_node_t **fakeip) {
+ struct irc_in_addr ipaddress;
+
if(TROJANSCAN_HOST_MODE == TROJANSCAN_STEAL_HOST) {
host *hp;
int loops = 20;
if(hp && (hp->clonecount <= TROJANSCAN_MAX_CLONE_COUNT) && !trojanscan_isip(hp->name->content)) {
strlcpy(buf, hp->name->content, maxsize + 1);
if(hp->nicks) {
- *fakeip = hp->nicks->ipaddress;
+ *fakeip = hp->nicks->ipnode;
+ patricia_ref_prefix(hp->nicks->ipnode->prefix);
} else {
- *fakeip = (trojanscan_minmaxrand(0, 65535) << 16) | trojanscan_minmaxrand(0, 65535);
+ memset(&ipaddress, 0, sizeof(ipaddress));
+ ((unsigned short *)(ipaddress.in6_16))[5] = 0;
+ ((unsigned short *)(ipaddress.in6_16))[6] = trojanscan_minmaxrand(0, 65535);
+ ((unsigned short *)(ipaddress.in6_16))[7] = trojanscan_minmaxrand(0, 65535);
+
+ *fakeip = refnode(iptree, &ipaddress, PATRICIA_MAXBITS);
}
break;
}
free(choices);
free(lengths);
- *fakeip = (trojanscan_minmaxrand(0, 65535) << 16) | trojanscan_minmaxrand(0, 65535);
+ memset(&ipaddress, 0, sizeof(ipaddress));
+ ((unsigned short *)(ipaddress.in6_16))[5] = 0;
+ ((unsigned short *)(ipaddress.in6_16))[6] = trojanscan_minmaxrand(0, 65535);
+ ((unsigned short *)(ipaddress.in6_16))[7] = trojanscan_minmaxrand(0, 65535);
+
+ *fakeip = refnode(iptree, &ipaddress, PATRICIA_MAXBITS);
}
}
#define TROJANSCAN_POOLSIZE 1000
#define TROJANSCAN_MINPOOLSIZE 500 /* 500 */
-#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 5000 /* 500 */
+#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 500 /* 500 */
#define TROJANSCAN_DEFAULT_MAXCHANS 750
#define TROJANSCAN_DEFAULT_CYCLETIME 800
typedef struct trojanscan_clones {
int remaining, sitting, index;
nick *clone;
- long fakeip;
+ patricia_node_t *fakeipnode;
} trojanscan_clones;
typedef struct trojanscan_channels {
char trojanscan_genchar(int ty);
void trojanscan_gennick(char *ptc, char size);
void trojanscan_genident(char *ptc, char size);
-void trojanscan_genhost(char *ptc, char size, long *fakeip);
+void trojanscan_genhost(char *ptc, char size, patricia_node_t **fakeipnode);
int trojanscan_generatepool(void);
void trojanscan_watch_clone_update(struct trojanscan_prechannels *hp, int count);
void trojanscan_repool(void *arg);
-void trojanscan_generatehost(char *buf, int maxsize, long *fakeip);
+void trojanscan_generatehost(char *buf, int maxsize, patricia_node_t **fakeipnode);
void trojanscan_generatenick(char *buf, int maxsize);
void trojanscan_generateident(char *buf, int maxsize);
void trojanscan_generaterealname(char *buf, int maxsize);