Перейти к публикации
Форум - ComputerCraft

Totoro Cookies

  • записей
    9
  • комментариев
    116
  • просмотра
    80 834

Zn: строим простой ретранслятор

Totoro

2 493 просмотра

usgiMAd.png

 

Иногда случается такое, что ваши компьютеры расположены на расстоянии большем,
чем стандартные 400 блоков. Wi-Fi отказал, а вам надо связать компьютеры по сети.

 

Какие тут есть варианты?

 

1) Повысить лимит в конфиге.
Это просто, но не всегда возможно.

 

2) Использовать linked карту.
С её помощью можно пробить любое расстояние, да.
Но тут есть несколько своих проблем. Она связывает компьютеры только попарно.
Для связи нескольких компьютеров надо уже делать сложную систему проброса сообщений.
Она занимает дополнительный слот. И т.п.

 

3) Использовать цепочку Wi-Fi карт
Казалось бы, чем это проще второго варианта?
А проще оно тем, что тут есть уже готовые библиотеки. =)

 

Интермедия

 

Когда-то в стародавние времена, когда трава была зеленее и птички пели громче,
собралась на нашем сервере компания крутых парней и написала OpenNet.
Это была полноценная компьютерная сеть. Этакий местный интернет. Она обладала
своей строгой и надёжной топологией. Каждый узел - своим местом и адресом в сети.
Никакой анархии. Хочешь - в чатике общайся. Хочешь - сайты строй.

 

К сожалению, исходники и гайды до сих пор разбросаны по частям по всему форуму.
Чтобы собрать это снова вместе, потребуется немало усилий.
Да и зачем нам поднимать полноценный "интернет", если всё, чего мы хотим - это
пробросить парочку сообщений туда-сюда?

 

Поэтому в более новые и не такие добрые времена (птички потише, трава потускнее),
некто Totoro и fingercomp придумали систему попроще и погибче.
И назвали её Zn.

 

Приступаем к решению

 

Итак, как нам связать Васю и Олю, которые живут на противоположных краях Земного Блина?

 

1) Через микроконтроллёр
Самое дешёвое в плане ресурсов решение - собрать микроконтроллёр, прошить его
и закопать где-нибудь в лесу на полпути между Васей и Олей.

 

Сначала нам потребуется код прошивки. Он идёт в комплекте с Zn библиотекой.
Как цивилизованные современные люди, мы скачаем её с Hel-репозитория:

hpm install zn


Теперь в папке /usr/share/zn/ у нас есть файлик eeprom.lua. Который мы и прошиваем
на чистый EEPROM:

flash -q /usr/share/zn/eeprom.lua "Zn node"


Всё. Осталось вставить чип в контроллер, включить его и закопать.
Сеть создана!

 


2) Через компьютер
Более солидное и основательное решение. Строим в лесу будку. В будке ставим
компьютер. На компьютер устанавливаем OpenOS и HPM (если он не идёт в комплекте).
Снова качаем библиотеку:

hpm install zn


Создаём мини скрипт:

edit node.lua


Пишем в нём такой код:

(require ('zn')).connect()


Сохраняем, выходим, запускаем его:

node


Всё! Скрипт выполнится и завершится, а в фоновом режиме останется работать
демон Zn-сети, который будет пробрасывать сообщения.
По желанию можно сделать скрипт более сложным - например выводить на экран
сетевой трафик и другую полезную инфу.
Также можно добавить скрипт в автозапуск компьютера, чтобы даже неожиданные
сбои питания (белка залезла в трансформатор) не смогли повалить сеть.

 


Эти два варианта обладают некоторыми недостатком, конечно.
Чтобы ретранслятор работал автономно, надо ставить чанклодер и источник энергии.
Однако, в силу своей гибкости, Zn сеть можно организовать и по другому.
Поднять, так сказать, "лайт версию" ретранслятора.

 

3) Через планшет
Устанавливаем на планшет OpenOS и ставим библиотеку и скрипт по методике #2.
Далее, вручаем планшет соседу Пете и забиваем ему стрелку в том самом лесу.
На протяжении X минут (где X зависит от терпения Пети) у вас будет полноценная сеть!
Игрок будет служить чанклодером, а батарея планшета источником питания.

 

4) Через робота
Строим робота, устанавливаем скрипт по методике #2. Затем ставим робота где-нибудь
в незаметном месте (можно спрятать в кроне дерева, так чтобы свет солнца падал
на солнечную батарею). Всё, мобильный ретранслятор готов.
Если чанклодеры к роботам разрешены, он может существовать автономно долгое время,
питаясь солнечной энергией.

 

5) Через дрон
Прошиваете EEPROM как для микроконтроллёра, заряжаете в дрона. Дрона запускаете
в свободный полёт над лесом. Готово! Хотя чанклодер всё равно нужен. Так что вам
наверное придётся пастись где-то рядом.
Этот вариант самый сложный, потому что если вы хотите управлять дроном (например,
с планшета) то вам потребуется модифицировать прошивку и добавить блок управления.
Зато запустив 1000 дронов, вы можете почувствовать себя Илоном Маском,
или Цукербергом, раздающим Интернет папуасам.

 

А как теперь этой сетью пользоваться?

 

Все просто. Это делается почти как с обычным модемом.
Только вместо модема вы используете библиотеку Zn.

 

Если вы знаете адрес модема адресата - можете послать сообщение прямо на него.
И не важно, через сколько промежуточных узлов оно должно будет пройти. До тех
пор пока адресат в радиусе досягаемости хотя бы одного узла вашей сети - он ваше
сообщение получит.

-- подключаем библиотекуlocal zn = require('zn')-- коннектимся к сетиzn.connect()-- посылаем Оле сообщениеzn.send("адрес модема Оли", "сообщение для Оли")-- при завершении программы не забываем закрыть коннект-- (можно и не закрывать, но зачем тратить ресурсы компа зазря)zn.disconnect()


Ну а если адресат неизвестен, можно кинуть сообщение бродкастом. Тогда его получат все,
кто подключен к сети. И адресат, конечно тоже.

local zn = require('zn')zn.connect()-- посылаем сообщение всем, кто подключён к сети (Оле в том числе)zn.broadcast("сообщение для Оли")zn.disconnect()


Удачи в построении своих сетей.
Enjoy Zn!

  • Like 7


16 комментариев


Рекомендованные комментарии

Круто!:)   

Судя по всему, это изобретение, по идее, должно занять свою нишу на сервере, так как все элементарно просто в развертывании, если сравнивать, например с openNet.

Поделиться комментарием


Ссылка на комментарий

Помню мне Тоторо рассказывал что отправлять автоматически пинг - это плохо.

Сам запил туда сию фичу.

Поделиться комментарием


Ссылка на комментарий

И хотелось бы маршрутизацию, спам сообщениями.. не думаю что это решение хорошее.

Поделиться комментарием


Ссылка на комментарий

Потестировал... еще один косяк, можно положить все компы в сети и даже напрягаться не надо =)

Поставил 10 компов, все зависли намертво.

Поделиться комментарием


Ссылка на комментарий

Компы-то пес с ними, главное, чтобы сервак наглухо не повис.=)

Так то, конечно, репитить все подряд - ничего хорошего в этом нет. В идеале то Наташке лучше позвонить по связанной карте или хотя бы по конкретному адресу. Ну я думаю, парни там все пофиксят и уберут лагульки эти и эхо-волно-лавино-образные безобразия страшные.

Поделиться комментарием


Ссылка на комментарий

Я понимаю, день влюбленных и всё такое, но где вы на нашем сервере Олю и Наташку с компьютерами видели?

Поделиться комментарием


Ссылка на комментарий

Я понимаю, день влюбленных и всё такое, но где вы на нашем сервере Олю и Наташку с компьютерами видели?

 

Не разрушай иллюзии :P

 

И хотелось бы маршрутизацию, спам сообщениями.. не думаю что это решение хорошее.

 

Если есть конкретные предложения, охотно обсужу здесь, на форуме, или в IRC.

Поделиться комментарием


Ссылка на комментарий

А вы что, думаете, что на сервере нет ни одного представителя женского пола? :)

  • Like 1

Поделиться комментарием


Ссылка на комментарий

Круто, конечно, но несколько небезопасно. А именно - как осуществляется передача сообщения, в любом случае по всем компам в сети? И шифровка тоже, ключ-то к ней передать тоже нужно вместе с сообщением, как тут и делается. Так что какой кулхацкер запросто может снифать всю сеть. Если только клиенты не обменялись "ключами" не через сеть, а при личной встрече, конечно же.

​В общем, дырка в безопасности очевидна, поскольку лишь при небольшом редактировании самого zn.lua можно все ключи получать себе. Впрочем, при этом же редактировании можно получить собственный канал на каком-то другом порте, который ещё найти тогда надо :)

​Хотя в целом идея для каких-то публичных сервисов довольно милая.

Поделиться комментарием


Ссылка на комментарий

А вы что, думаете, что на сервере нет ни одного представителя женского пола? :)

Есть, конечно. Я даже несколько раз встречал эти редкие экземпляры. Но чтобы они подходили к компьютерам ближе чем на семь чанков, видеть не приходилось.

Поделиться комментарием


Ссылка на комментарий

 

 

Если только клиенты не обменялись "ключами" не через сеть, а при личной встрече, конечно же.
Существуют алгоритмы шифрования с открытым ключом. 

Поделиться комментарием


Ссылка на комментарий

Круто, конечно, но несколько небезопасно. А именно - как осуществляется передача сообщения, в любом случае по всем компам в сети? И шифровка тоже, ключ-то к ней передать тоже нужно вместе с сообщением, как тут и делается. Так что какой кулхацкер запросто может снифать всю сеть. Если только клиенты не обменялись "ключами" не через сеть, а при личной встрече, конечно же.

 

Zn не занимается безопасностью. Он отвечает за "сетевой уровень". Все данные идут свободно и открыто через все узлы сети. (То что ты принял за пароли - это хеши для подавления дубликации. Они не секретны.)

Внедрение шифрования сообщений на таком низком уровне приведёт к многократно возросшей нагрузке на игровой сервер.

В модели Zn оптимальная модель шифрования, если клиентам нужна безопасность - это end-to-end шифрование. Производительно и безопасно.

 

Хотя в целом идея для каких-то публичных сервисов довольно милая.

 

:3

Поделиться комментарием


Ссылка на комментарий

Существуют алгоритмы шифрования с открытым ключом. 

Хм. Надобно тогда попробовать самому потыкать. Заранее обещаю, что ни в коем случае ничего и ни у кого не буду кочевряжить :)

Поделиться комментарием


Ссылка на комментарий

Zn не занимается безопасностью. Он отвечает за "сетевой уровень". Все данные идут свободно и открыто через все узлы сети. (То что ты принял за пароли - это хеши для подавления дубликации. Они не секретны.)

Внедрение шифрования сообщений на таком низком уровне приведёт к многократно возросшей нагрузке на игровой сервер.

В модели Zn оптимальная модель шифрования, если клиентам нужна безопасность - это end-to-end шифрование. Производительно и безопасно.

Понятно. То есть шифрование - это задача самих пользователей, в том случае, если им это нужно. В таком случае вполне вариант.

 

:3

​Надо Алекса уломать на отрубание общего чата, но выдачу всем планшета с солнечной батарейкой, вафлей и чат-прогой на этом самом Zn внутри. Хотя это так, праздное мечтание :)

Поделиться комментарием


Ссылка на комментарий

Гугли RSA. Есть публичный ключ, которым шифруют данные и отправляют на сервер, расшировывающий это приватным ключом. Такое шифрование является асимметричным.

 

Я очень не хочу встраивать какие-либо дополнительные фичи с Zn помимо увеличения стабильности. Особенно шифрование.

Поделиться комментарием


Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×