@jajabin

Какой математический метод или алгоритм выбрать для формирования числа из диапазона?

Как я понимаю,что знания лежат передо мной,но не знаю куда посмотреть.
К примеру: имеется такой маршрут
172.16.100.11:54550 -> 10.0.88.1:445
если привести отдельно адрес к числу uint32 то,
172.16.100.11 = 2886755339 и 10.0.88.1 = 167794699
и имеются ещё порты, важен такой вопрос, как получить из двух чисел uint32 и двух uint16 по максимуму случайное число из диапазона чисел 0-65535 (uint16), естественно , что при флагах RST и FIN, значение будет освобождаться. Подскажите куда смотреть.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
То, что вы ищете называется хеш-функцией.

Возьмите первые (или любые) два байта из результата любой хеш-функции от этих данных.
Надеюсь вы понимаете, что мощность множества ваших адресных пар гораздо больше, чем 2**16. Это значит, что неизбежны коллизии.
Вот как получить это число можно однострочником на баше с помощью питона:
py '(lambda a, b: 256 * a + b)(*hashlib.md5(b"any bytes for hashing").digest()[:2])'

Или вот так в командной строке можно захешировать любой текст в два байта:
echo 'any text' | py '(lambda a, b: 256 * a + b)(*hashlib.md5(sys.stdin.read().encode("utf-8")).digest()[:2])'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы