💾 Archived View for betahowto.duckdns.org › yggdrasil:address_miners:simpleygggen captured on 2024-03-21 at 16:02:22. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
SimpleYggGen -- майнер адресов Yggdrasil, написанный на bash. Позиционировался, как простой инструмент, с которым справится даже начинающий пользователь Linux. Позволяет добывать адреса с красивыми сочетаниями символов. Работает с регулярными выражениями. Проект поддерживался пользователем acetone ( gemini://betahowto.duckdns.org/user:acetone ). Первый релиз датируется 23 апреля 2020 года.
Причина малой скорости работы скрипта кроется в обращении операционной системы к бинарному файлу Yggdrasil. Скрипт постоянно запрашивает у него конфигурационный файл, после чего проверяет полученный адрес через стандартный функционал того же бинарного файла.
Код распространяется свободно, номинально под лицензией GPL v3 or later.
Notabene: В настоящее время использование скрипта SYG на bash не имеет практического смысла. Он остался в истории, как идеологический прородитель, когда в игру вступили майнеры, написанные на C++ ( gemini://betahowto.duckdns.org/yggdrasil:address_miners:simpleygggen_cpp ) и Go ( gemini://betahowto.duckdns.org/yggdrasil:address_miners:simpleygggen_go ).
Для работы скрипта, в системе должен быть установлен клиент Yggdrasil. В конечном счете майнинг сводится к получению файлов конфигурации Yggdrasil и их проверке на совпадение адреса с искомым фрагментом. Цель (target) задается при запуске скрипта. Обработка осуществляется по параметру EncryptionPublicKey.
bash
# Получаем новый файл конфигурации со случайным адресом. Записываем его в переменную "tempconf". tempconf=$(yggdrasil -genconf) # Извлекаем из конфига значение EncryptionPublicKey в одноименную переменную. EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") # Проверяем адрес, ищем совпадение с искомой строкой ($target). if ( echo $EncryptionPublicKey | yggdrasil -address -useconf | grep -i -E "$target") # Если есть совпадение, извлекаем из конфига EncryptionPrivateKey. then EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}") # Затем удачный конфиг записывается на диск.
Для практического использования скрипта и более подробного изучения кода, можете сохранить скрипт, кликнув по заголовку блока:
bash syg2.4.sh
#!/bin/bash #---------------------------------------------------------------# # RU: Пожелания и правки присылайте на hash.null @acetone # # EN: Send wishes and corrections to the hash.null @acetone # # # # SimpleYggGen v2.4, acetone, 2020. Russia. # #---------------------------------------------------------------# #-----------------КОНФИГУРАЦИЯ / CONFIGURATION------------------# # Set Yggdrasil binary path: # for Linux: YGGBIN=/usr/bin/yggdrasil # for Windows (running that script with MSYS2 (msys2.org): #YGGBIN="/c/Program Files/Yggdrasil/yggdrasil.exe" # # To enable non-special names uncomment that line: #nonspecial=true # # To enable system testing uncomment that line: runtest=true # #------------------------КОНЕЦ / END----------------------------# #---------------------------------------------------------------# #--ЛЮБЫЕ ИЗМЕНЕНИЯ В КОДЕ НИЖЕ ВЫ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК--# #-----ANY CHANGES IN THE CODE BELOW YOU DO AT YOUR OWN RISK-----# #---------------------------------------------------------------# test () { timestart=$(date '+%s') for (( c=1; c<101; c++ )); do tempconf=$("$YGGBIN" -genconf) EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") if [[ $c = 102 ]]; then echo '' > /dev/null fi echo -n -e "\e[36m Analyzing $c%\e[0m" \\r done timestop=$(date '+%s') final=$(($timestop-$timestart)) if [[ "$final" -le "1" ]]; then color="\e[36m" elif [[ "$final" -le "2" ]]; then color="\e[32m" elif [[ "$final" -le "3" ]]; then color="\e[33m" else color="\e[31m" fi echo -n -e "$color Testing taken $final second(s)\e[0m\n\n" } log () { echo -e "Yggdrasil addresses list\\n$(date '+%Y-%m-%d %H:%M:%S')"\\n > ./syg.log if ( ls ./sygX* 2> /dev/null | grep 2 &> /dev/null ); then ls ./sygX* 2> /dev/null | tr -d syg | tr _ : | tr -d X >> ./syg.log 2> /dev/null echo '' >> ./syg.log liness=$(wc ./syg.log -l | cut -f1 -d' ' 2> /dev/null); tail -n $(($liness-2)) ./syg.log 2> /dev/null echo -e "\e[32m Names saved to syg.log\e[0m\n" else echo -e "\e[31m sygX* file not exist\e[0m\n" main exit 0 fi } tars () { log tar -cf ./syg$(date '+%Y%m%d_%H%M').tar ./sygX* syg.log 2> /dev/null echo -e "\e[32m All addresses archived\e[0m\n" } intro () { clear echo -e "\e[38m"' ' echo -e " ▒▒▒▒▒▒ ▒ ▒ ▒▒▒▒▒▒" sleep 0.05 echo -e " ▒ ▒ ▒ ▒" sleep 0.05 echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒▒▒" sleep 0.05 echo -e " ▒ ▒ ▒ ▒" sleep 0.05 echo -e " ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒\e[0m" echo -e "\e[38m\n © SimpleYggGen v2.4\n acetone, 2020\e[0m\n" } main () { circle=0 randomfortune=0 sleep 0.03 echo -e -n ' Target'"$color » \e[0m" read userinput if [[ $userinput = '' ]]; then target=:: elif [[ $userinput == [lL][oO][gG] ]]; then log sleep 0.3 main elif [[ $userinput == [tT][aA][rR] ]]; then tars sleep 0.3 main elif [[ $userinput == [tT][aA][rR][dD][eE][lL] ]]; then tars rm -r ./sygX* 2> /dev/null echo -e "\e[33m Original files deleted\e[0m\n" sleep 0.3 main elif [[ $userinput == *[g-zG-Zа-яА-Я\;\+\&\#\~\_\%\=\/]* ]]; then sleep 0.03 echo -e " \e[31mIncorrect input\e[0m" \\n sleep 0.03 main else target=$userinput fi if [[ $nonspecial == "true" ]]; then else dirname=$target fi clear echo -e \\n" [$color$target\e[0m] $(date '+%Y.%m.%d %H:%M:%S')\n" tput civis for ((;;)); do tempconf=$("$YGGBIN" -genconf) EncryptionPublicKey=$(echo $tempconf | grep -w -o -E "EncryptionPublicKey: [0-9a-f]{64}") if ( echo $EncryptionPublicKey | "$YGGBIN" -address -useconf | grep -i -E "$target" &> /dev/null ); then EncryptionPrivateKey=$(echo $tempconf | grep -w -o -E "EncryptionPrivateKey: [0-9a-f]{64}") yggsubnet=$(echo $EncryptionPublicKey | "$YGGBIN" -subnet -useconf) yggaddress=$(echo $EncryptionPublicKey | "$YGGBIN" -address -useconf) mkdir ./sygX$dirname &> /dev/null sygnamefile=$(echo $yggaddress | tr : _) echo -e "# Address: $yggaddress\n# Subnet: $yggsubnet\n\n# Change it to yggdrasil.conf\n $EncryptionPublicKey\n $EncryptionPrivateKey\n\n# SimpleYggGen v2.4 [$(date '+%Y-%m-%d %H:%M:%S')] \n# Check new version: https://cloud.disroot.org/s/TA63PBsQ6Z7dfGW" > ./sygX$dirname/$sygnamefile randomfortune=$(($randomfortune+1)) fi circle=$(($circle+1)) echo -n -e " \e[35m$circle/\e[0m$randomfortune \e[32m$yggaddress\e[0m " \\r done } # Start script execution intro # Run test if enabled if [[ $runtest == "true" ]]; then test else color="\e[37m" fi # Start interactive main
Для использования, после загрузки необходимо сделать файл исполняемым:
$ chmod +x ./syg2.4.sh
И запустить (права суперпользователя не требуются):
$ ./syg2.4.sh
Регулярные выражения - это набор символов, которые наделены особыми свойствами. Они позволяют сделать процесс майнинга более нацеленным на нужный результат. Это позволяет избежать выдачи похожих, но неподходящих адресов.
Для проверки регулярного выражения перед майнингом его можно проверить следующим образом:
echo примерный_адрес_который_вы_хотите | grep -E "Регулярное_выражение"
Если выдача команды оказалась пустой, по вашему регулярному выражению искомый адрес обнаружен не будет.
^2.[a-f] # Привязка к началу строки, двойка - первая, затем любой символ, третий символ - любая цифра от "a" до "f".
1dea$ # Привязка к концу строки.
^...:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}:[a-f]{1,4}$ # Адрес, состоящий только из букв от a до f.
:: # Адрес с двойным двоеточием (является целью по умолчанию).
На майнинг указанного адреса ушли сотни миллионов циклов (около месяца в несколько потоков).
200::c84:77b0:f66d:b47e:64c7
Такие адреса находились примерно раз в 20-40 минут, каждый оценивался визуально. В результате майнинга в течение нескольких суток были сохранены адреса с подсетью ( gemini://betahowto.duckdns.org/yggdrasil:subnet_setting ) следующего вида:
300:ace:1ace:dd67::
300:ace:1dea:319f::
300:ace:ac1d:1f10::
Конечно же это баловство, но мелочь, а приятно ;-)
В версии 2.3 (релиз 29.05.2020) появилось три функции, которые делают работу с полученными файлами конфигурации более удобной.
Данный функционал полезен для крупномасштабного майнинга.
Для замены специальных символов в названии файлов и папок, создаваемых майнером, необходимо раскомментировать строку special=false. В некоторых ситуациях это может оказаться полезным.
Таблица замены спецсимволов:
+--------------------+--------+------------------+ | Спецсимвол | Замена | Мнемоника | +--------------------+--------+------------------+ | * | S | Star | | Вертикальная черта | I | | | : | C | Colon | | Крышка | U | Up | | $ | D | Dollar | | - | M | Minus | | [ | L | | | ] | J | | | . | T | Точка, по-русски | +--------------------+--------+------------------+
Спасибо: R4SAS
gemini://betahowto.duckdns.org/user:acetone
gemini://betahowto.duckdns.org/yggdrasil:address_miners:simpleygggen_cpp
gemini://betahowto.duckdns.org/yggdrasil:address_miners:simpleygggen_go
https://cloud.disroot.org/s/TA63PBsQ6Z7dfGW"
gemini://betahowto.duckdns.org/yggdrasil:subnet_setting
https://github.com/vikulin/ygg_me_nice_ipv6