diff --git a/yggdrasil/err.html b/yggdrasil/err.html new file mode 100644 index 0000000..718e915 --- /dev/null +++ b/yggdrasil/err.html @@ -0,0 +1,22 @@ + + + + + Access denied + + +
+

The reseed is available for download from an I2P router only!

+ +

+ diff --git a/yggdrasil/reseed_nginx.conf b/yggdrasil/reseed_nginx.conf new file mode 100644 index 0000000..013d55d --- /dev/null +++ b/yggdrasil/reseed_nginx.conf @@ -0,0 +1,15 @@ +limit_req_zone $binary_remote_addr zone=reseed:512k rate=10r/m; + +server { + root /srv/pyseeder/output; + listen [324:9de3:fea4:f6ac::ace]:7070; + index seed.html; + location /i2pseeds.su3 { + limit_req zone=reseed burst=5; + error_page 403 /err.html; + if ($http_user_agent !~* "Wget/1.11.4" ) { return 403; } + } + location /acetone_at_mail.i2p.crt { + limit_req zone=reseed; + } +} diff --git a/yggdrasil/seed.html b/yggdrasil/seed.html new file mode 100644 index 0000000..02ba654 --- /dev/null +++ b/yggdrasil/seed.html @@ -0,0 +1,19 @@ + + + + + I2P Reseed. First in Yggdrasil. + + +
+

Number of Yggdrasil routers in the I2P network.

+

Data from the current reseed. Updated hourly.

+

13

+
+ diff --git a/yggdrasil/wild-putin.png b/yggdrasil/wild-putin.png new file mode 100644 index 0000000..63ec084 Binary files /dev/null and b/yggdrasil/wild-putin.png differ diff --git a/yggdrasil/y2r.sh b/yggdrasil/y2r.sh new file mode 100644 index 0000000..97d1d0a --- /dev/null +++ b/yggdrasil/y2r.sh @@ -0,0 +1,186 @@ +#!/bin/bash +# +# The script finds routers with a Yggdrasil IPv6 +# and mixes 30% of regular routers with them. +# +# If Yggdrasil < 25 then regular routers 25; +# +# Путь до папки netDb, которая будет скопирована +netdb=/var/lib/i2pd/netDb +# Путь до выходной папки +outdb=/srv/pyseeder/transitoutput +# +### +temp=/tmp/yggreseed +success=/tmp/yggreseed.success +padding=/tmp/yggreseed.padding +minimum=25 # Минимальное количество роутеров с Ygg +timestart=$(date '+%Y-%m-%d %H:%M:%S') +### + +# Проверка рабочих директорий: +echo -n $netdb... +cd $netdb &> /dev/null +if [[ $? != 0 ]]; then + echo "X" + exit 1 +else + echo "OK" +fi +ls + +echo -n $outdb... +cd $outdb &> /dev/null +if [[ $? != 0 ]]; then + echo "X" + exit 2 +else + echo "OK" +fi +ls + +# Очистка выходной директории +echo "Clearing the output directory..." +rm -r $outdb/* &> /dev/null + +maketemp () { # Создание временной папки первичной сортировки + echo "Creating temp directory..." + rm -r $temp &> /dev/null + mkdir $temp &> /dev/null + if [[ $? != 0 ]]; then + echo "Error. Exiting." + exit 3 + fi +} +maketemp + +copy () { # Копирование базы роутера в первичную временную папку + echo "Copying the router base to the temp directory..." + cp -r $netdb/* $temp/ &> /dev/null + if [[ $? != 0 ]]; then + echo "Error. Exiting." + exit 4 + fi +} +copy + +# Main section + +echo "Finding the Yggdrasil routers:" +cd $temp +yggaddr=0 +count=1 + +for((;;)); do # Поиск Yggdrasil-роутеров и их копирование в выходную директорию + dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$) + if [[ $? != 0 ]]; then + break + fi + + cd $dir + for((;;)); do + dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$) + if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее + cd $temp + rmdir $dir + break + fi + + echo -n "[$count] " + echo -n "$dat [" + cat $dat | grep '=.[23]..:' &> /dev/null # Поиск host=200: или host=300: + + if [[ $? == 0 ]]; then # Успех, забираем + echo "+]" + let yggaddr++ + mkdir $outdb/$dir &> /dev/null + mv ./$dat $outdb/$dir + echo $dat >> $success + else # Не успех, удаляем + echo ".]" + rm ./$dat + fi + let count++ + done +done + +echo -e "\n================================================= YGGDRASIL *" +cat $success +rm $success +echo -e "===========================================================" + +echo -e "Reseed building..." +yggvolume=$(($yggaddr / 100 * 70)) # 70% ресида - Ygg-роутеры. +echo -n "Need " +if [[ $yggvolume < $minimum ]]; then # Если их меньше minimum, докладываем 25 роутеров обычных + echo -n "25 " + paddingcount=25 +else + paddingcount=$(($yggaddr / 100 * 30)) + echo -n "$paddingcount " +fi +echo "regular routers" + +cd $temp +maketemp +copy +echo -n "Padding status: " +realpadding=0 +for((i=0; $i < $paddingcount; i++)); do + + rand=$(( $RANDOM % 10 )) + for((j=0;$j!=$rand;j++)); do + cd $temp + dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$) + if [[ $? != 0 ]]; then + echo "Dir error! PADDING-RAND-FOR" + exit 5 + fi + cd $dir + dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$) + if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее + cd $temp + rmdir $dir + else + rm ./$dat + fi + cd $temp + done + + padselect () { # Дополнение ресида случайными роутерами + cd $temp + dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$) + if [[ $? != 0 ]]; then + echo "." + padselect + fi + cd $dir + dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$) + if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее + cd $temp + rmdir $dir + padselect + fi + } + padselect + + mkdir $outdb/$dir &> /dev/null + mv ./$dat $outdb/$dir + echo $dat >> $padding + let realpadding++ + echo -n "*" +done + +echo -e "\n=================================================== PADDING *" +cat $padding +rm $padding +echo -e "===========================================================" +echo -e "\nstarted: $timestart\nfinished: $(date '+%Y-%m-%d %H:%M:%S')" +echo -e "total routers: $count" +echo -e "reseed build: $(($yggaddr+$realpadding)) ($yggaddr/$realpadding)\n" +echo -e "Yggdrasil I2P reseed creator (c) GPLv3, acetone, 2021\n" + +# Update web page + +sed -i "s/>[0-9]\{1,1000\}$yggaddr