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.
271 lines
15 KiB
271 lines
15 KiB
9 months ago
|
====== SYG - Майнер адресов на bash ======
|
||
|
|
||
|
SimpleYggGen -- майнер адресов Yggdrasil, написанный на bash. Позиционировался, как простой инструмент, с которым справится даже начинающий пользователь Linux. Позволяет добывать адреса с красивыми сочетаниями символов. Работает с регулярными выражениями. Проект поддерживался пользователем [[user:acetone|acetone]]. Первый релиз датируется 23 апреля 2020 года.\\
|
||
|
Причина малой скорости работы скрипта кроется в обращении операционной системы к бинарному файлу Yggdrasil. Скрипт постоянно запрашивает у него конфигурационный файл, после чего проверяет полученный адрес через стандартный функционал того же бинарного файла.\\
|
||
|
Код распространяется свободно, номинально под лицензией GPL v3 or later.
|
||
|
|
||
|
**Notabene**: В настоящее время использование скрипта SYG на bash не имеет практического смысла. Он остался в истории, как идеологический прородитель, когда в игру вступили майнеры, написанные на [[yggdrasil:address_miners:simpleygggen_cpp|C++]] и [[yggdrasil:address_miners:simpleygggen_go|Go]].
|
||
|
|
||
|
{{:syg:v2.4.png}}
|
||
|
|
||
|
==== Механика процесса ====
|
||
|
Для работы скрипта, в системе должен быть установлен клиент Yggdrasil. В конечном счете майнинг сводится к получению файлов конфигурации Yggdrasil и их проверке на совпадение адреса с искомым фрагментом. Цель (target) задается при запуске скрипта. Обработка осуществляется по параметру EncryptionPublicKey.\\
|
||
|
|
||
|
=== Наглядный пример ===
|
||
|
<code 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}")
|
||
|
|
||
|
# Затем удачный конфиг записывается на диск.
|
||
|
</code>
|
||
|
|
||
|
==== Скачать ====
|
||
|
Для практического использования скрипта и более подробного изучения кода, можете сохранить скрипт, кликнув по заголовку блока:
|
||
|
<file 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
|
||
|
dirname=$(echo $target | tr \* S | tr \| I | tr : C | tr ^ U | tr $ D | tr - M | tr [ L | tr ] J | tr . T)
|
||
|
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
|
||
|
</file>
|
||
|
|
||
|
Для использования, после загрузки необходимо сделать файл исполняемым:
|
||
|
<code>
|
||
|
$ chmod +x ./syg2.4.sh
|
||
|
</code>
|
||
|
И запустить (права суперпользователя не требуются):
|
||
|
<code>
|
||
|
$ ./syg2.4.sh
|
||
|
</code>
|
||
|
==== Регулярные выражения ====
|
||
|
Регулярные выражения - это набор символов, которые наделены особыми свойствами. Они позволяют сделать процесс майнинга более нацеленным на нужный результат. Это позволяет избежать выдачи похожих, но неподходящих адресов.
|
||
|
* Звездочка "*" означает любое количество символов в строке, предшествующих "звездочке", в том числе и нулевое число символов. Выражение "233*" - означает 2 + один или более символов "3" + любые другие символы: 23, 233, 23355, и так далее.
|
||
|
* Точка "." означает не менее одного любого символа. Выражение "13." будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).
|
||
|
* Крышка "^" означает начало строки.
|
||
|
* Знак доллара "$" в конце регулярного выражения соответствует концу строки.
|
||
|
* Квадратные скобки "[ ]" предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок. Выражение "[abc]" соответствует одному из символов a, b или c. Выражение "[a-f]" соответствует одному из символов в диапазоне от a до f, включительно. Выражение "[a-f0-9]" соответствует одному из символов латиницы от "a" до "f" или цифре. Выражение "[^b-f]" соответствует любому символу, кроме символов из диапазона от "b" до "f", включительно. В данном случае крышка означает отрицание.
|
||
|
|
||
|
Для проверки регулярного выражения перед майнингом его можно проверить следующим образом:
|
||
|
<code>
|
||
|
echo примерный_адрес_который_вы_хотите | grep -E "Регулярное_выражение"
|
||
|
</code>
|
||
|
Если выдача команды оказалась пустой, по вашему регулярному выражению искомый адрес обнаружен не будет.
|
||
|
==== Примеры ====
|
||
|
=== Практические примеры регулярных выражений: ===
|
||
|
''^...:420:'' # Привязка к началу строки, первые три символа - любые, двоеточие, 420, двоеточие.\\
|
||
|
''^2.[a-f]'' # Привязка к началу строки, двойка - первая, затем любой символ, третий символ - любая //цифра// от "a" до "f".\\
|
||
|
''1dea$'' # Привязка к концу строки.\\
|
||
|
''^...:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}:[0-9]{1,4}$'' # Адрес, состоящий только из цифр от 0 до 9.\\
|
||
|
''^...:[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''
|
||
|
|
||
|
|
||
|
''^...:ace:'' # Второй разряд адреса "ace".\\
|
||
|
Такие адреса находились примерно раз в 20-40 минут, каждый оценивался визуально. В результате майнинга в течение нескольких суток были сохранены адреса с [[yggdrasil:subnet_setting|подсетью]] следующего вида:\\
|
||
|
''
|
||
|
300:ace:1ace:dd67::\\
|
||
|
300:ace:1dea:319f::\\
|
||
|
300:ace:ac1d:1f10::\\
|
||
|
''
|
||
|
|
||
|
Конечно же это баловство, но мелочь, а приятно ;-)
|
||
|
==== Дополнительные функции ====
|
||
|
В версии 2.3 //(релиз 29.05.2020)// появилось три функции, которые делают работу с полученными файлами конфигурации более удобной.
|
||
|
* ''log'' - сохраняет в файл имена всех имеющихся адресов
|
||
|
* ''tar'' - создает лог и упаковывает все имеющиеся адреса в один архив
|
||
|
* ''tardel'' - создает лог, упаковывает конфиги в архив и удаляет оригинальные файлы
|
||
|
Данный функционал полезен для крупномасштабного майнинга.
|
||
|
==== Специальные символы в именах ====
|
||
|
Для замены специальных символов в названии файлов и папок, создаваемых майнером, необходимо раскомментировать строку ''special=false''. В некоторых ситуациях это может оказаться полезным.
|
||
|
Таблица замены спецсимволов:
|
||
|
^ Спецсимвол ^ Замена ^ Мнемоника ^
|
||
|
| * | S | Star |
|
||
|
| Вертикальная черта | I | |
|
||
|
| : | C | Colon |
|
||
|
| Крышка | U | Up |
|
||
|
| $ | D | Dollar |
|
||
|
| - | M | Minus |
|
||
|
| [ | L | |
|
||
|
| ] | J | |
|
||
|
| . | T | Точка, по-русски |
|
||
|
|
||
|
===== Ссылки =====
|
||
|
* [[yggdrasil:address_miners:simpleygggen_cpp|SimpleYggGen-C++]]
|
||
|
* [[yggdrasil:address_miners:simpleygggen_go|SimpleYggGen-Golang]] от tdemin
|
||
|
* [[https://github.com/vikulin/ygg_me_nice_ipv6|YggMeNice (Golang)]] от vikulin
|
||
|
|
||
|
''**Спасибо:**'' R4SAS
|