OPM_CONFIG_BIND_IP char * IP to bind to for outgoing scans
- OPM_CONFIG_TARGET_STRING char * Target string used to verify open proxies
+ OPM_CONFIG_TARGET_STRING list of char * Target strings used to verify open proxies
OPM_CONFIG_SCAN_IP char * IP to command proxies to connect to
opm_config(scanner, OPM_CONFIG_FD_LIMIT, &fd_limit);
opm_config(scanner, OPM_CONFIG_MAX_READ, &max_read);
opm_config(scanner, OPM_CONFIG_BIND_IP, "10.0.0.1");
+ opm_config(scanner, OPM_CONFIG_TARGET_STRING, "Match1");
+ opm_config(scanner, OPM_CONFIG_TARET_STRING, "Match2");
opm_free(scanner);
#include "inet.h"
#include "opm_error.h"
#include "opm_types.h"
+#include "opm_common.h"
+#include "list.h"
+
#ifdef STDC_HEADERS
# include <string.h>
#endif
{OPM_CONFIG_FD_LIMIT, OPM_TYPE_INT},
{OPM_CONFIG_BIND_IP , OPM_TYPE_ADDRESS},
{OPM_CONFIG_DNSBL_HOST, OPM_TYPE_STRING},
- {OPM_CONFIG_TARGET_STRING, OPM_TYPE_STRING},
+ {OPM_CONFIG_TARGET_STRING, OPM_TYPE_STRINGLIST},
{OPM_CONFIG_SCAN_IP, OPM_TYPE_STRING},
{OPM_CONFIG_SCAN_PORT, OPM_TYPE_INT},
{OPM_CONFIG_MAX_READ, OPM_TYPE_INT},
OPM_TYPE_INT = 0
OPM_TYPE_STRING = ""
OPM_TYPE_ADDRESS = 0.0.0.0
-
+ OPM_TYPE_STRINGLIST = empty list
*/
for(i = 0; i < num; i++)
ret->vars[i] = MyMalloc(sizeof(int));
*(int *) ret->vars[i] = 0;
break;
+
case OPM_TYPE_STRING:
(char *) ret->vars[i] = strdup("");
break;
+
case OPM_TYPE_ADDRESS:
(opm_sockaddr *) ret->vars[i] = MyMalloc(sizeof(opm_sockaddr));
memset((opm_sockaddr *) ret->vars[i], 0, sizeof(opm_sockaddr));
break;
+
+ case OPM_TYPE_STRINGLIST:
+ (OPM_LIST_T *) ret->vars[i] = libopm_list_create();
+ break;
default:
ret->vars[i] = NULL;
}
void libopm_config_free(OPM_CONFIG_T *config)
{
int num, i;
+ OPM_NODE_T *p, *next;
+ OPM_LIST_T *list;
+
num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T);
for(i = 0; i < num; i++)
{
-
if(config->vars[i] == NULL)
continue;
- else
- MyFree(config->vars[i]);
-
+
+ switch(libopm_config_gettype(i))
+ {
+ case OPM_TYPE_STRINGLIST:
+ list = (OPM_LIST_T *) config->vars[i];
+ LIST_FOREACH_SAFE(p, next, list->head)
+ {
+ MyFree(p->data);
+ MyFree(p);
+ }
+ break;
+ default:
+ MyFree(config->vars[i]);
+ break;
+ }
}
MyFree(config->vars);
{
int num, i;
+ OPM_NODE_T *node;
num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T);
return OPM_ERR_BADVALUE; /* return appropriate err code */
break;
+ case OPM_TYPE_STRINGLIST:
+ node = libopm_node_create(strdup((char *) value));
+ libopm_list_add((OPM_LIST_T *) config->vars[key], node);
+ break;
+
default:
return OPM_ERR_BADKEY; /* return appropriate err code */
static void libopm_do_read(OPM_T *scanner, OPM_SCAN_T *scan, OPM_CONNECTION_T *conn)
{
+ OPM_LIST_T *list;
+ OPM_NODE_T *node;
char *target_string;
-
- target_string = (char *) libopm_config(scanner->config, OPM_CONFIG_TARGET_STRING);
- if(strstr(conn->readbuf, target_string))
- libopm_do_openproxy(scanner, scan, conn);
+ //Check readbuf against target strings
+ list = (OPM_LIST_T *) libopm_config(scanner->config, OPM_CONFIG_TARGET_STRING);
+ LIST_FOREACH(node, list->head)
+ {
+ target_string = (char *) node->data;
+ if(strstr(conn->readbuf, target_string))
+ libopm_do_openproxy(scanner, scan, conn);
+ }
}
#define OPM_TYPE_INT 1
#define OPM_TYPE_STRING 2
#define OPM_TYPE_ADDRESS 3
+#define OPM_TYPE_STRINGLIST 4
/* Protocols */
#define OPM_TYPE_HTTP 1
/* Setup the scanner configuration */
opm_config(scanner, OPM_CONFIG_FD_LIMIT, &fdlimit);
- opm_config(scanner, OPM_CONFIG_SCAN_IP, "203.56.139.100");
+ opm_config(scanner, OPM_CONFIG_SCAN_IP, "216.175.104.202");
opm_config(scanner, OPM_CONFIG_SCAN_PORT, &scan_port);
opm_config(scanner, OPM_CONFIG_TARGET_STRING, "*** Looking up your hostname...");
+ opm_config(scanner, OPM_CONFIG_TARGET_STRING, "ERROR :Trying to reconnect too fast.");
opm_config(scanner, OPM_CONFIG_TIMEOUT, &scantimeout);
opm_config(scanner, OPM_CONFIG_MAX_READ, &max_read);