Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8   вперед  Ctrl      все
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
mayton, не изобретай велосипед

			unsigned int n_startip = htonl(inet_addr(val[0]));
			unsigned int n_endip = htonl(inet_addr(val[1]));
18 мар 15, 06:53    [17397425]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6626
Dima T,

unsigned int n_startip = htonl(inet_addr(val[0]));

inet_addr возвращает в network order.
Поэтому htonl после нее формально неверно вызывать.
На практике, конечно, htonl == ntohl, поэтому все будет работать, т.к. нам надо именно host order.
Но для порядка надо заменить на ntohl
18 мар 15, 08:13    [17397519]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Dima T, ищу где в этом чортовом MinGW есть поддержка inet_addr(...)
18 мар 15, 13:00    [17399021]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
попробуй как в линуксе
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
18 мар 15, 13:09    [17399094]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
По каждой шапке - ошибка
ipv4filter.c:7:24: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h>
                        ^
compilation terminated.
18 мар 15, 13:22    [17399211]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
Похоже твой MinGW совсем мини :(
http://stackoverflow.com/questions/1517762/sockets-in-mingw
http://mingw-users.1079350.n2.nabble.com/sys-socket-h-td3255232.html
вроде лечится, но придется погуглить

Поставь MS VC Express
18 мар 15, 13:33    [17399304]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Вобщем всезнающий анонимос мне подсказал что надо добавить линкеру опцию -lwsock32.

В шапки подключил

#include <winsock.h>
#include <winsock2.h>


Интересно что в МинГВе они существуют в двух экземплярах. С опцией WINSOCK_API_LINKAGE и без нее.
18 мар 15, 13:34    [17399307]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Dima T
Похоже твой MinGW совсем мини :(
http://stackoverflow.com/questions/1517762/sockets-in-mingw
http://mingw-users.1079350.n2.nabble.com/sys-socket-h-td3255232.html
вроде лечится, но придется погуглить

Поставь MS VC Express

Спс. У меня на MS VS - аллергия. Но если припечёт - обязательно поставлю. Пока вроде собрал.
18 мар 15, 13:35    [17399322]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Свои каракули я закрыл препроцессором. Пускай будут. Навсякий.

P.S. А старуха - за корзину. "Я бельё своё не кину" (c) Дядя Стёпа...
18 мар 15, 13:37    [17399342]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
mayton
Спс. У меня на MS VS - аллергия. Но если припечёт - обязательно поставлю. Пока вроде собрал.

Можешь сделать виртуалку, в ней линукс, а в нем полноценный GCC.
18 мар 15, 13:51    [17399443]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Ну.. парсер готов. И кстати - приятная новость. Интервалы изначально были отсортированны
и не перекрываются.

+
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>

#include <winsock.h>
#include <winsock2.h>

//#define INTERNAL_INET_FUNC

/* 17.03.2015 In beginning... (Thnx to Dima) */
/* 18.03.2015 Added ip4toNum() function.     */
/* 18.03.2015 Added lwsock32 support (should be compiled with  */
/*            -lwsock32 option in command line)                */
/*            Improoved logic. Added constraints. Added retcodes */
 

#define BUF_SIZE    1024
#define COLUMNS_CNT 10

uint32_t ipv4toNum(char *IPv4){
	#ifdef INTERNAL_INET_FUNC
		uint32_t ipInt = 0;	
		char *p = (char*)strtok(IPv4,".");
		ipInt |= (atoi(p));
		p = (char*)strtok(NULL,".");
		ipInt |= (atoi(p) << 8);
		p = (char*)strtok(NULL,".");
		ipInt |= (atoi(p) << 16);
		p = (char*)strtok(NULL,".");
		ipInt |= (atoi(p) << 24);
	return ipInt;
	#else
		return htonl(inet_addr(IPv4));
	#endif
}


// TODO: Complete
int parse_csv_str(char* str, char **val, int val_size)
{
	int val_count = 0;
	bool quote_open = false;
	bool first = true;
	bool end_quote = false;
	bool center_quote = false;
	bool stop = false;
	while(!stop) {
		if(first) {
			first = false;
			if(val_count < val_size) *val = str;
			val_count++;
		}
		switch(*str) {
			case '"':
				quote_open = !quote_open;
				if(*val == str) {
					(*val)++; // пропуск кавычки в начале
					end_quote = true;
				} else {
					center_quote = true;
				}
				break;

			case ',':
				if(!quote_open) {
					*str = 0;
					first = true;
					if(end_quote) { // пропуск завершающей кавычки
						end_quote = false;
						*(str - 1) = 0;
					}
					if(center_quote) { // удаление двойных кавычек в центре
						center_quote = false;
						char* d = *val;
						char* s = *val;
						while(*d = *s) {
							if(*s != '"' || *(s + 1) != '"') d++;
							s++;
						}
					}
					if(val_count < val_size) val++;
				}
				break;

			case 0:
				stop = true;
				break;

			case 0xD:
			case 0xA:
				*str = 0;
				stop = true;
				break;

		}
		str++;
	}
	// заполнение пустыми строками недостающих
	int i;
	for(i = val_count; i < val_size; i++) *(++val) = str;
	// возврат количества параметров
	return val_count;
}

int main(int argc, char **argv, char **env){

	FILE *f = stdin;
	if(f) {
		char buf[BUF_SIZE];
		int line = 0;  
		int cnt = 0;
		uint32_t n_prevStartIp=0;
		uint32_t n_prevEndIp=0;
		while(fgets(buf, BUF_SIZE, f)) {
			line++;
			if(line == 1) {
				continue;
			} else {
				char* val[10];
				cnt = parse_csv_str(buf, val, 10);
				if(cnt != COLUMNS_CNT) {
					fprintf(stderr,"\nIPv4filter: parse error: %d parameters at line %d\n", cnt, line);
					return -1;
				}
				printf("startIpNum = '%s'\n", val[0]);
				printf("endIpNum   = '%s'\n", val[1]);
				printf("country    = '%s'\n", val[2]);
				printf("region     = '%s'\n", val[3]);
				printf("city       = '%s'\n", val[4]);
				printf("postalCode = %s\n", val[5]);
				printf("latitude   = %s\n", val[6]);
				printf("longitude  = %s\n", val[7]);
				printf("dmaCode    = '%s'\n", val[8]);
				printf("areaCode   = '%s'\n", val[9]);
				uint32_t n_startIp = ipv4toNum(val[0]);
				uint32_t n_endIp   = ipv4toNum(val[1]);
				if (n_startIp > n_endIp){
					fprintf(stderr,"\nIPv4filter: check constraint (END_LESS_THAN_BEGIN) violated at line %d\n", line);
					return -3;
				}
				printf("n_startIp  = %d\n", n_startIp);
				printf("n_endIp    = %d\n", n_endIp);
				printf("---------------------\n");
				if (line>2){
					if (n_startIp <= n_prevEndIp){
						fprintf(stderr,"\nIPv4filter: check constraint (OVERLAPPED_INTERVALS) violated at line %d\n", line);
						return -2;
					}
				}
				n_prevStartIp = n_startIp;
			}       n_prevEndIp   = n_prevEndIp;
		}
		fprintf(stderr,"\nIPv4filter: OK! Lines proceed: %d\n",line);
	}
	return 0;
}
18 мар 15, 14:07    [17399547]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Далее надо обсудить кейсы. Что будет выходом.

Вариант 1

Input: 

startIpNum,endIpNum,country,region,city,postalCode,latitude,longitude,dmaCode,areaCode
1.0.0.0,1.7.255.255,"AU","","","",-27.0000,133.0000,,
1.9.0.0,1.9.255.255,"MY","","","",2.5000,112.5000,,

Output:

0,16777215,-,Grey
16777216,17301503,AU,Red
17301504,17367039,-,Grey
17367040,17432575,MY,Blue


Вариант 2. То-же самое но не-аллоцированные куски просто скипаем. Изначально подразумеваем
что софт-получатель знает что их надо красить в нейтрально-серый цвет.

16777216,17301503,AU,Red
17367040,17432575,MY,Blue


Коды стран я решил не удалять из потока. Вдруг понадобиться рисовать легенду и отмечать на картинке
название страны. Или дальше делать привязку к search системам.
18 мар 15, 15:12    [17400098]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Вобщем ipv4filter и gilbertroute готов. Остались некоторы шероховатости с цветовой раскраской
стран. Но более чем половина (2.2млрд) покрывается системными цветами. Пока оставлю так.
Для демо этого достаточно. Остальные страны получат (временно) серый цвет.

// Trivial decode country into Color(RGB) code
// A..Z = 0x41..0x5A ( 26 chars )
// 26 * 26 = 676
//
// 
// Code  Allocation Color
// ----- ---------- ------
// US    1507673738 'red'
// CN     267741269 'green'
// JP     186372005 'blue'
// GB     115678470 'magenta'
// DE     111001300 'yellow'
// KR      99794924 'cyan'
// --    ----------
//    2 288 261 706
// 
uint32_t getRGBfromCountryCode(const char *cc){
	if (cc==NULL) return 0;
	if (strlen(cc)<2) return 0;
	if (!stricmp(cc,"US")){
		return RED;
	} else if (!stricmp(cc,"CN")){
		return GREEN;
	} else if (!stricmp(cc,"JP")){
		return BLUE;
	} else if (!stricmp(cc,"GB")){
		return MAGENTA;
	} else if (!stricmp(cc,"DE")){
		return YELLOW;
	} else if (!stricmp(cc,"KR")){
		return CYAN;
	}
	if (strlen(cc)==2){
		//uint32_t color = 0x41 - toupper(cc[0]) + 26 * (0x41 - toupper(cc[1]));
		return GREY;
	}
	return 0;	
}
19 мар 15, 09:42    [17403523]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Далее. Я пока решил не связываться с сложными бинарными форматами картинок.
Мой софт - тривиален и написан на сях. И не использует пока никаких библиотек.
Вопрос - в чем сохранять? Я тут посмотрел тулзу 'IrfanView'. Это такой себе
жлобский просмотрщик картинок. Но у него есть возможность сохранять
и открывать картинки в псевдо-текстовом формате (ppm).

Пример: (цветная 25 бит. картинка размером 110x110).

P3
# Created by IrfanView
110 110
255
243 167 105 221 185 153 218 174 139 226 178 138 219 173 137 
231 177 133 221 176 137 223 175 137 231 175 128 231 175 128 
...
19 мар 15, 09:48    [17403575]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
mayton
Далее. Я пока решил не связываться с сложными бинарными форматами картинок.

Посмотри BMP, формат не сложный:
если в TrueColor`е писать: хэдер и дальше точки пошли по три байта {R,G,B}
Если 256 цветов, то хэдер, палитра и дальше точки по одному байту (ID из палитры). У тебя палитра статична, поэтому может есть смысл ее сгенерить один раз, а потом сразу писать твой ID цвета.
19 мар 15, 10:03    [17403668]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
Пример генерации BMP на голом С.
19 мар 15, 10:16    [17403747]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Dima T, ОК. Спс. Лет 12 назад я кодил на Pascal читалку-писалку bmp-картинок.
И вроде даже поддержал RLE сжатие.

Попробую восстановить что забыто.

Но это вобщем-то не в приоритетах.
19 мар 15, 12:08    [17404450]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Значит вот что добавлю. Конвейер STDOUT->STDIN вполне нормально воспринимает бинарный поток.

Я еще чуть позже потестирую на краевые моменты. Ситуации с fopen(...,"textmode"), flush, fclose,... и управляющие
символы (эскейп последовательности) на Windows и CentOS.

Но думаю что на 99.9% всё будет чики-пики.
20 мар 15, 13:25    [17409628]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Нашёл образец того что я хотел получить.

Со ссылкой на http://internetcensus2012.bitbucket.org/paper.html

Картинка с другого сайта.
23 сен 15, 23:37    [18187852]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
mayton,

А почему мыргает ?
24 сен 15, 18:42    [18191715]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
На сайте пишут

Hilbert map of 24 hour relative average utilization of IPv4 addresses observed using ICMP ping requests.

Насколько я понимаю, цветом обозначены хосты доступные для ICMP. Что означает серая и чёрная маркировка - не знаю.
Возможно это диапазоны локалок и потерянного адресного пространства которое не возможно аллоцировать
по правилам масок и классов.

Каков смысл цветовой градации от красного до синего - ХЗ. Надо читать легенду на их сайте. Что то типа utilization in %.

Вообще в своей постановке я не имел в виду анимацию. Мне-бы хватило статичной картинки.
24 сен 15, 18:50    [18191747]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
miksoft
Member

Откуда:
Сообщений: 38773
mayton
Нашёл образец того что я хотел получить.

Со ссылкой на http://internetcensus2012.bitbucket.org/paper.html

Картинка с другого сайта.
А воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.
24 сен 15, 20:08    [18192075]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
Dima T
Member

Откуда:
Сообщений: 15689
miksoft
А воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.

Они куплены/заняты. Другой вопрос как их использует владалец. Например некоторые провайдеры раздают постоянные IP людям которые комп включают раз в месяц, но за интернет платят регулярно.
24 сен 15, 20:14    [18192091]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
miksoft
Member

Откуда:
Сообщений: 38773
Dima T
miksoft
А воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.

Они куплены/заняты. Другой вопрос как их использует владалец. Например некоторые провайдеры раздают постоянные IP людям которые комп включают раз в месяц, но за интернет платят регулярно.
Блоки с 0 по 32 что-то не похожи на выключенные компы дома.

Кстати, а что за серые блоки в углах нулевого блока?
24 сен 15, 20:24    [18192125]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничная география  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
В продолжение сабж https://www.sql.ru/forum/1174767/botnet
начал анализировать логи атаки по табличке GeoIpCity от 2010 года.

Ограничил выборку в 3_500_000 строк из GeoIp.

В качестве исходных данных - все текстовые логи из топика про Ботнет.

Предварительно 18192846. Столбец Rate показывает количество атак из подсети.

Далее вследствие самопального софта и спешки если снять ограничение в 3_500_000
у меня проблемы с java.lang.OutOfMemoryError: GC overhead limit exceeded.
25 сен 15, 08:13    [18192992]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8   вперед  Ctrl      все
Все форумы / C++ Ответить