Пример #1
0
int main(int argc, char *argv[]) {
	char *in_if = NULL;
	char *out_if = NULL;
	char *in_file = NULL;
	char *out_file = NULL;
	TableStateMachine *machine;
	char *patterns = NULL;
	int i;
	char *param, *arg;
	int auto_mode, no_report, batch, max_rules;
	int num_workers;


	// ************* BEGIN DEBUG
	//struct pcap_pkthdr pkthdr;
	//char pkt[2048];
	//ProcessorData *processor;
	// ************* END


	auto_mode = 0;
	no_report = 0;
	num_workers = 1;
	batch = 0;
	max_rules = 0;

	if (argc > 1) {
		for (i = 1; i < argc; i++) {
			param = strsep(&argv[i], "=");
			arg = argv[i];
			if (strcmp(param, "in") == 0) {
				in_if = arg;
			} else if (strcmp(param, "out") == 0) {
				out_if = arg;
			} else if (strcmp(param, "infile") == 0) {
				in_file = arg;
			} else if (strcmp(param, "outfile") == 0) {
				out_file = arg;
			} else if (strcmp(param, "rules") == 0) {
				patterns = arg;
			} else if (strcmp(param, "max") == 0) {
				max_rules = atoi(arg);
			} else if (strcmp(param, "workers") == 0) {
				num_workers = atoi(arg);
			} else if (strcmp(param, "noreport") == 0) {
				no_report = 1;
			} else if (strcmp(param, "batch") == 0) {
				batch = 1;
			} else if (strcmp(param, "auto") == 0) {
				auto_mode = 1;
				break;
			}
		}
	}

	if (auto_mode == 0 && ((in_if == NULL && in_file == NULL) || (out_if == NULL && out_file == NULL) || patterns == NULL || max_rules < 0 || num_workers < 1)) {
		// Show usage
		fprintf(stderr, USAGE, argv[0]);
		exit(1);
	} else if (auto_mode == 1) {
		// Set defaults
		in_if = "eth0:1";
		out_if = "eth0:2";
		patterns = "../../SnortPatternsFull2.json";
		max_rules = 0;
		num_workers = 1;
	}

	machine = generateTableStateMachine(patterns, max_rules, 0);

	// ************* BEGIN DEBUG
	//void process_packet(unsigned char *arg, const struct pcap_pkthdr *pkthdr, const unsigned char *packetptr)
	//processor = init_processor(machine, NULL, NULL, 0);
	//strcpy(pkt,"008g");
	//process_packet((unsigned char *)processor, &pkthdr, (unsigned char*)pkt);
	// ************* END


	sniff(in_if, out_if, in_file, out_file, machine, num_workers, no_report, batch);

	return 0;
}
Пример #2
0
int main(int argc, const char *argv[]) {
/*
	main_findLongestPath();
	return 0;

 */
	StateMachine *machine;
#ifdef HYBRID_SCANNER
	TableStateMachine *tableMachine;
	double thresholds[128];
#endif
	int options[NUM_OF_OPTIONS]; // [ c, d, r, s, a, f, l, b, m, p, n, v, t, u ]
	const char *paths[NUM_OF_STRING_OPTIONS];
	int values[NUM_OF_OPTIONS];
	int i, idx;

	machine = NULL;

	if (argc < 3 || argc >= NUM_OF_OPTIONS) {
		showUsage(argv[0]);
	}

	memset(options, 0, NUM_OF_OPTIONS * sizeof(int));
	memset(paths, 0, NUM_OF_STRING_OPTIONS * sizeof(char*));
	memset(values, 0, NUM_OF_OPTIONS * sizeof(int));

	idx = -1;

	for (i = 1; i < argc; i++) {
		if (argv[i][0] != '-') {
			showUsage(argv[0]);
		}

		switch (argv[i][1]) {
		case OPTION_CREATE:
			idx = IDX_CREATE;
			break;
		case OPTION_DUMP:
			idx = IDX_DUMP;
			break;
		case OPTION_READ:
			idx = IDX_READ;
			break;
		case OPTION_SCAN:
			idx = IDX_SCAN;
			break;
		case OPTION_FULLTBL:
			idx = IDX_FULLTBL;
			break;
		case OPTION_COMMON:
			idx = IDX_COMMON;
			break;
		case OPTION_THRESHOLDS:
			idx = IDX_THRESHOLDS;
			break;
		case OPTION_MAXLE:
			idx = IDX_MAXLE;
			break;
		case OPTION_MAXBM:
			idx = IDX_MAXBM;
			break;
		case OPTION_THREADS:
			idx = IDX_THREADS;
			break;
		case OPTION_STEAL:
			idx = IDX_STEAL;
			break;
		case OPTION_REPEAT:
			idx = IDX_REPEAT;
			break;
		case OPTION_WG_SIZE:
			idx = IDX_WG_SIZE;
			break;
		case OPTION_MAX_WGS:
			idx = IDX_MAX_WGS;
			break;
		case OPTION_COMMON_NUM:
			idx = IDX_COMMON_NUM;
			break;
		case OPTION_UNCOMMON_LIM:
			idx = IDX_UNCOMMON_LIM;
			break;
		case OPTION_DROP_LEN:
			idx = IDX_DROP_LEN;
			break;
		case OPTION_VERBOSE:
			idx = IDX_VERBOSE;
			break;
		case OPTION_TIMING:
			idx = IDX_TIMING;
			break;
		case OPTION_USE_COMP:
			idx = IDX_USE_COMP;
			break;
		default:
			showUsage(argv[0]);
		}

		options[idx] = 1;

		if (idx < (NUM_OF_NUMERIC_OPTIONS + NUM_OF_STRING_OPTIONS)) {
			// c, d, r, s, a, f, l, b, m, p
			if (argv[i][2] != OPTION_SEPARATOR) {
				showUsage(argv[0]);
			}

			if (idx < NUM_OF_STRING_OPTIONS) {
				// String options
				// c, d, r, s, a, f
				paths[idx] = &(argv[i][3]);
			} else {
				// Numeric options
				// l, b, m, p, n
				values[idx] = atoi(&(argv[i][3]));
			}
		} else {
			// Boolean options
			// v, t, u
			// do nothing here
		}
	}
	if (!checkOptionsValidity(options)) {
		showUsage(argv[0]);
	}

	if (!options[IDX_MAXLE]) {
		values[IDX_MAXLE] = DEFAULT_MAX_GOTOS_LE;
	}
	if (!options[IDX_MAXBM]) {
		values[IDX_MAXBM] = DEFAULT_MAX_GOTOS_BM;
	}
	if (!options[IDX_THREADS]) {
		values[IDX_THREADS] = DEFAULT_NUM_THREADS;
	}
	if (!options[IDX_STEAL]) {
		values[IDX_STEAL] = DEFAULT_STEAL;
	}
	if (!options[IDX_REPEAT]) {
		values[IDX_REPEAT] = DEFAULT_REPEAT;
	}
	if (!options[IDX_WG_SIZE]) {
		values[IDX_WG_SIZE] = DEFAULT_WG_SIZE;
	}
	if (!options[IDX_MAX_WGS]) {
		values[IDX_MAX_WGS] = DEFAULT_MAX_WGS;
	}
	if (!options[IDX_COMMON_NUM]) {
		fprintf(stderr, "Warning: no value is given as number of common states (-C), using default: %d.\n", DEFAULT_COMMON_NUM);
		values[IDX_COMMON_NUM] = DEFAULT_COMMON_NUM;
	}
	if (!options[IDX_UNCOMMON_LIM]) {
		fprintf(stderr, "Warning: no value is given as a threshold of uncommon states to mark heavy packets (-U), using default: %d%%.\n", DEFAULT_UNCOMMON_LIM);
		values[IDX_UNCOMMON_LIM] = DEFAULT_UNCOMMON_LIM;
	}
	if (!options[IDX_DROP_LEN]) {
		values[IDX_DROP_LEN] = DEFAULT_DROP_LEN;
	}

#ifdef HYBRID_SCANNER
	tableMachine = NULL;
#endif

	if (options[IDX_CREATE]) {
		machine = createStateMachine(paths[IDX_CREATE], values[IDX_MAXLE], values[IDX_MAXBM], options[IDX_VERBOSE]);
		//machine = createSimpleStateMachine(paths[0], values[0], values[1], options[8]);
#ifndef HYBRID_SCANNER
	} else if (options[IDX_READ]) {
		machine = createStateMachineFromDump(paths[IDX_READ]);
	} else if (options[IDX_FULLTBL]) {
		machine = (StateMachine*)generateTableStateMachine(paths[IDX_FULLTBL], values[IDX_COMMON_NUM], 0, NULL, paths[IDX_COMMON], options[IDX_VERBOSE]);
	}
#else
	} else if (options[IDX_READ] && options[IDX_FULLTBL]) {