freesstring(cfgstr);
/* Max concurrent scans */
- cfgstr=getcopyconfigitem("proxyscan","maxscans","200",5);
+ cfgstr=getcopyconfigitem("proxyscan","maxscans","200",10);
maxscans=strtol(cfgstr->content,NULL,10);
freesstring(cfgstr);
addcommandtotree(ps_commands, "status", 0, 0, &proxyscandostatus);
addcommandtotree(ps_commands, "listopen", 0, 0, &proxyscandolistopen);
addcommandtotree(ps_commands, "save", 0, 0, &proxyscandosave);
- addcommandtotree(ps_commands, "spew", 0, 0, &proxyscandospew);
- addcommandtotree(ps_commands, "showkill", 0, 0, &proxyscandoshowkill);
- addcommandtotree(ps_commands, "scan", 0, 0, &proxyscandoscan);
- addcommandtotree(ps_commands, "addscan", 0, 0, &proxyscandoaddscan);
- addcommandtotree(ps_commands, "delscan", 0, 0, &proxyscandodelscan);
+ addcommandtotree(ps_commands, "spew", 0, 1, &proxyscandospew);
+ addcommandtotree(ps_commands, "showkill", 0, 1, &proxyscandoshowkill);
+ addcommandtotree(ps_commands, "scan", 0, 1, &proxyscandoscan);
+ addcommandtotree(ps_commands, "addscan", 0, 1, &proxyscandoaddscan);
+ addcommandtotree(ps_commands, "delscan", 0, 1, &proxyscandodelscan);
/* Default scan types */
proxyscan_addscantype(STYPE_HTTP, 8080);
sp->totalbytesread=0;
memset(sp->readbuf, '\0', PSCAN_READBUFSIZE);
- sp->fd=createconnectsocket(irc_in_addr_v4_to_int(&((patricia_node_t *)sp->node)->prefix->sin),sp->port);
+ sp->fd=createconnectsocket(&((patricia_node_t *)sp->node)->prefix->sin,sp->port);
sp->state=SSTATE_CONNECTING;
if (sp->fd<0) {
/* Couldn't set up the socket? */
int proxyscandospew(void *sender, int cargc, char **cargv) {
nick *np = (nick *)sender;
+ if(cargc < 1)
+ return CMD_USAGE;
+
/* check our database for the ip supplied */
unsigned long a,b,c,d;
if (4 != sscanf(cargv[0],"%lu.%lu.%lu.%lu",&a,&b,&c,&d)) {
int proxyscandoshowkill(void *sender, int cargc, char **cargv) {
nick *np = (nick *)sender;
+ if(cargc < 1)
+ return CMD_USAGE;
+
/* check our database for the id supplied */
unsigned long a;
if (1 != sscanf(cargv[0],"%lu",&a)) {
unsigned char bits;
int i;
+ if(cargc < 1)
+ return CMD_USAGE;
+
if (0 == ipmask_parse(cargv[0],&sin, &bits)) {
sendnoticetouser(proxyscannick,np,"Usage: scan <ip>");
} else {
- if (bits != 128 || !irc_in_addr_is_ipv4(&sin) || irc_in_addr_is_loopback(&sin)) {
- sendnoticetouser(proxyscannick,np,"You may only scan single IPv4 IP's");
+ if (bits != 128 || irc_in_addr_is_loopback(&sin)) {
+ sendnoticetouser(proxyscannick,np,"You may only scan single IP's");
return CMD_OK;
}
int proxyscandoaddscan(void *sender, int cargc, char **cargv) {
nick *np = (nick *)sender;
+ if(cargc < 1)
+ return CMD_USAGE;
+
unsigned int a,b;
if (sscanf(cargv[0],"%u %u",&a,&b) != 2) {
sendnoticetouser(proxyscannick,np,"Usage: addscan <type> <port>");
int proxyscandodelscan(void *sender, int cargc, char **cargv) {
nick *np = (nick *)sender;
+ if(cargc < 1)
+ return CMD_USAGE;
+
unsigned int a,b;
if (sscanf(cargv[0],"%u %u",&a,&b) != 2) {
sendnoticetouser(proxyscannick,np,"Usage: delscan <type> <port>");
#include <sys/ioctl.h>
#include <string.h>
-int createconnectsocket(long ip, int socknum) {
- int fd;
- struct sockaddr_in sin;
+int createconnectsocket(struct irc_in_addr *ip, int socknum) {
+ union {
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+ } u;
+
+ int proto;
+ int s;
int res=1;
unsigned int opt=1;
-
- memset(&sin,0,sizeof(sin));
-
- sin.sin_family=AF_INET;
- sin.sin_port=htons(socknum);
- sin.sin_addr.s_addr=htonl(ip);
-
- if ((fd=socket(AF_INET,SOCK_STREAM,0))<0) {
+ int fd;
+
+ if(irc_in_addr_is_ipv4(ip)) {
+ s = sizeof(u.sin);
+ proto=u.sin.sin_family=AF_INET;
+ u.sin.sin_port=htons(socknum);
+ u.sin.sin_addr.s_addr=htonl(irc_in_addr_v4_to_int(ip));
+ } else {
+ s = sizeof(u.sin6);
+ proto=u.sin6.sin6_family=AF_INET6;
+ u.sin6.sin6_port=htons(socknum);
+ memcpy(&u.sin6.sin6_addr.s6_addr, ip->in6_16, sizeof(ip->in6_16));
+ }
+
+ if ((fd=socket(proto,SOCK_STREAM,0))<0) {
Error("proxyscan",ERR_ERROR,"Unable to create socket (%d)",errno);
return -1;
}
Error("proxyscan",ERR_WARNING,"Error selecting high port range.");
}
#endif
- if (connect(fd,(const struct sockaddr *) &sin, sizeof(sin))) {
+
+ if (connect(fd,(const struct sockaddr *) &u, s)) {
if (errno != EINPROGRESS) {
Error("proxyscan",ERR_ERROR,"Unable to connect socket (%d)",errno);
return -1;
}
- }
+ }
+
return fd;
}
-