воскресенье, 22 марта 2015 г.

Percentile & awk

Намедни понадобилось посчитать процентиль из некоего текстового файла. По сути, необходимо сделать следующее - расположить все встречаемые значения по возрастанию и выбрать элемент, который будет соответствовать нужному %. К примеру - есть 100 отсортированных значений, процентиль 95% в этом случае будет 95-й элемент. Соответственно, скрипт примерно такой:

{ array[NR] = $1 }
END { print "Percentile 95%: " array[int(NR*.95-0.5)] }
Такой сценарий часто встречается в инете. Однако есть сложность - данные в $1 должны быть заранее отсортированы. А если надо посчитать процентиль для нескольких столбцов, то приведенный способ совсем не подойдет.

Тут на выручку приходит встроенная в awk функция asort():

{ array1[NR] = $2; array2[NR] = $4 }
END { n=asort(array1); n=asort(array2);
      print "Percentile 95%: " array1[int(NR*.95-0.5)], array2[int(NR*.95-0.5)]
}
Здесь n - размер массива. Полезно, в случае, когда не все строки участвуют в подсчете, т.е. NR > n.

вторник, 10 марта 2015 г.

TP-Link WDR4300 + snmpd, очередная версия.

Собрал последнюю EN-версию с включенным snmpd: 3.14.1 Build 141113 Rel.41164n. Установил на свой домашний роутер. Из нововведений - переделан вход в web-админку, и нет совместимости со старыми бинарными конфигами. Уже не раз писал об "удобвстве" бинарных конфигов. Пришлось небольшую базу из резервированных MAC вручную добавлять.

Вот. Повторюсь - шьете на свой страх и риск. Однако замечу, что этот риск нисколько не выше, чем шить "фирменную" 3.14.1-en, поскольку в моей добавлены только snmpd, необходимые ему библиотеки и подправлен rcS, для автозапуска.

Обратил внимание на то, что в новой прошивке встроен dropbear, который нормально запускается вместе с роутером, но залогиниться на него невозможно: root-овый пароль не принимает, а admin-ский прокатывает, но на стороне клиента пишется следующее:

PTY allocation request failed on channel 0
shell request failed on channel 0

т.е. похоже ребята забыли создать соответствующие консоли. А рута не логинит наверняка в связи с тем, что его консоль не прописана в securetty. Имхо.

TP-Link WDR4300 GPL 2.6.31

Намедни попытался собрать прошивку "по следам" последней версии en. Вставить snmpd, добавить функционала в busybox и пересобрать ядро. Всё собралось прекрасно, только вот виснет после распаковки ядра.

Пришлось вспоминать, как дебрикать роутер. Вкратце: необходимо иметь хост с адресом 192.168.0.100 на котором должен работать tftp-сервер. В корень этого сервера необходимо разместить прошивку с отрезанным u-boot. Такую можно получить из любой стоковой путем "отрезания" от нее 257 блоков по 512 байт:

dd if=stock-fw-with-boot.bin of=stock-fw-wo-boot.bin skip=257 bs=512
Назвать ее надо по особому - 6F01A8C0.img. После этого подключиться консолью к роутеру - обресетить его и в момент, когда он скажет "Autobooting in 1 seconds" быстро ввести ему tpl и нажать Enter(у меня никак не получалось, пока я в буфер обмена сие не запихал и в нужный момент правой кнопкой мыши в окне putty не кликнул;)). В появившемся приглашении - сказать tftboot. Если tftp-сервер настроен верно - начнется загрузка фёрма. После загрузки его надо "прошить" и "обресетить" роутер:
db12x> erase 0x9f020000 +7c0000

First 0x2 last 0x7d sector size 0x10000                                                                                                                                                                                                  125
Erased 124 sectors

db12x> cp.b 0x81000000 0x9f020000 0x7c0000

Copy to Flash... write addr: 9f020000
done

db12x> reset

После этих пассов роутер обязан "взлететь". Проверено дважды. Первый раз - пытался вернуться на сток после OpenWRT: процесс прошивки прошел криво - ядро грузилось, а корневая ФС не могла, из-за чего роутер вошел в циклический ребут. Понятное дело, в этом состоянии он не пытался грузить файл с tftp. Второй раз - сегодня из-за того, что самосборное ядро работать не схотело. Вопрос - почему? Вроде всё по фирменному мануалу собирал...

пятница, 6 марта 2015 г.

TP-Link WDR4300 snmpd. Part4

После сборки прошивки со встроенным snmpd месяц наблюдал за трафиком. Что-то в графиках не так. Есть у меня серверочек, который торренты сидирует. С него вылетает ~200Кбайт/с. А роутер говорит, что в сторону прова от меня скорость ~50Кбит/с. Думал, что snmp собрался неверно.

Однако, когда что-то скачивается через wifi - трафик наблюдается во всех местах, где ему положено быть. И в ожидаемых объемах. А по эзернету - ~50Kbit/s даже в том случае, когда качается файло со скоростью 8Мбайт/с! Если snmp умеет показывать правильные результаты - значит, он не виноват.

Вспомнил, что на WDR4300 имеется Hardware NAT. Отключил. Трафик появился. Странно. И непонятно, стоит ли включать HW NAT назад. Скорость без него не упала ни на чуть. Нагрузки на проц как не было, так и нет. Да и со включенным HW NAT чип, который посвящен эзернетам греется так, что палец не терпит. Наверное месяцок поюзаю роутер с выключенным HW NAT.

среда, 4 марта 2015 г.

Мысль про роутеры.

Как я писал в предыдущей статье, после перешивки нетгирьки загрузка процессора на нем серьезно упала. Подумалось - чем же занимался процессор роутера, который использовался как АР, т.е. ему даже NAT выполнять было не надо? Ответ прост - выполнял какие-то задачи производителя.

И вот, собственно, мысль: почему бы производителю роутера не написать софт, который будет исполнять распределенную задачу. К примеру, взламывать пароли. John The Ripper у нас вполне себе умеет OpenMP. Т.е. производитель firmware, который не предоставляет исходных кодов (или предоставляет не полностью) вполне может встроить в прошивку какую-нибудь распределенную задачу, а роутер будет периодически ходить на определенный сайт, чтобы слить то, что уже порешал и обновить задачи.

Таким образом производитель получает деньги с продажи устройств, и бесплатный кластер в придачу. Даже за электричество платить не надо.

вторник, 3 марта 2015 г.

Netgear WNR3500Lv2 Router, part 2

В выходные пересобрал фирменную прошивку для старенького WNR3500Lv2. Оказалось, что периодически встроенный туда snmpd падает. А поскольку логи в стоковой прошивке написаны непонять как - причины невозможно выяснить. Кроме того, на роутере зачем-то крутится java-приложение, которое периодически лазает "на родину" и что-то пытается выкачать.

В общем, подумал, почитал и плюнул на сток. Прошил EntWare, которая от vampik'а. Стало полное заглядение - в данной прошивке можно выбрать роутеру режим AP, тогда все Ethernet-порты отдаются под свитч, а интернет ожидается откуда-то из внутренней сети. Что в моем случае и нужно - роутером у меня трудится TP-Link WDR4300, а нетгиря - дополнитьельный спот и свитч.

Два выходных потратил на сборку. Впрочем, нельзя сказать, чтобы совсем в пустую - потренировался собирать под mipsel-linux, Теперь можно прошивку vampik'а "покрутить" самому. Вот только зачем? В прошивке предусмотрено всё, что хотелось. Кстати, загрузка процессора на стоковой была 40-90% (java прожорливая), а на EntWare - изредка поднимается до 20% на пару мгновений.

При перешивке таки "закирпичил" роутер - после переходной прошивки прошил не для того роутера. Воспользовался советами отсюда, описано понятно. Потратил на раскирпичивание минут 10-15.

воскресенье, 1 марта 2015 г.

TP-Link WDR4300: httpd, который рулит всем, дубль два

Который день пытаюсь найти исходники типилинковского httpd, для чего рассматриваю строковые значения. Похоже, что даного сервиса в сырцах в открытом доступе нет. Однако софтописатели, которые его писали таки обладают толикой юмора - встретил среди строк такую:

Ahhhh! call 911!

Встречается она два раза, первый - в связи с dyndns, а второй - в непонятном контексте.

Вообще, в бинарнике, размером 1.5Мб встречено 200Кб строк, большинство из которых посвящены конфигурации системы. Совершенно неясно, почему разработчики tp-link не вынесли конфиги в отдельный файл. Как, впрочем, неясна причина, по которой httpd в GPL source не отдается в сырцах.