w00p. We on a roll now girls. libopm works. Detects Open Proxies. Cleans up after itself. Now have toadd new /msg opsb set interface etc... leave that for another day... I'm melting now!
This commit is contained in:
parent
7cb4295207
commit
48daac5382
3 changed files with 50 additions and 31 deletions
6
opsb.c
6
opsb.c
|
@ -217,7 +217,6 @@ int __Bot_Message(char *origin, char **argv, int argc)
|
||||||
scandata = malloc(sizeof(scaninfo));
|
scandata = malloc(sizeof(scaninfo));
|
||||||
scandata->doneban = 0;
|
scandata->doneban = 0;
|
||||||
scandata->u = u;
|
scandata->u = u;
|
||||||
scandata->socks = NULL;
|
|
||||||
if ((u2 = finduser(argv[2])) != NULL) {
|
if ((u2 = finduser(argv[2])) != NULL) {
|
||||||
/* don't scan users from my server */
|
/* don't scan users from my server */
|
||||||
if (!strcasecmp(u2->server->name, me.name)) {
|
if (!strcasecmp(u2->server->name, me.name)) {
|
||||||
|
@ -843,7 +842,6 @@ static int ScanNick(char **av, int ac) {
|
||||||
scandata = malloc(sizeof(scaninfo));
|
scandata = malloc(sizeof(scaninfo));
|
||||||
scandata->u = NULL;
|
scandata->u = NULL;
|
||||||
scandata->doneban = 0;
|
scandata->doneban = 0;
|
||||||
scandata->socks = NULL;
|
|
||||||
strncpy(scandata->who, u->nick, MAXHOST);
|
strncpy(scandata->who, u->nick, MAXHOST);
|
||||||
strncpy(scandata->lookup, u->hostname, MAXHOST);
|
strncpy(scandata->lookup, u->hostname, MAXHOST);
|
||||||
strncpy(scandata->server, u->server->name, MAXHOST);
|
strncpy(scandata->server, u->server->name, MAXHOST);
|
||||||
|
@ -1034,10 +1032,12 @@ void dnsblscan(char *data, adns_answer *a) {
|
||||||
do_ban(scandata);
|
do_ban(scandata);
|
||||||
#endif
|
#endif
|
||||||
checkqueue();
|
checkqueue();
|
||||||
} else
|
} else {
|
||||||
if (scandata->u) prefmsg(scandata->u->nick, s_opsb, "%s does not appear in DNS black list", scandata->lookup);
|
if (scandata->u) prefmsg(scandata->u->nick, s_opsb, "%s does not appear in DNS black list", scandata->lookup);
|
||||||
nlog(LOG_DEBUG1, LOG_MOD, "Got Negative OPM lookup for %s (%s)", scandata->who, scandata->lookup);
|
nlog(LOG_DEBUG1, LOG_MOD, "Got Negative OPM lookup for %s (%s)", scandata->who, scandata->lookup);
|
||||||
scandata->dnsstate = NOOPMLIST;
|
scandata->dnsstate = NOOPMLIST;
|
||||||
|
}
|
||||||
|
check_scan_free(scandata);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
nlog(LOG_WARNING, LOG_MOD, "Warning, Unknown Status in dnsblscan()");
|
nlog(LOG_WARNING, LOG_MOD, "Warning, Unknown Status in dnsblscan()");
|
||||||
|
|
18
opsb.h
18
opsb.h
|
@ -16,7 +16,6 @@
|
||||||
typedef struct proxy_types {
|
typedef struct proxy_types {
|
||||||
char *type;
|
char *type;
|
||||||
int port;
|
int port;
|
||||||
int (*scan)(int sock);
|
|
||||||
int nofound;
|
int nofound;
|
||||||
int noopen;
|
int noopen;
|
||||||
} proxy_types;
|
} proxy_types;
|
||||||
|
@ -43,7 +42,6 @@ struct scanq {
|
||||||
struct in_addr ipaddr;
|
struct in_addr ipaddr;
|
||||||
User *u;
|
User *u;
|
||||||
int doreport;
|
int doreport;
|
||||||
list_t *socks;
|
|
||||||
time_t started;
|
time_t started;
|
||||||
int doneban;
|
int doneban;
|
||||||
char connectstring[BUFSIZE];
|
char connectstring[BUFSIZE];
|
||||||
|
@ -72,14 +70,6 @@ struct opsb {
|
||||||
int opmhits;
|
int opmhits;
|
||||||
} opsb;
|
} opsb;
|
||||||
|
|
||||||
struct sockinfo {
|
|
||||||
int sock;
|
|
||||||
int (*function)(int sock);
|
|
||||||
int flags;
|
|
||||||
int type;
|
|
||||||
int bytes;
|
|
||||||
char buf[2048];
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct sockinfo socklist;
|
typedef struct sockinfo socklist;
|
||||||
|
|
||||||
|
@ -122,12 +112,8 @@ list_t *exempt;
|
||||||
#define GOTOPENPROXY 0x0010
|
#define GOTOPENPROXY 0x0010
|
||||||
#define OPMLIST 0x0020
|
#define OPMLIST 0x0020
|
||||||
#define NOOPMLIST 0x0040
|
#define NOOPMLIST 0x0040
|
||||||
|
#define FIN_SCAN 0x0080
|
||||||
|
|
||||||
/* this is some socklist flags */
|
|
||||||
#define CONNECTING 0x0001
|
|
||||||
#define SOCKCONNECTED 0x0002
|
|
||||||
#define UNCONNECTED 0x0004
|
|
||||||
#define OPENPROXY 0x0008
|
|
||||||
|
|
||||||
/* opsb.c */
|
/* opsb.c */
|
||||||
int findscan(const void *key1, const void *key2);
|
int findscan(const void *key1, const void *key2);
|
||||||
|
@ -139,6 +125,6 @@ void addtocache(unsigned long ipaddr);
|
||||||
/* proxy.c */
|
/* proxy.c */
|
||||||
void start_proxy_scan(lnode_t *scannode);
|
void start_proxy_scan(lnode_t *scannode);
|
||||||
void send_status(User *u);
|
void send_status(User *u);
|
||||||
|
void check_scan_free(scaninfo *scandata);
|
||||||
|
|
||||||
#endif /* OPSB_H */
|
#endif /* OPSB_H */
|
||||||
|
|
57
proxy.c
57
proxy.c
|
@ -84,7 +84,21 @@ int init_libopm() {
|
||||||
opm_config(scanner, OPM_CONFIG_MAX_READ, &opsb.maxbytes);
|
opm_config(scanner, OPM_CONFIG_MAX_READ, &opsb.maxbytes);
|
||||||
|
|
||||||
opm_addtype(scanner, OPM_TYPE_HTTP, 8080);
|
opm_addtype(scanner, OPM_TYPE_HTTP, 8080);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTP, 80);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTP, 3128);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTP, 31);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTP, 8000);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTPPOST, 8080);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTPPOST, 80);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTPPOST, 3128);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTPPOST, 31);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_HTTPPOST, 8000);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_WINGATE, 23);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_ROUTER, 23);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_SOCKS4, 1080);
|
||||||
|
opm_addtype(scanner, OPM_TYPE_SOCKS5, 1080);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* add the sock poll interface into neo */
|
/* add the sock poll interface into neo */
|
||||||
add_sockpoll("libopm_before_poll", "libopm_after_poll", "opsb", "opsb", scanner);
|
add_sockpoll("libopm_before_poll", "libopm_after_poll", "opsb", "opsb", scanner);
|
||||||
|
@ -119,10 +133,10 @@ void open_proxy(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused)
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
#endif
|
#endif
|
||||||
/* no point continuing the scan if they are found open */
|
/* no point continuing the scan if they are found open */
|
||||||
|
scandata->state = GOTOPENPROXY;
|
||||||
opm_end(scanner, remote);
|
opm_end(scanner, remote);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (scandata->dnsstate == OPMLIST) {
|
if (scandata->dnsstate == OPMLIST) {
|
||||||
scandata->doneban = 1;
|
scandata->doneban = 1;
|
||||||
|
@ -145,7 +159,6 @@ void negfailed(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused)
|
||||||
if (scandata->u) {
|
if (scandata->u) {
|
||||||
prefmsg(scandata->u->nick, s_opsb, "Negitiation failed for protocol %d (%d)", remote->protocol, remote->port);
|
prefmsg(scandata->u->nick, s_opsb, "Negitiation failed for protocol %d (%d)", remote->protocol, remote->port);
|
||||||
}
|
}
|
||||||
/*XXX Do anything.. I dont think so */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void timeout(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
void timeout(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
||||||
|
@ -157,7 +170,6 @@ void timeout(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
||||||
if (scandata->u) {
|
if (scandata->u) {
|
||||||
prefmsg(scandata->u->nick, s_opsb, "Timeout on Protocol %d (%d)", remote->protocol, remote->port);
|
prefmsg(scandata->u->nick, s_opsb, "Timeout on Protocol %d (%d)", remote->protocol, remote->port);
|
||||||
}
|
}
|
||||||
/*XXX Do anything? I don't think so */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void scan_end(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
void scan_end(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
||||||
|
@ -169,7 +181,8 @@ void scan_end(OPM_T *scanner, OPM_REMOTE_T *remote, int notused, void *unused) {
|
||||||
if (scandata->u) {
|
if (scandata->u) {
|
||||||
prefmsg(scandata->u->nick, s_opsb, "scan finished %d %d", remote->protocol, remote->port);
|
prefmsg(scandata->u->nick, s_opsb, "scan finished %d %d", remote->protocol, remote->port);
|
||||||
}
|
}
|
||||||
/*XXX we have to cleanup here */
|
if (scandata->state != GOTOPENPROXY) scandata->state = FIN_SCAN;
|
||||||
|
check_scan_free(scandata);
|
||||||
}
|
}
|
||||||
|
|
||||||
void scan_error(OPM_T *scanner, OPM_REMOTE_T *remote, int opmerr, void *unused) {
|
void scan_error(OPM_T *scanner, OPM_REMOTE_T *remote, int opmerr, void *unused) {
|
||||||
|
@ -190,9 +203,8 @@ void scan_error(OPM_T *scanner, OPM_REMOTE_T *remote, int opmerr, void *unused)
|
||||||
#endif
|
#endif
|
||||||
scandata = remote->data;
|
scandata = remote->data;
|
||||||
if (scandata->u) {
|
if (scandata->u) {
|
||||||
prefmsg(scandata->u->nick, s_opsb, "scan error on Protocol %d (%d)", remote->protocol, remote->port);
|
prefmsg(scandata->u->nick, s_opsb, "scan error on Protocol %d (%d) - %d", remote->protocol, remote->port, opmerr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*XXX cleanup */
|
/*XXX cleanup */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -273,20 +285,41 @@ void start_proxy_scan(lnode_t *scannode) {
|
||||||
scandata->started = time(NULL);
|
scandata->started = time(NULL);
|
||||||
|
|
||||||
if ((opsb.doscan == 1) || (scandata->u)) {
|
if ((opsb.doscan == 1) || (scandata->u)) {
|
||||||
nlog(LOG_DEBUG2, LOG_MOD, "Starting Scan on %s", inet_ntoa(scandata->ipaddr));
|
|
||||||
remote = opm_remote_create(inet_ntoa(scandata->ipaddr));
|
remote = opm_remote_create(inet_ntoa(scandata->ipaddr));
|
||||||
remote->data = scandata;
|
remote->data = scandata;
|
||||||
switch(i = opm_scan(scanner, remote))
|
switch(i = opm_scan(scanner, remote))
|
||||||
{
|
{
|
||||||
case OPM_SUCCESS:
|
case OPM_SUCCESS:
|
||||||
|
nlog(LOG_DEBUG2, LOG_MOD, "Starting Scan on %s", inet_ntoa(scandata->ipaddr));
|
||||||
break;
|
break;
|
||||||
case OPM_ERR_BADADDR:
|
case OPM_ERR_BADADDR:
|
||||||
printf("Bad address\n");
|
nlog(LOG_WARNING, LOG_MOD, "Scan of %s %s Failed. Bad Address?", scandata->who, inet_ntoa(scandata->ipaddr));
|
||||||
opm_remote_free(remote);
|
opm_remote_free(remote);
|
||||||
/* XXX do what else ? */
|
scandata->state = FIN_SCAN;
|
||||||
default:
|
check_scan_free(scandata);
|
||||||
printf("Unknown Error %d\n", i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
void check_scan_free(scaninfo *scandata) {
|
||||||
|
lnode_t *scannode;
|
||||||
|
if ((scandata->dnsstate == DO_OPM_LOOKUP) || (scandata->dnsstate == GET_NICK_IP) || (scandata->state == DOING_SCAN)) {
|
||||||
|
nlog(LOG_DEBUG2, LOG_MOD, "Not Cleaning up Scaninfo for %s yet. Scan hasn't completed", scandata->who);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((scandata->dnsstate != OPMLIST) && (scandata->state != GOTOPENPROXY)) {
|
||||||
|
addtocache(scandata->ipaddr.s_addr);
|
||||||
|
nlog(LOG_DEBUG1, LOG_MOD, "%s's Host is clean. Adding to Cache", scandata->who);
|
||||||
|
}
|
||||||
|
scannode = list_find(opsbl, scandata->who, findscan);
|
||||||
|
if (scannode) {
|
||||||
|
nlog(LOG_DEBUG1, LOG_MOD, "%s scan finished. Cleaning up", scandata->who);
|
||||||
|
list_delete(opsbl, scannode);
|
||||||
|
lnode_destroy(scannode);
|
||||||
|
scandata->u = NULL;
|
||||||
|
free(scandata);
|
||||||
|
} else {
|
||||||
|
nlog(LOG_WARNING, LOG_MOD, "Damn, Can't find ScanNode %s. Something is fubar", scandata->who);
|
||||||
|
}
|
||||||
|
checkqueue();
|
||||||
|
}
|
Reference in a new issue