How to Wiki Database (change log) http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
2.7 KiB

9 months ago
====== Как получить информацию обо всех узлах сети ======
^ :!: Внимание! ^
| Начиная с версии 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%%'')