Code: Show/Hide local helptext_t qip_help =
"Targets: none or player\n" "Args: -i<ip address or pattern> -l<limit>\n" "Queries the alias database for players connecting from that ip.\n" "Queries can be an exact address, ?qip -i216.34.65.%, or ?qip -i216.34.65.0/24.\n"; local void Cqip(const char *params, Player *p, const Target *target) { char ip [256]; unsigned int limit; if (target->type != T_ARENA && target->type != T_PLAYER) return; if (!strstr(params,"-i") && target->type != T_PLAYER) return; p->flags.during_query = 1; if (strstr(params,"-l")) { limit = atoi(strstr(params,"-l")+2); if ( limit < 1 ) limit = 1; if ( limit > 500 ) limit = 500; } else { limit = 50; } if (target->type == T_PLAYER) { db->Query(dbcb_nameipmac, p, 1, "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago " "from " TABLE_NAME " " "where ip = inet_aton(?) " "order by name " "limit # ", target->u.p->ipaddr, limit); } else { if (strchr(strstr(params,"-i")+2, ' ')) { ip [strchr(strstr(params,"-i")+2, ' ')-params-2] = 0; strncpy ( ip, strstr(params,"-i")+2, strchr(strstr(params,"-i")+2, ' ')-params-2); } else { strcpy ( ip, strstr(params,"-i")+2); } if (strchr(params, '/')) { char baseip[16]; const char *next; unsigned int bits; next = delimcpy(baseip, ip, sizeof(baseip), '/'); if (!next) return; bits = atoi(next); db->Query(dbcb_nameipmac, p, 1, "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago " "from " TABLE_NAME " " "where (ip & ((~0) << (32-#))) = (inet_aton(?) & ((~0) << (32-#))) " "order by name " "limit # ", bits, baseip, bits, limit); } else if (strchr(ip, '%')) { /* this is going to be a really really slow query... */ db->Query(dbcb_nameipmac, p, 1, "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago " "from " TABLE_NAME " " "where inet_ntoa(ip) like ? " "order by name " "limit #", ip, limit); } else /* try exact ip match */ { db->Query(dbcb_nameipmac, p, 1, "select name, inet_ntoa(ip), macid, to_days(now()) - to_days(lastseen) as daysago " "from " TABLE_NAME " " "where ip = inet_aton(?) " "order by name " "limit # ", ip, limit); } } } |