Здравейте от доста време несъм писал, че имах едни тежки 5 дневни купони 😆 и почти несъм имал време да бъда в реална кондиция, че да драскам смислени неща 😈 Но както и да това е тема за някои следващ пост 😉 Засега ще се позанимая да разгледам темата за open source firmware за рутери (маршрутизатори). Досега няколко пъти съм споменавал dd-wrt като мои личен фаворит, но преди по малко от седмица нашето момче gat3way откри брутален секюрити бъг в софтуера му, което ме накара да разгледам по сериозно някои от другите проекти. В кокретност се спрях на tomato което отдаван ми беше препоръчал моя прител Жоро Филипов.

Преминаването от единия софтуер към другия беше безпроблеме дирекно от часта за упгреид, нямаше нужда от допълнителни врътки. След инсталацията на „домата“ ме впечетли изчистения му интерфеис. Като цяло винаги съм предпочитал нещо семпло като дизаинче не нещо претрупано. Като красота определно dd-wrt води а tomato изглежда като съдадено от мен – 2-3 цвята, но за някои това е красиво 😉 .  Другото което ми направи голямо впечетление е доста по малкото възможности – липсват му около 40% от разните му сървирски хави и прочие които има dd-wrt. Дам обаче за сметка на това работи доста по леко 😉 Така че дефекта може и да е ефект. Приятна изненада е, че tomato идва с описани портове за по добър p2p трафик и с разрешен UPnP . Също така прави впечетление, че домата подържа малко по високи скорости на трансфер при безжична връзка, при лан неъм тествал понеже нямам особено време, но мисля че все още има какво да се пооптимизира. Минус е подръжката на малката гама устроиства за разлика от dd-wrt, tomato работи на доста по ограничн брои устроиства, надявам се за в бъдеще да се промени този факт 😉 Също така минусче е доста по сложния филтър на лимитиране на трафика (мен това ме кефи ама някои непросветен ще се оцъкли). Друг минус е липсата на овърклок на процесора на рутера, въпреки че четох за магии през конзолата 😉 . Като цяло това е сравнително синтезирано и опростено сравнително ревю между двата софтуера, лично мен ме радва повече доматчето, но все още има и други подобни които несъм тествал 😉

Така работата продължава 😉 Имам си нова версия на NUKI основното подобрение е, че правилогове на това кога се рестартира приемника. За целта съм използвал nc като го вдигам на порт 666 😈 и през него хвърля лога преди да се рестрти. За да може да е вдигнат nc докато работи cron-a за логване по дримовете съм напсиал скрипт които върти в безкраен цикъл nc защото след всяка конекция към него се затваря с приключването на трансфера. Сами скрипт е досатъчно кратък и ясен при желание да се променят портовете и мястото каде да пише фаила 🙂 Самия лог смятам по натам в времето да го импортирам в база данни затова и формата на дата-та е такъв.

От доста време тия „спящи кутии“ ми торвят здравето 🙂 В конкретност работят работят и в някои момент забие приемника и изисква рестарт на CAM модула. В моя случаи ползвам newcs и mgcamd за декодиране на програмите и когато забиеше някоя програма mgcamd процеса се претоварваше развиваше стоиности от порядъка на 80-90% заемане на процесорна мощ 🙂 Ясно вече имаше болест имаше и симпом само лекарство ми трябваше 😉 хубаво ама мъничетат ми 500s не разполгат с голям капацитет от команди например ps няма u аргумента top няма -p и т.н много мразим busybox 😆 Стига дивотии нека да мина към същината 🙂 Всичката необходима информация се съдържа в папката /proc след достa четене напред назад и след помощ от добрия ми прител ShadowX без които нямаше да успея се стигна до следния прекрасен скрипт клик 🙂 Също така и моя прител Nathariel които ми търпеше жуженето през цялото време 😉  ХАХ типично за мен започвам да обяснвам нещо започвам второ трето и пето 🙂 хахахах Така стига дивотии ами да взема да се хваля колко готен програмист съм 😉

Най важната конструкция в скрипта е

# Get usage cpu time
cputime=`cat /proc/uptime | awk '{print $1}' | sed 's/\.//'`
# Get process usage cpu time
proctime=`cat /proc/${procpid}/stat | awk '{t = $14 + $15;print t}'`
# wait 5 seconds
sleep 5
# get usage cpu time, again
cputime2=`cat /proc/uptime | awk '{print $1}' | sed 's/\.//'`
# get process usage cpu time, again
proctime2=`cat /proc/$procpid/stat | awk '{t = $14 + $15;print t}'`
# calculate process usage cpu time over total usage cpu time as percentage
cpu=$((($proctime2-$proctime)*100/($cputime2-$cputime)))
# limit exceed check
echo CPU usage for PID $procpid is $cpu
if [ $cpu -gt $MAX ];
then
reboot
fi

като цяло добре съм си я описал с коментарчета като добре дете 😉 Общо взето това е сърцето на скрипта взима стоиност от /proc/ид-то-на процеса/stat и следтова изчита стоиноста 5 секунди по късно. Формулката за ичисляване е кристално ясна за разбиране и второкласник ще я реши лесно. Нещо много важно за наблягане е, че скрипта ползва ash които си е доста неприятно окълцан ако си свикнал с всички лигни на bash 😉 В страничката на скрипта съм описал по подробно технологията на работа и логиката на ползване. Ще се радвам на мнения препоръки и бъг репорт, защото една глава не стига 🙂

От няколко дни правя firewall за офиса ми, защото досега ползвах маскарадинг на ip-тата а трябва да прекарвам всичко през SNAT, абе объркана истояи 😆 Просто трябваше да пренапиша цялата рутерска логика. Както обичам да казвам речено сторено, написах го firewall-a всичко хубаво работи сега додие време да изрязвам портове ip-та кои да има достъп и кои не. Стана ми лошо като си дадох сметка че трябва да напиша около 40 правила за достъп, то само копи и песит пак не си е хава. Тогава програмиста в мен проговори ами наприво само да ги прави. Всичко беше ясно – идеята в 2 отделни фаила пиша портове и ip-та изчитат се създават се правила за разрешаване и всичко друго е изрязано. Самия код се получи доста „тънък“ чак неочаквано малък

##Allow and DROP ip and ports
while read PORT
do
while read IP
do
$IPT -A INPUT -p tcp -s $IP --dport $PORT -j ACCEPT
done < /etc/firewall/allow_ip
$IPT -A INPUT -p tcp --dport $PORT -j DROP
done < /etc/firewall/ports

Скриптчето е адски ясно цикъл в цикъла първия чете от /etc/firewall/ports a втория от /etc/firewall/allow_ip и се създават правилта 🙂

ps Заради синктактичното оцветяване не се показва корекно знака < а се показва html еквивалента му &lt;

Заглавието трепе а 😉 😈 Днес направих ъпгреид на сървърчето ми или по скоро изцяло го смених 😉 В момента моята жмуда работи с 2600+ Athlon Barton с 512 ddr на 400 памет което превъзхожда старата жмудка с светлинни години 🙂 миличката беше с 550mhz процесорче и с едва 3х64 sd рам на 100 🙂 Както и да е да ми е честито новото ми бебче. Като цяло хаиванчето работи и на 2,3Ghz ама имх малко проблеми с стабилноста на приложенията а ме мързеше да нацеля точните волтажи на процесора и чипсета затова го оставих на нормални нива като цяло процесорната мощ не ми е била проблем по скоро рамта винаги ми е сгъвала старото сърбърче 🙂 Последни мрънкащи думи 😉 Незнам дали знаете една благикните на линукс, ако сложите диска с операцинната си ситема на корено различна архитектура желязо ще заработи без никакви проблеми 😉 Хаиде сладури и сладурковци наслаждаваите се на новата по бърза жмуда а аз ще замисля разни стрииминг палави неща с които да ви радвам 😆 😉

ps Честит ви ден на Кирил и Методий