Asummonster
-
Публикации
420 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные пользователем Asummonster
-
-
Такое API, библиотека которая имеет доступ к счетам пользователей, или возможность ими управлять, образует слишком большую уязвимость, к сожалению.
Почему?Можно отправлять запрос банковскому серваку,а он отправляет вам пароль,который надо ввести, вы его вводите - АПИ его отправляет банку, пароли совпадают - деньги снимаются
-
"биосные" - это дрон и контроллер, а вот на счет "на все устройства" это устанавливая одну и ту же ос на планшет и настольный пк мы получаем разный интерфес для сенсорного планшета и настольного пк
Это довольно просто сделать. У планшета есть компонент "tablet", а у робота - "robot"
-
1
-
-
Всем привет! В этой теме я расскажу моей программе ---Удалённом рабочем столе на сети OpenNet и моде OpenComputers.
Первым делом расскажу как ей пользоваться.
Ввод данных:
Всё очень просто=)
Жмёте на кнопку на клавиатуре, и её нажатие эмитируется на удалённом компьютере.
Для обновления экрана --- F5
Для выхода из программы на удалённом компьютере --- F2
Для выхода из программы на локальном компьютере ---F1
Ну....Вроде всё по управлению=)
Запуск,настройка и подключение:
Подготовка к запуску удалённого терминала:
Установить библиотеку thread:local computer = require("computer") computer.SingleThread = computer.pullSignal local thread = {} local mainThread local timeouts local function MultiThread( _timeout ) if coroutine.running()==mainThread then local mintime = _timeout or math.huge local co=next(timeouts) while co do if coroutine.status( co ) == "dead" then timeouts[co],co=nil,next(timeouts,co) else if timeouts[co] < mintime then mintime=timeouts[co] end co=next(timeouts,co) end end if not next(timeouts) then computer.pullSignal=computer.SingleThread computer.pushSignal("AllThreadsDead") end local event={computer.SingleThread(mintime)} local ok, param for co in pairs(timeouts) do ok, param = coroutine.resume( co, table.unpack(event) ) if not ok then timeouts={} error( param ) else timeouts[co] = param or math.huge end end return table.unpack(event) else return coroutine.yield( _timeout ) end end function thread.init() mainThread=coroutine.running() timeouts={} end function thread.create(f,...) computer.pullSignal=MultiThread local co=coroutine.create(f) timeouts[co]=math.huge local ok, param = coroutine.resume( co, ... ) if not ok then timeouts={} error( param ) else timeouts[co] = param or '' end return co end function thread.kill(co) timeouts[co]=nil end function thread.killAll() timeouts={} computer.pullSignal=computer.SingleThread end function thread.waitForAll() repeat until MultiThread()=="AllThreadsDead" end ------------------------------------------------------------------------------- return thread(Только на сервер,на клиенте она не нужна)
Установить OpenNet и находится в зоне его покрытия.
Установить на сервер его часть:local event= require("event") local thread= require("thread") local opennet= require("opennet") local computer= require("computer") local gpu= require("component").gpu local unicode= require("unicode") local keyboard= require("component").keyboard.address local IP, dis2serv = opennet.getIP() print("Local IP: "..IP) args={...} if args[1]==nil then print("Использование: openviewerS <opennet_ip>") os.exit() end --[[ _, result, reason = opennet.sendrec(args[1], "connecting...") if result==false then print(reason); os.exit() end if args[1]==IP then print("Невозможно инициализировать удалённый доступ со своим устройством.") os.exit() end ]]-- initial=args[1] local function getScreen() screen="" for y=1, 25 do for x=1, 80 do symbol = gpu.get(x, y) screen=screen..symbol end end return screen end local function sendScreen() opennet.send(initial, getScreen()) end function runShell() os.execute("sh") end function reInitial() thread.killAll() thread.init() thread.create(runShell) thread.create(EmulateSignal) thread.waitForAll() end event.listen("Screen", sendScreen) event.listen("Exit", reInitial) function EmulateSignal() while true do opennetIP, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 = opennet.receive() if opennetIP==initial then computer.pushSignal(arg1, keyboard, tonumber(arg3), tonumber(arg4), arg5) end end end thread.init() thread.create(runShell) thread.create(EmulateSignal) thread.waitForAll()Установить на клиент клиентскую часть:
local opennet= require("opennet") local term= require("term") local unicode= require("unicode") local event= require("event") args={...} if args[1]==nil then print("Использование: openviewerC <opennet_ip>") os.exit() end initial=args[1] function getScreen() repeat ip, screenRaw=opennet.receive() until ip==initial for sym=1, #screenRaw-160 do io.write(unicode.sub(screenRaw, sym, sym)) end end term.clear() opennet.send(initial, "Screen") getScreen() while true do arg1, arg2, arg3, arg4, arg5 = event.pull() if arg1=="key_down" and arg3==0 and arg4==63 then term.clear() opennet.send(initial, "Screen") getScreen() elseif arg1=="key_down" and arg3==0 and arg4==59 then os.exit() elseif arg1=="key_down" and arg3==0 and arg4==60 then opennet.send(initial, "Exit") else opennet.send(initial, arg1, arg2, arg3, arg4, arg5) end end
Для запуска программы надо написать на сервере: openviewerS <IP Адрес клиента>
ВНИМАНИЕ!!! Надо ввести именно IP, а не DNS; Единственное поддерживаемое разрешение - 80x25
На клиенте же пишем: openviewerC <IP Адрес сервера>
Вот и всё=)
Надеюсь,эта программа вам будет полезна !
Неплохо было-бы попасть в вайт-лист
-
3
-
-
Уоу, круто!
А как это запустить чтоб оно работало в фоне?
Листен всё держит в условном фоне
Ты просто заменяешь event.pull на event.listen(event, function) и всё
-
Через event.listen swg2you можешь повесить слушателя на modem_message. Вот если не знаешь его использование:
event.listen(event: string, function: function) -- Теперь если он словит event который указан в первом аргументе будет выполнена функция со второго аргумента. Аргументы функции нужно передавать такие же, какие выдаст event.pull, т е шесть аргументов.
Например:
local function listmsg(_,_,_,_,_,msg) print(msg) end event.listen("modem_message", listmsg)Такой код будет ловить сообщения по всем открытым портам и выводить их на экран.Только их там не 6. Если ты напишешь m.broadcast(port, data1)---их будет шесть,а если ты напишешь m.broadcast(port, data1, data2)---их будет 7, и так далее
-
Заходи на сервер в ~10 по мск. Можно и в 8.Хотеть смотреть!
-
А я создал своё жалкое подобие ssh, которое запускается через костыль
-
1
-
-
Только я бы добавил if stack then ... end, т.к. если слот пуст---будет вылетID можно было получить в старых версиях OC.
А теперь только "кодовое имя". Типа "minecraft:sand".
Для этого надо установить апгрейд-контроллер инвентаря. (По ссылке - подробная справка.)
И воспользоваться функцией getStackInInternalSlot(slot:number):table.
Пример:
local com = require('component') local controller = com.inventory_controller local slot_number = 1 local stack = controller.getStackInInternalSlot(slot_number) print("Название предмета в слоте: "..stack.label) print("Код: "..stack.name) print("Метаданные: "..stack.damage)-
1
-
-
Попробуй в дрона радар засунуть. У меня из-за этого вылетал сервер.[ok=Новые моды!][/ok]
На сервер установлен мод Computronics и мод на магнитные карточки. У Computronics (чатбокс, камера, радар, шифровальный блок) изменены рецепты. В основном, это добавлен корпус ИК-Е в машинки-блоки и микрочипы, или камешки драгоценные. Землю и булыгу с кирпичами с досками выкинул оттуда.
Если заметите какие-то багульки в модификации КТ, просьба - немедленно сообщить в эту тему или в ЛС.
-
А как свои сайты добавлять?
-
Эээ! Что за тэг?=) Да и сам виноват, хи-хи. Ты меня научил биосы писать=)
-
Нужен контроллер инвентаря
component.inventory_controller.equip()
(Предмет,на который ты хочешь заменить --- должен лежать в активном слоте)
-
Его и на сервер пустить можно!=)
-
Я бы за,но 1:Нет голосовалки ; 2: Нагружает сервер
Но идея с орбитальными программируемыми полётами-классно=)
-
Вообще билд можно заменить Thermal Expansion или на худой конец ExtraUtils, так как АЕ2 расчитан далеко не на среднего игрока. А по теме - играл с модом очень долго на 1.7.10, никаких багов или дюпов не обнаружил. Особенно здорово пошло мочить дракошу двумя нано саблями
Вообщем мод отличный и всем рекомендую.А я баг нашёл=)
-
Настроит мэ интерфейс
-
1
-
-
И не вздумай запускать свою ось из под OpenOS. Запускай по нормальному, с init.lua, через биос.
А я что написал?=)Как раз про ОСь,а не про графическую оболочку=)
-
Спасибо, что напомнили. Мне, видимо, опять придётся попотеть.
Вот только найти бы эмулятор Opencomputers для винды, я бы свою ось создал именно для этого мода.
Если ты пишешь именно ось,а не графическую оболочку,то просто скачай чистый луа: http://kent.dl.sourceforge.net/project/luabinaries/5.2/Executables/lua-5.2_Win32_bin.zip
Если надо,то могу помочь

-
Уходи от КК, КК хороший мод, но он намного скучнее ОК. В ОК ты можешь создать своё ядро, загрузчик, свой пакет программ и утилит, вобщем реальную ось. А в КК все псевдо ос- просто графическая оболочка
С набором программ
-
1
-
-
Исправьте пожалуйста) Запускаю это, но показывает одно и то же число, то бишь текст статичный и время не меняется. Как сделать, чтобы оно обновлялось?

Переменные в цикл добавь
while true do t = os.time() t = t + 0 d = os.day() if t>=400 then break end print("Time: "..t) print("Day: "..d) sleep(1) term.clear() term.setCursorPos(1, 1) end -
-
=)вместо date time
-
-
os.date('%T') вернёт время
os.date('$D') вернёт дату

OpenViewer - Удалённый рабочий стол, работающий на сети OpenNet
в Сетевые технологии
Опубликовано:
Рад бы,но как?=)Научишь?