Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Леонид Каганов ([info]lleokaganov)
@ 2016-08-20 19:06:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:программирование

Поиск IP по картинке
это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/08/20.html

Сижу дома, простудился сильно. А это у меня обычно недели на полторы. В таком состоянии никакая работа невозможна, можно только программировать. Программировать — это не работа, тут ума не надо. Товарищ попросил сделать систему неких беспилотных мониторов техпроцессов для промышленного объекта. Дело нехитрое: взяли мы в домашнем хозяйстве свободную Raspberry Pi (спасибо старым друзьям за подгон), поставили почти без бубнов тамошний Debian, запустил я на нем LXDE (простого startx почему-то в системе не оказалось), привинтил браузер какой-то Midule или Midile или что-то типа того (Chromium отказывался становиться даже после длинных инструкций, да и не нужен он), поставил PHP и Apache (nginx из коробки работать отказался, а настраивать было лень). В общем, получился классический kiosk: грузится система, разворачивается на весь экран только браузер, ну и дальше он уже пляшет. Написал я на JS тонкий клиент, который всякую работу делает и аяксами лазает на местные сервера. Единственная проблема: станки эти находятся в закрытом городе, а ехать туда нет ни сил ни желания ни допусков. Поэтому надо, чтоб всё заработало из коробки. А у системы задача — найти master-сервер в местной сети и с ним взаимодействовать. А его IP, понятное дело, никто заранее не скажет, да и он смениться может. В общем, прикинул я JS к носу и придумал фантастически идиотское решение, которое оказалось очень простым и эффективным: браузер обстукивает все 254 IP в той же сетке, где ему выдали адрес (.1, .2, ..., .154) в попытках загрузить некую уникальную картинку /master/momento.png Если удалось — значит, нашел мастер-сервер, и запоминает его IP в своем браузерном хранилище (а оно всегда у браузеров есть) и отныне работает по аяксу с этим хостом. Если хост лег — снова его ищет. Обстукивание 254 адресов происходит очень быстро и весело, весь процесс занимает пару секунд — нужный хост быстро отзывается, и всю остальную балалайку картинок мы просто грохаем, не дожидаясь загрузки, а браузер сам разберется, не маленький. Сам процесс, понятное дело, приятно виден на дисплее:

Теоретически конечно надо бы png для такой цели всякий раз создавать искусственно с SVG-шифровками внутри — для безопасности, чтоб избежать подделки. Но я решил не париться — сети там, говорят, закрытые, данные не сильно значимы, откуда там и зачем там взлом. Лучше бы мне подумать, какую бы фичу туда привинтить, чтобы послеживала, не подвис ли браузер на третью неделю работы, а если подвис, то перезапустить его или всё LXDE или просто restart сделать. Но думаю не особо напряженно, потому что через час поезд в Харьков (ребенка забирать от дедушки с бабушкой), еду на один световой день и везу кучу инструментов, чтоб бывшей теще поставить кондиционер. В Харькове +30... Дай бог пережить завтрашний день, всё успеть, просверлить и поставить, и вернуться с понедельничка в холодную Москву.

А чем вы развлекаетесь летом?



это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/08/20.html