Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654

Как захешировать структуру, содержащую ip-адрес и порт?

04.10.2011, 21:51. Показов 2240. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер всем.
Есть некая структура в упрошенном виде:
C
1
2
3
4
struct session {
  struct sockaddr local;
  struct sockaddr peer;
};
Адреса могут быть как IPv4 так и IPv6. И мне хочется это как-то хэшировать.
Поиски говорят, что народ для похожих целей в основном использует вариации jhash от Bob Jenkins
Может кто-нибудь посоветует что-то другое?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2011, 21:51
Ответы с готовыми решениями:

Создать структуру, содержащую информацию о горожанине фамилия И.О., дата рождения, адрес. Посчитать возраст.
Здравствуйте. Помогите cоздать структуру, содержащую информацию о горожанине(фамилия И.О., дата рождения, адрес), посчитать возраст(С++). ...

Как узнать адрес и порт моего хостинга?
В Active Server Pages можно узнать адрес и порт моего хостинга просто поместив в код такую строку...

Как отследить адрес подключения на определённый порт?
Есть шлюз на дебиане, на нем стоит Squid3 и проброшен 3389 порт на комп в локалке. Подскажите пожалуйста как можно посмотреть, кто...

19
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.10.2011, 23:59
http://en.cppreference.com/w/cpp/utility/hash
?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.10.2011, 00:17
упс, не правильно понял тебя.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
05.10.2011, 00:20  [ТС]
niXman, это ж вроде FNV или я что-то попутал?
Если он, то не катит.

Добавлено через 2 минуты
Цитата Сообщение от niXman Посмотреть сообщение
упс, не правильно понял тебя.
А я тебя) с std::tr1::hash попутал
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.10.2011, 00:49
хотя нет... запутался. ща.

Добавлено через 22 минуты
по заявлению стандарта, std::hash инклюдится через functional.
и правда, но реализация находится в bits/functional_hash.h (см. строку 59)
что мы тут видим... кучу специализация для тривиальных типов, а самое интересное начинается со строки 127. где реализован _Hash_impl и _Fnv_hash_impl. второй, по идее, именно FNV хеш. тебе оно не надо. значит смотрим _Hash_impl. видно, что реализация хеширования вынесена в функцию _Hash_bytes. где же эта функция?.... а, вот она!
судя по коментам, используется алгоритм Murmur. (забавное название)

зы
собственно я никогда напрямую не юзал std::hash, но частенько ловил себя на мысле что разобраться нужно, т.к. это позволит избавиться от еще одного велосипеда
разобрался.

Добавлено через 5 минут
осталось понять как все это дело применить к твоей задаче) терпение...
1
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
05.10.2011, 00:49  [ТС]
niXman, спасибо.
MurmurHash3 я рассматривал, мне нравиться, но смущает что например во всех ядрах юзают JHash.
Я наверное плохо сформулировал вопрос. Я не прошу найти мне какую-нибудь хэш ф-цию, я прошу так сказать поделиться личным опытом. Наверняка я тут не первый кому понадобилось хэшировать пары адрес:порт
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.10.2011, 01:45
ну не знаю.. по хешированию адрес:порт я вряд ли что умное скажу.

Добавлено через 45 минут
может кому сгодится:
C++
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
#include <iostream>
#include <functional>
 
#include <sys/socket.h>
 
struct session {
   struct sockaddr local;
   struct sockaddr peer;
};
 
namespace std {
 
template<>
struct hash<session>: std::unary_function<session, size_t> {
   size_t operator()(const session& s) const {
      return _Hash_impl::hash(&s, sizeof(s));
   }
};
 
} // namespace std
 
int main() {
   session s;
   std::hash<session> h;
   std::cout << std::hex << h(s) << std::endl;
}
http://liveworkspace.org/code/... 2031e2fda1
2
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
05.10.2011, 08:57  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
может кому сгодится:
Если брать Murmur, то явно не Murmur1 (она проигрывает и JHash и свежим Murmur практически по всем тестам) из stdc++, а Murmur3.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.10.2011, 09:28
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
а Murmur3.
смотрел уже. невероятно высокая скорость хеширования.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
05.10.2011, 09:31  [ТС]
Угумс, впечатляет. И становиться еще не понятней почему в сетевом коде ядер и на линуксе и на бсд используют JHash.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.10.2011, 09:58
возможно по лицензии не проходит. я вообще не нашел лицензии.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
05.10.2011, 10:40  [ТС]
Public domain - лучше не бывает)

Добавлено через 29 минут
Кажется нашел почему не хотят в ядра:
David Miller:
I'm trying to avoid multiplies that are not done in hardware on some
cpus.
Осталось выяснить скрывается ли под some cpus гавно мамонта или какая-то экзотика...
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.10.2011, 02:01
Цитата Сообщение от g_u_e_s_t
Есть некая структура в упрошенном виде:
переведи её в текст и хешируй его
"127.0.0.1:123;127.0.0.1:456"
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
06.10.2011, 10:36  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
переведи её в текст и хешируй его
Два вопроса:
Что это даст? Ну не понимаю я чем строка может быть лучше.
Чем? Какую хэш ф-цию то посоветуете.

PS: пока сделал прототип с JHash и протестировал пару /8 сетей за вычетом бродкаст и мультикаст адресов - работает, была 1 коллизия.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.10.2011, 10:45
Цитата Сообщение от g_u_e_s_t
Что это даст? Ну не понимаю я чем строка может быть лучше.
строка всегда одинаковая и не зависит от реализации

Цитата Сообщение от g_u_e_s_t
Какую хэш ф-цию то посоветуете.
любую
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
06.10.2011, 10:56  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
строка всегда одинаковая и не зависит от реализации
У хэша будет "локальное" применение, в смысле за пределы машины он передаваться не будет.

А профит то в чем? Затраты на перевод есть, а хорошей (speed/avalanche/collisions) хэш ф-ции которой не все равно строка или байты как бы и нет... Точнее есть, но с короткими строками не дружат.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.10.2011, 11:15
Цитата Сообщение от g_u_e_s_t
в смысле за пределы машины он передаваться не будет
смысл в том, чтобы не хешировать всю структуру, а собрать только то, что нужно
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
06.10.2011, 11:24  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
смысл в том, чтобы не хешировать всю структуру, а собрать только то, что нужно
Эм я и так поля размеров и выравнивания как бы и не собирался хэшировать...
В хэш идет 48/144 бита на адрес.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
06.10.2011, 14:26
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
а хорошей (speed/avalanche/collisions) хэш ф-ции которой не все равно строка или байты как бы и нет... Точнее есть, но с короткими строками не дружат.
А что за хеш для таких строк?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
06.10.2011, 14:31  [ТС]
Например вариация Murmur от гугла CityHash
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2011, 14:31
Помогаю со студенческими работами здесь

Как обратиться к экземпляру класса содержащую структуру с конструктором?
Добрый вечер, форумчане =) Я считываю информацию с файла который содержит маленькую базу. Считываю каждую строку и, разделяя, хочу...

Как перенаправить соединение на порт на другой адрес в iptables?
Ubuntu 12.04 Добрый день! Юзал поиск по сайту и не смог понять как правильно написать правило на проброс порта Пример: Что бы юзер...

Как узнать системные настройки прокси (IP-адрес, порт)?
Как можно узнать системные настройки прокси, если нет доступа к ним через IE, однако другие браузеры подхватывают соединение, если в...

Как правильно сохранить структуру, унаследованную от структуры, содержащую виртуальный деструктор?
Здравствуйте! Имеется структура: struct Product { int mId; double mCost; int mAmount; Product() {}

Как правильно объявить структуру DCB (последовательный порт)
На pinvoke.net для vb.net выложено следующее представление структуры: Public Structure DCB Public DCBlength As Int32 Public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru