Esempio n. 1
0
void * thread_main (void * arg) { // {{{
	int			tno;
	char *		ip;
	KR_API *	db;
	KRNET_API	isp;
	char		err[1024];

	tno = (int) arg;

	ip = long2ip (prand ());

	/* database open */
	if ( kr_open (&db, NULL, err) == false ) {
		fprintf (stderr, "ERROR Connect: %s\n", err);
		kr_close (&db);
		pthread_exit ((void *) 0);
	}

	isp.verbose = false;
	SAFECPY_256 (isp.ip, ip);

	if ( kr_search (&isp, db) ) {
		fprintf (stderr, "ERROR: %s\n", isp.err);
	} else
		printf ("--> Thread %d : %15s => %s\n", tno, isp.ip, isp.icode);

	kr_close (&db);
	pthread_exit ((void *) 0);
} // }}}
Esempio n. 2
0
db_t* open_db(const char* path, database_t type)
{
	db_t* db = (db_t*) malloc(sizeof(db_t));
	db->type = type;
	if(type == LEVELDB)
	{
		levelDB_t* leveldb = (levelDB_t*) malloc(sizeof(levelDB_t));
		leveldb->err = NULL;
		leveldb->options = leveldb_options_create();
		leveldb->woptions = leveldb_writeoptions_create();
		leveldb->roptions = leveldb_readoptions_create();
		leveldb_options_set_create_if_missing(leveldb->options, 1);
		leveldb->db = leveldb_open(leveldb->options, path, &(leveldb->err));
		if(leveldb->err != NULL)
		{
			fprintf(stderr, "Failed to open database! Error message: %s\n", leveldb->err);
			exit(-1);
		}
		leveldb_free(leveldb->err);
		leveldb->err = NULL;	
		db->database = (void*) leveldb;
	}
	else
	{
		kernelDB_t* kerneldb = (kernelDB_t*) malloc(sizeof(kernelDB_t));
		kerneldb->client = kr_open(path);
		db->database = (void*) kerneldb;
	}
	return db;
}
Esempio n. 3
0
int main (int argc, char ** argv) {
	KR_API *		db;
	KRNET_API		isp;
	char *			ip;
	int				opt;
	char *			datafile = NULL;
	short			onlyisp = 0;
	short			onlynation = 0;
	short			printrange = 0;
	short			printtype  = KRISP_GET_COUNTRY;
	bool			verbose = false;
	char			err[1024];

#ifdef HAVE_GETOPT_LONG
	while ( (opt = getopt_long (argc, argv, "f:hinr:v", long_options, (int *) 0)) != EOF ) {
#else
	while ( (opt = getopt (argc, argv, "f:hinr:v")) != EOF ) {
#endif
		switch (opt) {
			case 'f' :
				datafile = optarg;
				break;
			case 'i' :
				if ( onlynation > 0 ) {
					fprintf (stderr, "ERROR: Can't use -n option and -i option togather\n");
					return 1;
				}
				onlyisp++;
				break;
			case 'n' :
				if ( onlyisp > 0 ) {
					fprintf (stderr, "ERROR: Can't use -n option and -i option togather\n");
					return 1;
				}
				onlynation++;
				break;
			case 'r' :
				printrange++;

				if ( ! strcasecmp ("country", optarg) )
					printtype = KRISP_GET_COUNTRY;
				else if ( ! strcasecmp ("isp", optarg) )
					printtype = KRISP_GET_ISP;
				else {
					fprintf (stderr, "ERROR: Wrong value of -r option\n");
					return 1;
				}
				break;
			case 'v' :
				set_true (verbose);
				break;
			default:
				usage (PNAME);
		}
	}

	if ( argc - optind < 1 || argc == 1 ) {
		usage (PNAME);
		return 1;
	}

#ifdef _WIN32
	{
		WORD wVerReq = MAKEWORD (2, 2); // Call WinSock 2.2
		WSADATA wsaData;
		int nErrStatus;

		if ( (nErrStatus = WSAStartup (wVerReq, &wsaData)) != 0 ) {
			fprintf (stderr, "Error: Failed initialize WSAStartup\n");
			return 1;
		}
	}
#endif

	/* database open */
	if ( kr_open (&db, datafile, err) == false ) {
		fprintf (stderr, "ERROR Connect: %s\n", err);
		WSA_Cleanup;
		return 1;
	}

	db->db_time_stamp_interval = 0;

	isp.verbose = verbose;
	db->verbose = verbose;
	ip = argv[optind];

	SAFECPY_256 (isp.ip, ip);
	if ( kr_search (&isp, db) ) {
		fprintf (stderr, "ERROR: %s\n", isp.err);
		kr_close (&db);
		WSA_Cleanup;
		return 1;
	}

	if ( verbose )
		fprintf (stderr, "\n");

	if ( strlen (isp.err) )
		printf ("Error: %s\n", isp.err);

	if ( onlyisp ) {
		printf ("%s\n", isp.icode);
	} else if ( onlynation ) {
		printf ("%s\n", isp.ccode);
	} else {
#ifdef HAVE_ICONV_H
		char *	lcharset;
		iconv_t	cd;
		char *	ispname, * to;
		size_t	flen, tlen;
		char *	srcname = (char *) isp.iname;

#if defined _WIN32
		lcharset = "CP949";
#else
		lcharset = confirm_local_charset ();
#endif
		flen = strlen (srcname);

		if ( lcharset == NULL || ! strcmp (DB_CHARSET, lcharset) ) {
			tlen = 1;
			cd = (iconv_t)(-1);
		} else {
			tlen = ! strcmp (lcharset, "UTF8") ? flen * 4 + 1 : flen + 1;
			cd = iconv_open (lcharset, DB_CHARSET);
		}

		if ( cd == (iconv_t)(-1) ) {
			ispname = strdup (isp.iname);
			goto noconvert;
		}

		if ( (ispname = (char *) malloc (sizeof (char) * tlen)) == NULL ) {
			ispname = strdup (isp.iname);
			goto noconvert;
		}
		memset (ispname, 0, sizeof (char) * tlen);
		to = ispname;

		iconv (cd, &srcname, &flen, &to, &tlen);
		switch ( errno ) {
			case E2BIG :
			case EILSEQ :
			case EINVAL :
				strcpy (ispname, isp.iname);
				break;
		}

noconvert:
		printf ("%s (%s): %s (%s)\n", ip, isp.ip, ispname, isp.icode);
#else
		printf ("%s (%s): %s (%s)\n", ip, isp.ip, isp.iname, isp.icode);
#endif

#ifdef HAVE_ICONV_H
		if ( cd != (iconv_t)(-1) )
			iconv_close (cd);
		SAFEFREE (ispname);
#endif

		printf ("SUBNET    : %s\n", long2ip (isp.netmask));
		printf (
				"NETWORK   : %s\n",
				long2ip (network (isp.start, isp.netmask))
		);
		printf (
				"BROADCAST : %s\n",
				long2ip (broadcast(isp.start, isp.netmask))
		);
		printf ("DB RANGE  : %s - ", long2ip (isp.start));
		printf ("%s\n", long2ip (isp.end));
		printf ("NATION    : %s (%s)\n", isp.cname, isp.ccode);
	}

	if ( printrange ) {
		KRNET_REQ_RANGE range;
		int i;
		ulong mask;
		char start[16];
		char end[16];

		range.code = printtype;
		range.verbose = verbose;
		range.ranges = NULL;
		range.count = 0;

		SAFECPY_1024 (
			range.data,
			(printtype == KRISP_GET_COUNTRY) ? isp.ccode : isp.iname
		);

		if ( kr_range (&range, db) ) {
			fprintf (stderr, "ERROR: %s\n", range.err);
			SAFEFREE (range.ranges);
			kr_close (&db);
			WSA_Cleanup;
			return 1;
		}

		printf (
			"\nRange Traget: %s (%d line%s)\n\n",
			range.data,
			range.count,
			range.count ? "s" : ""
		);

		for ( i=0; i<range.count; i++ ) {
			long2ip_r (range.ranges[i].start, start);
			mask = guess_netmask (range.ranges[i].start, range.ranges[i].end);

			if ( network (range.ranges[i].start, mask) == range.ranges[i].start )
				printf ("%s/%d\n", start, long2prefix (mask));
			else
				printf ("%s %s\n", start, long2ip_r (range.ranges[i].end, end));
		}

		SAFEFREE (range.ranges);
		printf ("\n");
	}

	/* database close */
	kr_close (&db);
	WSA_Cleanup;

	return 0;
}