powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная география
25 сообщений из 177, страница 6 из 8
Тяпничная география
    #38907773
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, не изобретай велосипед

Код: plaintext
1.
2.
			unsigned int n_startip = htonl(inet_addr(val[0]));
			unsigned int n_endip = htonl(inet_addr(val[1]));
...
Рейтинг: 0 / 0
Тяпничная география
    #38907808
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Код: plaintext
1.
unsigned int n_startip = htonl(inet_addr(val[0]));


inet_addr возвращает в network order.
Поэтому htonl после нее формально неверно вызывать.
На практике, конечно, htonl == ntohl, поэтому все будет работать, т.к. нам надо именно host order.
Но для порядка надо заменить на ntohl
...
Рейтинг: 0 / 0
Тяпничная география
    #38908244
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ищу где в этом чортовом MinGW есть поддержка inet_addr(...)
...
Рейтинг: 0 / 0
Тяпничная география
    #38908262
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй как в линуксе
Код: plaintext
1.
2.
3.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
...
Рейтинг: 0 / 0
Тяпничная география
    #38908289
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По каждой шапке - ошибка
Код: plaintext
1.
2.
3.
4.
ipv4filter.c:7:24: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h>
                        ^
compilation terminated.
...
Рейтинг: 0 / 0
Тяпничная география
    #38908313
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
...
Рейтинг: 0 / 0
Тяпничная география
    #38908314
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем всезнающий анонимос мне подсказал что надо добавить линкеру опцию -lwsock32.

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

Код: plaintext
1.
2.
#include <winsock.h>
#include <winsock2.h>



Интересно что в МинГВе они существуют в двух экземплярах. С опцией WINSOCK_API_LINKAGE и без нее.
...
Рейтинг: 0 / 0
Тяпничная география
    #38908317
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 - аллергия. Но если припечёт - обязательно поставлю. Пока вроде собрал.
...
Рейтинг: 0 / 0
Тяпничная география
    #38908323
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свои каракули я закрыл препроцессором. Пускай будут. Навсякий.

P.S. А старуха - за корзину. "Я бельё своё не кину" (c) Дядя Стёпа...
...
Рейтинг: 0 / 0
Тяпничная география
    #38908343
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСпс. У меня на MS VS - аллергия. Но если припечёт - обязательно поставлю. Пока вроде собрал.
Можешь сделать виртуалку, в ней линукс, а в нем полноценный GCC.
...
Рейтинг: 0 / 0
Тяпничная география
    #38908387
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну.. парсер готов. И кстати - приятная новость. Интервалы изначально были отсортированны
и не перекрываются.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
#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;
}

...
Рейтинг: 0 / 0
Тяпничная география
    #38908549
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее надо обсудить кейсы. Что будет выходом.

Вариант 1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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. То-же самое но не-аллоцированные куски просто скипаем. Изначально подразумеваем
что софт-получатель знает что их надо красить в нейтрально-серый цвет.

Код: plaintext
1.
2.
16777216,17301503,AU,Red
17367040,17432575,MY,Blue



Коды стран я решил не удалять из потока. Вдруг понадобиться рисовать легенду и отмечать на картинке
название страны. Или дальше делать привязку к search системам.
...
Рейтинг: 0 / 0
Тяпничная география
    #38909380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем ipv4filter и gilbertroute готов. Остались некоторы шероховатости с цветовой раскраской
стран. Но более чем половина (2.2млрд) покрывается системными цветами. Пока оставлю так.
Для демо этого достаточно. Остальные страны получат (временно) серый цвет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
// 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;	
}
...
Рейтинг: 0 / 0
Тяпничная география
    #38909387
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее. Я пока решил не связываться с сложными бинарными форматами картинок.
Мой софт - тривиален и написан на сях. И не использует пока никаких библиотек.
Вопрос - в чем сохранять? Я тут посмотрел тулзу 'IrfanView'. Это такой себе
жлобский просмотрщик картинок. Но у него есть возможность сохранять
и открывать картинки в псевдо-текстовом формате (ppm).

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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 
...
...
Рейтинг: 0 / 0
Тяпничная география
    #38909400
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДалее. Я пока решил не связываться с сложными бинарными форматами картинок.
Посмотри BMP, формат не сложный:
если в TrueColor`е писать: хэдер и дальше точки пошли по три байта {R,G,B}
Если 256 цветов, то хэдер, палитра и дальше точки по одному байту (ID из палитры). У тебя палитра статична, поэтому может есть смысл ее сгенерить один раз, а потом сразу писать твой ID цвета.
...
Рейтинг: 0 / 0
Тяпничная география
    #38909426
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничная география
    #38909625
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ОК. Спс. Лет 12 назад я кодил на Pascal читалку-писалку bmp-картинок.
И вроде даже поддержал RLE сжатие.

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

Но это вобщем-то не в приоритетах.
...
Рейтинг: 0 / 0
Тяпничная география
    #38911059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит вот что добавлю. Конвейер STDOUT->STDIN вполне нормально воспринимает бинарный поток.

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

Но думаю что на 99.9% всё будет чики-пики.
...
Рейтинг: 0 / 0
Тяпничная география
    #39059916
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл образец того что я хотел получить.

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

...
Рейтинг: 0 / 0
Тяпничная география
    #39060640
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А почему мыргает ?
...
Рейтинг: 0 / 0
Тяпничная география
    #39060650
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сайте пишут

Hilbert map of 24 hour relative average utilization of IPv4 addresses observed using ICMP ping requests.
Насколько я понимаю, цветом обозначены хосты доступные для ICMP. Что означает серая и чёрная маркировка - не знаю.
Возможно это диапазоны локалок и потерянного адресного пространства которое не возможно аллоцировать
по правилам масок и классов.

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

Вообще в своей постановке я не имел в виду анимацию. Мне-бы хватило статичной картинки.
...
Рейтинг: 0 / 0
Тяпничная география
    #39060696
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНашёл образец того что я хотел получить.

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

А воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.
...
Рейтинг: 0 / 0
Тяпничная география
    #39060697
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftА воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.
Они куплены/заняты. Другой вопрос как их использует владалец. Например некоторые провайдеры раздают постоянные IP людям которые комп включают раз в месяц, но за интернет платят регулярно.
...
Рейтинг: 0 / 0
Тяпничная география
    #39060702
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmiksoftА воплей-то было, что ip-адреса кончаются! А там еще огромные черные куски.
Они куплены/заняты. Другой вопрос как их использует владалец. Например некоторые провайдеры раздают постоянные IP людям которые комп включают раз в месяц, но за интернет платят регулярно.Блоки с 0 по 32 что-то не похожи на выключенные компы дома.

Кстати, а что за серые блоки в углах нулевого блока?
...
Рейтинг: 0 / 0
Тяпничная география
    #39060822
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение сабж http://www.sql.ru/forum/1174767/botnet
начал анализировать логи атаки по табличке GeoIpCity от 2010 года.

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

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

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

Далее вследствие самопального софта и спешки если снять ограничение в 3_500_000
у меня проблемы с java.lang.OutOfMemoryError: GC overhead limit exceeded.
...
Рейтинг: 0 / 0
25 сообщений из 177, страница 6 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная география
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]