Wing nut driver для чего он
Когда возникает задача мониторить бесперебойники у рабочих станций? Запищал – заменил, конец. Чинить ИБП – дело неблагодарное, менять аккумуляторы – не все хотят возиться (или даже моветон).
Так думал и я, особенно после череды ИБП с отказавшей электроникой. Ситуацию усугублял софт от производителей. Он, как бы это помягче выразиться, барахло. Причем у всех – APC, Ippon, Powercom, TrippLite. Что серверный, что для рабочих станций. Пробовать платные версии после опыта с бесплатными – желания не возникло. А совсем весело, когда ИБП от разных производителей.
Но мониторить всё же надо. Плюсы очевидны: 1) можно поменять ИБП ДО того, как он издаст прощальный писк; 2) можно сразу увидеть, где сдохла батарея, а где электроника.
Минус же прост, как всегда: стоимость решения, в деньгах или человеко-часах.
Вот эту проблему и будем решать.
Если имеем зоопарк, то самый адекватный способ – это Network UPS Tools.
По нему мало информации про Windows, а ещё нет GUI. Но это мы решим.
Справедливости ради нужно отметить, что есть похожий проект на Python. Но мне лично кажется совершенно излишним использование Python (и подобные технические решения) там, где можно обойтись парой строк нативного скриптинга.
- Это не «готовое решение».
- Это не предложение, а рассказ.
- Да, есть Zabbix, Cacti, etc, и это тяжеловесные решения для больших компаний, требующие выделенного сервера и всё равно какого-то промежуточного слоя для поддержки соответствующего протокола UPS.
- При всём вышеперечисленном, решение достаточно простое, достаточно лёгкое и стоит 0 валюты.
Разумеется, для сбора информации понадобятся UPS с инфо-портом. У меня возникли проблемы с COM-портом IPPON, всё остальное работает на ура.
Обычно для рабочих станций используется подключение ИБП по USB, этот случай и рассмотрим. Нужно установить NUT на все рабочие станции с ИБП.
Возможные проблемы при этом:
This is an Easy Re-purposed DIY tool..
I do a lot of tumbling of geodes which are amazing special rocks good for a tumble.
My large tumblers are a 9" barrels with rubberized innards that hold, a bunch of rocks,
in tap water, with a scoop of grinding grit and about 15% free air space = volume..
Then the barrels are sealed and rotated at 16 RPM 24/7 for about two weeks.
- I have to unscrew the six 1/4-20 Wing-nuts per barrel
- Which starts by using a pair of pliers to loosen each one of them.
- Then finger un-twisting each of the Wing-nuts
- A future ible will describe why this is a Fascinating Hobby
- Then repeat this process in reverse.
- Finger twist and tighten each of the Wing-nuts
- Finally using a pair of pliers to tighten each one of them.
Step 1: What You Need
- A Concrete Anchor.- - - - mine was left over from a recent deck extension.
- And a 1/4-20 Wing-Nut and a bolt - - - to tune the Key for a best fit.
- A 3 inch vice - - - - - - to squeeze the metal fingers together, & yes mine is a 4".
- A hack saw - - - - - - - to cut the iron anchor rod..
- A grinder or rat file - - to dimple the Key fingers to clear the wing-nut center bulge.
- A wire wheel - - - - - - to remove the paint and smooth sharp metal edges.
Step 2: How You Make the Key
This is really simple
- Do the cut, longer is better ( you can always cut shorter )
- Second picture
- Pinch the fingers together
- Pictures 4, 5 and six
- Grind the Key Fingers to seat the Wing-nut center bulge
- keep testing how well if envelops the key
- Pictures 7, 8 and nine
- Wire Wheel to clean the paint off of the metal
- Picture twelve
Step 3: USING THE KEY MAGNETIC DRIVER
Enjoy using this simple tool
Which can magnetically help you open undo a Wingnut !
See the short Video.
Step 4: Something Extra
While using my new . WING NUT KEY . Undoing those stubborn Wingnuts
It was immediately obvious and desirable to have the Key Driver
automatically lift the iron based Wingnuts as they disengaged
from the ¼-20 screw thread.
It turns out that the shape of my .. WING NUT KEY .. is a natural .. U .. shaped magnet configuration
and a group of NIB magnets o.42" long slides to the end of the WING NUT KEY fingers
and stops as the pictures show just in the perfect place to hold Wingnuts after they
are un-threaded from the ¼-20 bolt.
See the graphic of the Magnetic flux paths for a clear view.
I have a large selection of NIB magnets left over from my Lucky-Penny-4-You Instructable
and used to hand them out at Burning man as popular favors.
THIN . Magnets o.37" in diameter o.06" thin that's NdFeB Disc, 3/8 in. x 1/16 in. about 15¢ and
THICK . Magnets o.37" in diameter o.12" thick that's NdFeB Disc Magnet, 3/8 in. x 1/8 in about 55¢
You could just buy the 15¢ THIN magnets.
Both of these NIB ( Neodymium-Iron-Boron ) can also be purchased at K&J Magnetic Products..
While the tool works on brass wing nuts Don't expect the magnets to be of any help.
WHAT'S ALL THIS STUFF FOR ?
Has been asked . and . Here is the final result
Be the First to Share
Did you make this project? Share it with us!
Recommendations
Hide It Challenge
3D Printed Student Design Challenge
Laser Challenge
30 Comments
I saw one made from an old steel pipe. The guy had cut out a couple of sections(about 25% of the pipe end, then used 'heat to soften the pipe'(he said), and then flattened three inches or so of the pipe end in such a way that the remaining two 'castillations'(like on top edge of a castle) were sitting to one side of each other with about 1/2 an inch between them. He did the same thing with the other end of the pipe only flattening in the other direction, and drilling a hole for a screwdriver or other tool to be used as a lever.
I really wish I had taken pictures of this thing, it was about 8 inches long total, and once you knew what it was used for was a pretty cool tool design. Without knowing what it's use was, I had though it was just some scrap junk. I was corrected in my thinking pretty quickly by the old guy, however.
Great Idea! Real cool looking too; almost looks like a fleur de li. I might start using wing nuts again, I hate those things >.<
Reply 7 years ago on Introduction
Thanks for your comment, someone told me Harbor Freight sells a better one.
Again sorry to harangue about that motor current .
Reply 7 years ago on Introduction
meh no hard feelings! Debate is how problems are solved :)
Cool beans. There is nothing better than making a good tool.
Reply 8 years ago on Introduction
Yea .. it does feel good . like a lock pick
Been looking at lots of Google images thanks to your heads up.
Reply 7 years ago on Introduction
I used that pick the first 2 months at my Apartment. What a cheap landlord!
built in rare earth magnets and 3 different sizes that in the 3 years I've owned them yet to find a wing nut it won't fit.
Reply 8 years ago on Introduction
I shop Harbor Freight at least twice a month and never saw a tool like that.
Сервис Linux NUT (Network UPS Tools) — это комплекс программ мониторинга и управления различными блоками бесперебойного питания (далее ИБП). Полный список поддерживаемых моделей можно получить, посмотрев список драйверов в файле /usr/share/nut/driver.list.
В руководстве описана настройка отключения ПК агентом NUT при потере напряжения в сети на примере ИБП Eaton 5E 650iUSB на Ubuntu-подобных дистрибутивах. Для использования под другие дистрибутивы используйте пакетный мененджер своего дистрибутива или соберите из исходных кодов. Новейшую версию Network UPS Tools можно скачать на GitHub по ссылке ссылке.
Установка NUT
Для начала следует установить NUT:
Сделаем резерную копию папки с файлами конфигурации NUT:
Теперь добавим директиву, указывающую, что ИБП подключен к данному компьютеру, а не к удаленному:
Теперь подключим ИБП к компьютеру и посмотрим вывод команды lsusb:
Ищем, поддерживается ли ИБП сервисом NUT. Можно либо просмотреть его вручную либо вывести строки с упоминанием марки ИБП, например:
Теперь, когда мы определились с драйвером, можно настраивать NUT.
Защита конфигурационных файлов
Следует выставить верные права доступа и владельцев для файлов конфигурации NUT
Настройка NUT
Настройка драйвера, способа подключения и времени выключения
Дописываем строки в конец файла /etc/nut/ups.conf или создаем новый с таким содержимым:
Настройка доступа системной группы NUT к ИБП по USB
Чтобы NUT имел право на доступ к USB интерфейсу ИБП, нужно написать правило доступа для udev.
udev — подсистема управления устройствами Linux. Благодаря udev в папке /dev находятся только подключенные в данный момент устройства.
и найдем строку, соответствующую ИБП. В нашем примере это
где после ID идет idVendor:idProduct (0463:ffff)
Теперь создадим файл с правилом для udev:
После создания правила следует перезагрузить сервис udev:
После этого следует отключить и заново подключить USB кабель от ИБП. После этого выполним команду для проверки работоспособности udev правила:
Если вывод приблизительно такой, то все настроено правильно.
Настройка адресов и портов прослушивания подключений к NUT
Дописываем строки в конец файла /etc/nut/upsd.conf или создаем новый с таким содержимым:
Имейте в ввиду что LISTEN должно быть написано именно большими буквами, или работать ничего не будет.
Настройка профиля пользователя для доступа к NUT
Создаем пользователя upsmonitor без права логина и домашней папки, с UID меньше 1000, чтобы он считался служебным и его не было на экране входа пользователей в систему, и с GID'ом группы nut.
Узнаем GID группы nut:
Теперь подберем UID для пользователя. Либо выберем такой, какой врядли используется какой либо программой, например, 339, либо выполняем:
и если ничего не выводит, то UID свободен и его можно использовать для создания пользователя upsmonitor:
Настройки мониторинга NUT
Дописываем строки в конец файла /etc/nut/upsmon.conf или создаем новый с таким содержимым:
Тест соединения
Посмотрим, что ИБП может сообщить о своем состоянии:
Все поля более менее очевидны или были определены нами в конфигурационных файлах ранее. Коды состояний ИБП отображаются в поле ups.status: и могут принимать значения:
- OL — система работает от сети;
- OB — система работает от батареи;
- LB — система работает от разряженной батареи.
Внутренние команды и переменные ИБП
ИБП можно давать команды напрямую из консоли, с помощью команды upscmd. Список доступных команд можно получить, выполнив команду:
Настройки beeper.* управляют сигнализацией ИБП в случае потери напряжения в сети, load.off выключает ПК немедленно, load.off.delay задержка в секундах до выключения ПК, shutdown.stop — команда прерывания процесса отключения ПК.
В некоторых ИБП присутствуют и другие опции, например, тест батареи или shutdown.return, в случае использования которой компьютер будет выключен, но ИБП пошлет сигнал включения ПК как только восстановится питание в сети. Чтобы это сработало, в БИОСе ПК дожна быть включена соответствующая функция, которая обычно находится где то в районе настроек питания.
Для примера выключим писк ИБП, когда пропадает питание в сети:
Чтобы включить, замените beeper.disable на beeper.enable.
Настройка планировщика задач NUT upssched
Дописываем строки в конец файла /etc/nut/upssched.conf или создаем новый с таким содержимым:
Теперь теперь нужен скрипт /etc/nut/cmd.sh. Создадим его, выставим права и заполним его:
Заключение
На этом настройка завершена. Можно протестировать, банально выдернув ИБП из розетки.
Доброго здравия! Не удивлюсь, что Вы раньше даже не слышали об этой программе. Как и я, до того дня, когда мне пригодился Python Debugger. Да, знаю, есть pdb, но его функционал и то, как он представлен, мне совершенно не приглянулось. После непродолжительных поисков я наткнулся на этот замечательный продукт. Тут есть все, что может пригодиться в отладке ваших Python приложений (скажу сразу: данный язык я не изучал, поэтому, если какие-то неточности всплывут, просьба не ругаться).
Предостережение: повторяя действия из статьи, вы действуете на свой страх и риск!
Итак, мы начинаем.
Пациент, сразу скажу, необычный. Во-первых: он поставляется с исходниками (. ), пускай и в байт-коде; во-вторых, как это иногда бывает… в общем, увидите.
Первым делом, качаем программу (Wing IDE Professional v 5.1.4). Устанавливаем, осматриваем папку. Главный исполняемый файл находится по адресу ./bin/wing.exe. Запустим его. Ругается на отсутствие Python, поэтому установим и его. Нужен версии 2 (на данный момент это версия 2.7.9). Снова запускаем программу. На этот раз предлагает установить патчи, и перезапуститься. Так и сделаем.
Теперь вылезает окошко с запросом лицензии (т.к. у нас про-версия). Введем какую-нибудь ерунду:
Получаем следующий ответ:
Что забавно: программа нам сама говорит длину ключа (20, не учитывая дефисов), и символы, с которых он должен начинаться. В принципе, с этого уже можно и начать исследовать защиту — найдем эту строчку в файлах программы.
Дальше — интереснее. Результат поиска нашелся в файле ./bin/2.7/src.zip!
Да-да. Все действительно так: программа идет с исходниками. В них-то нам и придется копаться.
Этап два: роемся в исходниках
Включим в Total Commander поиск по архивам, и найдем ту строку снова. Строка лежит в файле: ./bin/2.7/src.zip/process/wingctl.pyo. PYO-файлы представляют из себя бинарники с "оптимизированным" байт-кодом Python.
К нашему счастью, для Питона существует парочка декомпиляторов байт-кода. Чтобы не утруждать Вас поисками, дам ссылки на те, которые мне пригодились:
-
— оболочка, в которой зашиты два декомпилятора (Uncompyle2 и Decompyle++); — иногда распаковывает то, что не могут распаковать другие.
Дожидаемся окончания процесса, и идем осматривать что получилось. А получились на выходе декомпилированные файлы с окончанием _dis. Их мы переименуем в .py. Все бы хорошо, но, выясняется, что имеются также файлы с окончанием _dis_failed, что говорит о том, что эти файлы декомпилятор не осилил. К счастью, файл только один: edit/editor.pyo_dis_failed
Попробуем на него натравить Decompyle++… Та же беда. Не зря я дал ссылку на запасной декомпилятор, т.к. именно он и сделал то, что не удалось другим. Теперь удалим все pyo/pyc файлы из папки src, а .py*_dis переименуем в .py.
Далее повторим все вышеописанное для архива opensource.zip, распаковав его в соседнюю одноименную папку. Архив external.zip я решил не трогать, т.к., осмотрев его, можно увидеть, что там лежат библиотеки, которые можно установить отдельно для нашего Питона. Так и сделаем:
-
— его положим в папку external; — запустить и установить. Из папки external можно удалить; — то же, что и с предыдущим файлов.
Этапы три и четыре: собственно исходный код. Отладка.
Порыскав по питоновским скриптам, я наткнулся на файлик wing.py в корне папки с программой. И, первый же комментарий нам подсказывает:
В двух словах: если скрипту дать параметр --use-src, то при запуске будут использоваться исходники из папок src, external, opensource корневого каталога с Wing IDE (а не со скриптом).
Заглянув в корневую папку, я обнаружил еще одну папку src, и .py-файлы в ней. Подкинем их в нашу папку src, с перезаписью (здесь все таки оригиналы, а не декомпилированные файлы).
Теперь все три папки (указанные чуть выше), скопируем в корневой каталог программы. Попробуем подебажить…
Запускаем Wing IDE, и открываем в ней файл wing.py из каталога bin. Далее в меню Debug -> Debug Environment. в поле параметров указываем --use-src. Теперь стартанем дебаггер (клавиша F5). Если все махинации с копированиями папок прошли успешно, мы получим вторую копию запущенной Wing IDE. Прекрасно!
В отлаживаемом Wing IDE зайдем в меню Help -> Enter License. , и введем ключик согласно правилам (помните?: 20 символов, при том, первый из набора ['T', 'N', 'E', 'C', '1', '3', '6']):
Жмем Continue и попадаем на бабки бряку. Первая же интересная функция: abstract.ValidateAndNormalizeLicenseID(id). Зайдем в нее по F7. Там еще одна: __ValidateAndNormalize(id). Зайдем и в нее.
Первая проверка на валидность:
Видим, что от нас требуют, чтобы символы License ID принадлежали набору textutils.BASE30:
Вроде других проверок в __ValidateAndNormalize(id) нет. Исправляем введенный нами идентификатор и повторяем снова. Проверку на первый символ мы уже прошли:
А вот и второй символ:
Т.к. у нас Professional версия, то второй символ должен быть N — исправляем, и возвращаемся. abstract.ValidateAndNormalizeLicenseID(id) прошелся без ошибок. Прекрасно. Упс:
Фиксим (я выбрал E), и продолжаем. Пробежавшись глазами ниже по коду, ничего дополнительно к предыдущим проверкам я не обнаружил, поэтому смело отпустил отладку далее по F5. Новое окно:
Первая функция проверки: abstract.ValidateAndNormalizeActivation(act). В ней снова проверка на принадлежность BASE30. Проверка на префикс, которую мы уже прошли:
Следующее интересное место:
Заходим в self.fLicMgr._ValidateLicenseDict. Тут формируется хэш от лицензии:
Если посмотреть на содержимое lichash после выполнения этого блока, можно заметить, что текст ее похож на request code, отображаемый в окошке ввода кода активации, хотя несколько цифр и отличается. Ладно, будем думать, что здесь имеют место быть какие-то рандомные части, не влияющие на активацию (что, кстати, далее подтвердится!).
Далее из кода активации отрезают три первых символа, убирают дефисы, преобразовывают в BASE16, и дополняют нулями, если нужно:
И вот оно, самое интересное:
Какой-то control вызывает функцию validate, передавая ему lichash (request code), имя операционной системы, для которой делается ключ, версию программы, и преобразованный код активации. Почему я остановил на этом месте внимание? Дело в том, что этот control — это pyd-файл (в чем можно убедиться, добавив имя объекта в watch, и глянув поле __file__), которые представляют из себя обычные DLL с одной экспортируемой функцией (не validate), которая дает Питону информацию о том, что она умеет делать. Ну что же, давайте посмотрим на нее со стороны декомпилятора Hex Rays…
Этап пять: это уже не Python
Затащим в IDA Pro наш control (ctlutil.pyd) и посмотрим на экспортируемую функцию initctlutil:
off_10003094 представляет из себя структуру, в которой указаны имена и адрес экспортируемых методов. Вот и наш validate:
Из всего кода, который содержит процедура sub_10001410 самым интересным выглядит этот:
Зайдем и в sub_10001020 тоже. Интересно было бы не на глаз давать имена переменным, а подебажить и обозвать их как следует. Так и сделаем. Настроим отладчик IDA Pro:
Думаю, все понятно из скриншота: мы указали приложение, которое в итоге будет подгружать наш pyd-файл.
Теперь ставим бряк на начало sub_10001020, и начинаем заглядывать в переменные и входные параметры. После непродолжительного процесса отладки приходим к такому вот листингу функции:
А место вызова этой функции приобретает следующий вид:
Из этого всего можно сделать вывод, что request code преобразовывается с помощью функции convert_reqest_key и сравнивается затем с тем преобразованным кодом активации. Помните то преобразование?
Далее из кода активации отрезают три первых символа, убирают дефисы, преобразовывают в BASE16, и дополняют нулями, если нужно
- Дать выполниться функции преобразования convert_reqest_key;
- На месте выполнения strcmp высмотреть содержимое out_key;
- Убрать лишние нули в начале out_key;
- Преобразовать out_key обратно в BASE30;
- Дописать в начало получившейся строки убранные три символа (AXX);
- По желанию навтыкать дефисов через каждые пять символов.
На выходе получил ключик:
wingide — 2015/05/24 04:03:47 — AXX3Q6BQHKQ773D24P58
Введя его в поле ввода ключа активации, получил заветное:
ИТОГИ
Как видите, процесс взлома не столько сложный, сколько интересный получился! Исследовать свои же исходники в скомпилированном их варианте… это, конечно, забавно.
Не знаю, зачем авторы приложили к своей программе ее исходники (хоть и в большинстве своем, в виде байт-кода). Но, думаю, вы понимаете, что так делать не стоит!
Читайте также: