2024-02-10 12:53:55 +00:00

26 lines
2.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Как получить информацию обо всех узлах сети ======
^ :!: Внимание! ^
| Начиная с версии 0.5 RC1 [[Yggdrasil]] больше не использует DHT. Информация в этой статье не актуальна для последних версий Yggdrasil.|
[[Yggdrasil]] использует распределенную хеш-таблицу ([[wpru>Распределённая_хеш-таблица|DHT]]), в которой содержится вся необходимая информация для работы автоматической маршрутизации.
Обращаясь к этой хеш-таблице можно получить нужную нам информацию и далее, обращаясь к узлам с использованием [[https://yggdrasil-network.github.io/admin.html|Admin API]], можно получить дополнительную информацию об узле.
На основе этого реализованы DHT-crawler'ы, собирающие информацию обо всех узлах. [[https://github.com/Arceliar/yggdrasil-map/blob/master/scripts/crawl.py|Реализация]] на Python. Наглядный пример: официальная [[http://[21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb]/|карта сети]].
Реализация crawler'a на go: https://github.com/Arceliar/yggdrasil-map/blob/master/scripts/crawler.go (или [[https://github.com/Jorropo/fc00.org/blob/newer-crawller/scripts/crawler.go|тут]]).
===== Собранная информация =====
В сети есть ресурсы, которые предоставляют с определенными интервалами собираемые crawler'ами данные.
Один из таки ресурсов: http://[316:c51a:62a3:8b9::2]/ (данные в формате json: http://[316:c51a:62a3:8b9::2]/result.json).
Эти данные можно любым удобным (или необходимым) способом трансформировать, анализировать и т.п.
Так, для примера, ниже приведена команда, с помощью которой можно вывести отсортированную по ключам (и адресам) табличку узлов, получаемую из этого файла.
<code>jq -r --sort-keys '.[]|with_entries(.value = .value.address)' result.json | jq -r 'to_entries[] | "\(.key), \(.value)"' | more</code>
(если ''%%jq%%'' еще нет в системе, её нужно установить: ''%%sudo apt install jq%%'')