Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. Но где мне реально ее взять эту карту ОpenNet? И кто меня должен подключить к системе?  Думаю, этот момент многим интересен. Как реально осуществить коннект в вашей сети?  Кто провайдер и кто выдает карточки?

    С введением системы WiFi роутеров, для подключения к ON связанная плата не нужна. Достаточно иметь беспроводную плату и находится в зоне покрытия WiFi роутера. Но роутер на сегодняшний день только один. Если Вы живете вдали от спауна, то скорее всего подключиться не сможете. В этом случае можете попросить меня установить роутер, а можете организовать свой собственный роутер и стать провайдером. Для этого понадобится связанная плата, которую можно получить у меня.


  2. А OpenNet между тем медленно но уверенно развивается.

    Начал свою работу чат-сервер "chatroom". Для подключения к серверу Вам понадобится компьютер или планшет, подключенный к ON, библиотечка thread и конечно же программа чат-клиент.

     

     

    ------------------------------------------------------------
    -- Чат-клиент для работы по сети OpenNet
    -- by Zer0Galaxy
    ------------------------------------------------------------
    gpu  = require("component").gpu
    text = require("text")
    wlen = require("unicode").wlen
    beep = require("computer").beep
    thread=require("thread")
    on   = require("opennet")
    term = require("term")
    event= require("event")
    
    server=({...})[1]
    if not server then
      print("Формат вызова:")
      print("chat <IP или dns-имя сервера>")
      return
    end
    ev, _, _, _, Name=event.pull(1,"key_up")
    if not ev then
      term.write("Нажмите любую клавишу")
      ev, _, _, _, Name=event.pull("key_up")
    end
    
    ------ Переменные и функции для работы с окном вывода ------
    local cursorX, cursorY = 1, 1
    local WinW, WinH = gpu.getResolution()
    WinH=WinH-2
    local Left,Top = 1, 1
    
    function winwrite(value)
      value = text.detab(tostring(value))
      if wlen(value) == 0 then
        return
      end
      do
        local noBell = value:gsub("\a", "")
        if #noBell ~= #value then
          value = noBell
          beep()
        end
      end
      local line, nl
      repeat
        line, value, nl = text.wrap(value, WinW - (cursorX - 1), WinW)
        gpu.set(cursorX+Left-1, cursorY+Top-1, line)
        cursorX = cursorX + wlen(line)
        if nl or (cursorX > WinW) then
          cursorX = 1
          cursorY = cursorY + 1
        end
        if cursorY > WinH then
          gpu.copy(Left, Top+1, WinW, WinH-1, 0, -1)
          gpu.fill(Left, WinH+Top-1, WinW, 1, " ")
          cursorY = WinH
        end
      until not value
    end
    
    function winclear()
      gpu.fill(Left, Top, WinW, WinH, " ")
      cursorX, cursorY = 1, 1
      gpu.set(Left, Top+WinH, string.rep("═",WinW-25).."Введите 'quit' для выхода")
    end
    ------------------------------------------------------------
    
    ok,err=on.getIP()
    if not ok then
      print(err)
      return
    end
    
    function getmess()
      while true do
        local ip,sender,mess=on.receive()
    	if ip==server then
    	  gpu.setForeground(0xFFFF00)
    	  winwrite(sender)
    	  if mess then winwrite(": ") else mess="" end
    	  gpu.setForeground(0xFFFFFF)
    	  winwrite(mess)
    	  winwrite("\n")
    	end
      end
    end
    
    thread.init()
    thread.create(getmess)
    
    local History={}
    
    winclear()
    on.send(server,"login",Name)
    while true do
      term.setCursor(Left, Top+WinH+1)
      term.clearLine()
      mess=term.read(History,false)
      mess=mess:gsub("\n", "")
      if mess=="quit" then break end
      if mess~=History[#History] then History[#History+1]=mess end
      on.send(server,"write",mess)
    end
    on.send(server,"logout")
    os.sleep(1)
    thread.killAll() 

     

     

    В качестве параметра клиенту нужно указать ip или dns-имя чат-сервера

    Пример запуска клиента:

    chat chatroom
    

    А вот результат работы:

    post-7-0-27940600-1430399150_thumb.png

    • Нравится 3

  3. Не, Алекс, что то ты в настройках ОС затронул. Раньше сервера, которые в серверную стойку вставляются общались друг с другом посредством проводных плат. Теперь отказываются. Пришлось заменить проводные платы беспроводными.

     

    Вопрос решен. Нужно было снять и снова поставить серверные стойки


  4. П.С. Дима!  Что даст нам пеленгатор? Дальность до репитера приватного сообщения, или его коры?

    Только дальность. Но его можно запустить на планшете и за небольшое время обнаружить точку. Радиус обнаружения - 400 блоков. Пеленгатор снабжен звуковой сигнализацией, что позволяет двигаться не глядя на экран планшета.

    • Нравится 1

  5. Относительно беспроводных точек доступа согласен на 100%. Это зло которое надо искоренять. А вот проводной коммутатор вещь весьма полезная. Мало того, что без него проблематично связать два компьютера в сеть так, что бы они не путали мониторы. У меня еще каким то образом перестала работать локалка, которая коммутатор вообще не использовала. Другими словами, внесенная коррекция как то отразилась на работе обычных сетевых карт. Можно ли точку доступа вообще исключить из крафта, а коммутатор оставить как был?


  6. Пока решается вопрос с проводными свитчами, в ON-роутеры временно установлены беспроводные сетевые платы. В связи с этим изменились IP адреса всех абонентов Сети. В остальном Сеть работоспособна.

    Теперь о хорошем.

    Начал работу первый WEB-сервер под именем "info", дублирующий информацию с инфопанели, установленной на спауне. 

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

    Помимо команды ping, сервер обрабатывает команды list и get.

    list - возвращает сериализованную таблицу файлов, доступных для считывания.

    get - принимает в качестве параметра имя файла и возвращает его содержимое.

    Ниже приведены скрины с примерами работы функций list и get

    post-7-0-56561000-1430296470_thumb.png

    post-7-0-63250300-1430296476_thumb.png

    • Нравится 5

  7. И в одночасье с этим в результате сильнейших магнитных солнечных бурь была полностью выведена из строя вся микроэлектроника Wi-Fi точек доступа и сетевые свитчи фирмы OpenComputers.

    С WiFi понятно, но как магнитные бури затронули проводные свитчи? Алекс, почини пожалуйста. У меня локальная сеть не работает, а без нее OpenNet.  :(


  8. В Центре поиска внеземного разума (ЦПВР) начал работу роутер сети OpenNet. Зона уверенного покрытия охватывает банк, спаун и поселок Кузякино. Подключиться к роутеру можно при помощи беспроводной сетевой карты и библиотеки opennet.lua (см. под спойлером)

     

     

    -- Библиотека OpenNet для WiFi-клиента
    local component=require("component")
    local event = require("event")
    
    local opennet = {}
    local ONcard
    local LocalIP
    local Router
    local ONport=1
    local ONlong=2
    local maxPacketSize
    
    function opennet.ver()
      return "3.1"
    end
    
    function opennet.getIP()
      if not component.isAvailable("modem") then
        ONcard=nil
        return nil, "Сетевая карта не обнаружена"
      end
      ONcard=component.modem
      ONcard.open(ONport)
      ONcard.open(ONlong)
      maxPacketSize=ONcard.maxPacketSize()-100
      local ok,err=ONcard.broadcast(ONport,"", "", "getip")
      if not ok then  return ok, err  end
      local Dist=math.huge
      LocalIP=nil
      Router=nil
      while true do
        local ev, addr, rout, _, dist, locip, _, mess = event.pull(1,"modem_message")
        if ev then
          if dist<Dist and addr == ONcard.address and mess == "setip" then
      	    LocalIP=locip Router=rout Dist=dist
    	  end
    	else
    	  if LocalIP then return LocalIP, Dist
    	  else  return nil, "Нет ответа от WiFi роутера" end
        end
      end
    end
    
    function opennet.send(recIP, ... )
      if not ONcard or not Router then
        return nil, "Сетевая карта не инициализирована"
      end
      return ONcard.send(Router, ONport, recIP, LocalIP, ...)
    end
    
    function opennet.receive(timeout)
      local ev
      repeat
        ev = {event.pull(timeout,"modem_message")}
        if not ev[1] then return nil end
      until ev[2] == ONcard.address
      return table.unpack(ev,7)
    end
    
    function opennet.sendrec(recIP, ... )
      local ok,err=opennet.send(recIP, ... )
      if ok then
        return opennet.receive(3)
      else
        return ok,err
      end
    end
    
    -----------------------------------------------------------------------
    return opennet 

     

     

    Описание функций библиотеки дано в начале темы. За тем исключением, что функция getIP возвращает, помимо IP, расстояние до роутера. Следите, что бы это расстояние не превышало 350.

    • Нравится 1

  9. В общем, никакого дюпа и диверсии. Просто у Троянчика стоит точка доступа, а она, как оказалось, ретранслирует все беспроводные пакеты. Если рядом поставить еще одну, они начинают бесконечно перекидывать пакеты друг другу.


  10.  

     

    сервер непонятно почему повторяет сообщения аж четыре раза,

    Дело в том, что у Троянчика в привате стоял вайфай с таким же id как и у твоего роутера. Он и дублировал пакеты.

    Как такое получилось, не знаю, но без дюпа здесь не обошлось.


  11. Конечно! Такие моменты даже не спрашивай. Есть бункер под спавном (лючок "Не влезай, убьет")  Спавн охвачен ЧР на 9x9 вроде.  А лучше в банке давай его влепим. Там куча подсобных помещений на первом этаже, в моей берлоге можно под первой кабинкой. Поставь там себе /sethome router да и все.

     

    Банк тоже охвачен ЧР.

    Не позволяет в админпривате ставить. Даже с /ic  :(


  12. Нео, не будь жертвой предвзятости. И IP и MAC это всего лишь набор байт, только один почему то выражают десятичными числами, а другой шестнадцатеричными. Суть их от этого не меняется, хоть римскими записывай.

    Или ты думаешь, что перебирать можно только цифры, а буквы никак? Или ты думаешь, что кому-то кроме тебя придет в голову умножать и делить IP-адреса? Или я должен менять структуру адреса, что бы облегчить тебе задачу пингования всех компьютеров Сети? Максимум, что я могу для тебя сделать, это добавить в роутер функцию, по которой он будет возвращать адреса всех связанных с ним компьютеров. Имея эту функцию и немного мозгов можно с легкостью вычислить структуру всей Сети.

     

    А теперь о хорошем. Запущен в опытную эксплуатацию первый WiFi-роутер. Координаты его пока не разглашаю, хотя кое для кого это уже не секрет. Готов помочь любому желающему в установке и настройке подобных роутеров.

    • Нравится 3

  13. Сейчас это первоочередная задача. Крутой сделал доступ из OpenNet в Internet, но прикол в том, что связанная плата в крафте дороже чем интернет-плата. Нужно упрощать доступ к ON, а это можно сделать только через WiFi или проводные роутеры


  14. Хочу рассказать об изменениях, произошедших в развитии OpenNet.

    Во-первых создан и функционирует DNS-сервер.

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

    Чуть ниже по порядку.

     

    Что такое DNS-сервер и зачем он нужен?

    Предположим, два пользователя Сети, Петя и Вася, обмениваются ON-сообщениями. Как это выглядело до сих пор: Петя, чтобы послать сообщение Васе, должен знать его IP. Именно на этот IP и отправляется сообщение. Вот так это можно представить графически

    post-7-0-40247300-1429697722_thumb.gif

    Сообщение проходит через ряд роутеров, которые и определяют путь прохождения. Как видим, в самом сообщении присутствуют IP-адреса получателя и отправителя.

    Но, запомнить Васин IP в виде набора букв и цифр довольно сложно. Да и что делать если Вася сменил IP и не успел предупредить Петю? На помощь приходит DNS-сервер. Он позволяет зарегистрировать в сети уникальное имя и связать его с определенным IP. Начинается всё с регистрации имени

    post-7-0-26835600-1429698134_thumb.gif

    Как видно из рисунка, для регистрации DNS-имени, Вася посылает на сервер определенную посылку, в которой указывает желаемое имя, связанный с ним IP и пароль, который потребуется в случае необходимости внесения изменений. На рисунке я изобразил, что клиентский компьютер направляет сообщение прямо в DNS-сервер. Это конечно не так. Сообщение пройдет как минимум через роутер ef4. Мне просто не хотелось затемнять рисунок.

    После регистрации имени, Петя может отправлять сообщение не на "ef4.d69", а на зарегистрированное имя "Vasya". Вот так это будет выглядеть:

    post-7-0-32158300-1429698609_thumb.gif

    Роутер 7e3, получив сообщение для получателя "Vasya", запрашивает IP у DNS-сервера и заменяет адрес получателя на этот IP. Но это не всё. Какое то время роутер продолжает помнить этот IP и последующие сообщения для получателя "Vasya" будет отправлять без обращения к DNS-серверу. Время это составляет ~25 минут.

    • Нравится 4
×
×
  • Создать...