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


Фотография

OpenDNS

OpenDNS DNS

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 Оффлайн   Larban

Larban
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 13 Май 2015 - 21:08

программа аналог DNS сервера (моя реализация работает не так как реальный DNS но выполняет туже функцию)
 
с коментариями для новичков (вроде меня) 

ServerList = {}
 
--endServerList
 
top_level_domain = "com"
 
function serialize() --сериализация массива сайтов
str = "ServerList = {}\n"
for k,v in pairs(ServerList) do
str = str.."ServerList[\""..k.."\"] = {Position = {X="..v.Position.X..",Y="..v.Position.Y..",Z="..v.Position.Z.."},PROXY=\""..v.PROXY.."\",Limit="..v.Limit..",Dist="..v.Dist.."}\n"
end
return str.."\n"
end
 
function save()
eeprom = component.proxy(component.list("eeprom")())
program = eeprom.get()
 
xx,yy = string.find(program,"--endServerList\n")
program = serialize().."--endServerList\n"..string.sub(program,yy+1,#program) --вырезаем старый массив сайтов и вставляем новый
if #program < 4096 then --если программа после замены массива помещается в eeprom сохраняем ее
eeprom.set(program)
end
end
 
function AddServer(x,y,z,proxy,address,dst)
ServerList[address] = {Position={X=x,Y=y,Z=z},PROXY=proxy,Limit=0,Dist=dst} --создаем новый сервер
save()
end
 
modem = component.proxy(component.list("modem")())
modem.open(16)
 
for k,v in pairs(ServerList) do --раззсылка "REQUEST"
v.Bool = false
modem.setStrength(v.Dist+1)
modem.send(v.PROXY,16,"REQUEST")
v.Limit = v.Limit+1
if v.Limit >= 840 then
ServerList[k] = nil
end
end
save()
 
while true do
name,_,sender,_,Dist,CMD,message,x,y,z = computer.pullSignal(2)
if name == "modem_message" then
if CMD == "GET_ADDRESS" then
if ServerList[message] ~= nil then --если есть запись
if ServerList[message].Position.X == nil then --если нет координат
modem.setStrength(Dist+1)
modem.send(sender,16,"ACCEPT",ServerList[message].PROXY) --просто посылаем прокси
else
modem.setStrength(Dist+1)
modem.send(sender,16,"ACCEPT",ServerList[message].PROXY,ServerList[message].Position.X,ServerList[message].Position.Y,ServerList[message].Position.Z) --посылаем прокси и координаты
end
else
modem.setStrength(Dist+1)
modem.send(sender,16,"ADDRESS_IS_NULL") --записей нет
end
end
if CMD == "CREATE_ADDRESS" then
if ServerList[message] == nil then --если такого сайта не зарегистрировано
if string.sub(message,#message-(#top_level_domain),#message) == "."..top_level_domain then --если главный домен подходит
if  x ~= nil and y ~= nil and z ~= nil then --если есть координаты
AddServer(x,y,z,sender,message,Dist) --новый сервер
modem.setStrength(Dist+1)
modem.send(sender,16,"SUCCESS") --говорим сайту что он зарегистрирован 
else
modem.setStrength(Dist+1)
modem.send(sender,16,"PLEASE_ENTER_SERVER_POSITION") --позцыя не введена
end
else
modem.setStrength(Dist+1)
modem.send(sender,16,"THIS_ADDRESS_DOES_NOT_FIT_DNS_SERVER",top_level_domain) --домен не подходит
end
else
modem.setStrength(Dist+1)
modem.send(sender,16,"SPECIFIED_ADDRESS_ALREADY_EXISTS") --такой сайт уже есть
end
end
if CMD == "DELETE_ADDRESS" then
if ServerList[message].PROXY == sender then --если сервер сам желает удалить себя из списка
ServerList[message] = nil --удаляем
modem.setStrength(Dist+1)
modem.send(sender,16,"REMOVAL_COMPLETED") --сообщаем
save()
end
end
if CMD == "TRUE" then --ответ на "REQUEST"
if ServerList[message].PROXY == sender and ServerList[message].Bool == false then --проверяем кто отправил и один ли раз на 12 минут отправляется мейседж
ServerList[message].Bool = true; 
ServerList[message].Limit = ServerList[message].Limit-0.1 --на один пропуск "REQUEST" нужно 10 раз не пропустить процедуру
if ServerList[message].Limit < 0 then
ServerList[message].Limit = 0
end
save()
end
end
end
if computer.uptime() >= 720 then --прошло 12 минут перезагружаем OpenDNS освободить память да и разсылку "REQUEST" запустить
save()
computer.shutdown(true)
end
end

 
960e25cee4c9.png
работает сие чудо на уровне eeprom в нем и хранит данные о сайтах
данные шлет и принимает по 16 порту

команды и аргументы для OpenDNS
"GET_ADDRESS","MySite.MyTop-level_Domain"
возможные ответы:
"ACCEPT",ServerProxy,x,y,z --прокси модема сервера и его координаты
"ADDRESS_IS_NULL" --записей о данном адресе нет
 
"CREATE_ADDRESS","MySite.MyTop-level_Domain",x,y,z
возможные ответы:
"SUCCESS" --сайт успешно зарегистрирован
 
"PLEASE_ENTER_SERVER_POSITION" --не введены координаты или введены не все
"THIS_ADDRESS_DOES_NOT_FIT_DNS_SERVER",top_level_domain --главный домен вашего адреса не подходит данному OpenDNS серверу (еще он присылает вам свой главный домен для регистрации)
"SPECIFIED_ADDRESS_ALREADY_EXISTS" --сайт с таким адресом уже существует
 
"DELETE_ADDRESS","MySite.MyTop-level_Domain"
возможные ответы:
"REMOVAL_COMPLETED" --удаление прошло успешно
 
 
если вам от OpenDNS сервера пришел запрос 
"REQUEST"
вы должны ответить на него:
"TRUE","MySite.MyTop-level_Domain"
если вы пропустите процедуру 840 раз сервер удалит данные о вашем сайте запрос посылается каждые 12 минут (сделано для очищения OpenDNS сервера от неработающих сайтов)
если я не так понял СТОРОНЯЯ ССЫЛКА: http://site.nic.ru/content/view/225/29 то обясните пожалуйста

да есть ошибка с отправкой ответа в случае успешного создания адреса сайта, исправлю пожже (не в час же ночи :D )

жду коментариев


Сообщение отредактировал Larban: 13 Май 2015 - 22:59

  • Alex и Totoro это нравится

#2 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 14 Май 2015 - 00:38

работает сие чудо на уровне eeprom в нем и хранит данные о сайтах

 

Сохранит ли данные о сайтах если грохнется сервак?

 

 

 

"ACCEPT",ServerProxy,x,y,z --прокси модема сервера и его координаты

 

"Прокси" наверное в данном случае некорректно говорить.  Лучше "адрес".

Т.к. "прокси" в контексте мода OpenComputers - это таблица с методами и полями, которая представляет функционал компонента. (И по сети ее передавать смысла особого нет =))



#3 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 742
  • Уровень сигнала: 52,19%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 14 Май 2015 - 02:24

Если абстрагироваться от всего (все это  довольно сложно, как оно в реальности) и говорить простым языком, у тебя висит где-то таблица в сети, в которой я могу записаться под видом

www.alexccsite.com + геоинфа =>соответствие какому-то там IP (грубо говоря в домене первого уровня)   или не записаться, если алекс там уже какой-то валяется, а при желании удалиться?

 

Кроме как корневого DNS, нет никакой синхронизации, проверок обмена и прочего между другими серверами DNS, нет никакой иерархии, нет никакого использования по сути этих имен?  

 

Они просто есть в табле у тебя и все? Что с ними делать дальше?

 

Что дальше планируешь делать? Где использовать эту таблицу.

 

И почему решил использовать вместо распределенных серверов и огромных дисковых хранилищ bios eeprom. Какой объем данных туда можно записать? И не до конца понял, что значит 16 минут жизнь имени в базе DNS? Разве оно там не регистрируется в реальной жизни на конкретный календарный срок (год-три года и прочее)   Что я должен делать и кого пинговать каждые 16 минут или мой сайт кто должен пинговать, чтобы меня (www.alexccsite.com) не удалили из твоей таблички? Вот это самое большее,что меня напугало.



#4 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 14 Май 2015 - 07:48

Зачем при регистрации DNS имени указывать координаты сервера?
Предлагаю сотрудничество в работе над сетью OpenNet

#5 Оффлайн   cyber01

cyber01

    Техническая поддержка

  • Администраторы
  • Сообщений: 890
  • Уровень сигнала: 1,77%
  • В игре: 13 час. 18 мин.

Награды

            2      

Отправлено 14 Май 2015 - 09:19

Как-то ваш DNS совсем не DNS...



#6 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 14 Май 2015 - 12:30

работает сие чудо на уровне eeprom в нем и хранит данные о сайтах

 
Сохранит ли данные о сайтах если грохнется сервак?

если что-то случиться с eeprom то нет

AlexCC да по сути это так
планирую поисковик какой сделать или чего еще
вмещается примерно 23-25 адресов
не 16 минут а реальную неделю оффлайна сайта

Zer0Galaxy координаты нужны для вычисления дистанции дабы не тратить энергию просто-так
да конечно нужно прикрутить OpenNet
 
cyber01 
программа аналог DNS сервера (моя реализация работает не так как реальный DNS но выполняет туже функцию)

 
прикрутим OpenNet
добавим поддержку хранения данных в дисковых хранилищах (23 адреса это мало)
в общем сделаем из OpenDNS реальный DNS

Сообщение отредактировал Larban: 14 Май 2015 - 12:39


#7 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 14 Май 2015 - 12:44

если что-то случиться с eeprom то нет

 

Это я к тому, что EEPROM по сути хранит данные в оперативной памяти. На самом чипе постоянно хранится только программный код его. Следовательно - перезагрузка OC-компьютера -> оперативная память очищена -> данные потеряны.

Так что хранение данных на дисках - это срочный и важный апдейт.


Сообщение отредактировал Totoro: 14 Май 2015 - 13:27


#8 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,84%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 14 Май 2015 - 13:13

Larban, лучше переделай, потому что тоторо уже матюкатся начал, ты представь, что он сделает, когда ещё хуже будет. Задумался.

Это я к тому, что EEPROM по сути хранит данные в оперативной памяти. На самом чипе постоянно хранится только программный код его. Следовательно - перезагрузка OC-компьютера -> оперативная память очищена -> данные похерены.
Так что хранение данных на дисках - это срочный и важный апдейт.


#9 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 14 Май 2015 - 13:28

Larban, лучше переделай, потому что тоторо уже матюкатся начал, ты представь, что он сделает, когда ещё хуже будет. Задумался.

Тебе показалось. На самом деле я белый и пушистый.  :P



#10 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,84%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 14 Май 2015 - 13:56

Тебе показалось. На самом деле я белый и пушистый.  :P


Все уже зафиксировано.

#11 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 14 Май 2015 - 20:36

нет нет Totoro данные никуда не деваются  ;)

повнимательнее посмотри на функцию save()

программа читает себя из eeprom заменяет массив ServerList новым и сохраняет себя обратно всякий раз при изменении массива ServerList следовательно перезагрузка не приводит к потере данных


  • Totoro это нравится

#12 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 14 Май 2015 - 21:00

нет нет Totoro данные никуда не деваются  ;)

повнимательнее посмотри на функцию save()

программа читает себя из eeprom заменяет массив ServerList новым и сохраняет себя обратно всякий раз при изменении массива ServerList следовательно перезагрузка не приводит к потере данных

Зачем хранить dns-таблицу в коде программы? Почему нельзя в отдельном файле?



#13 Оффлайн   Larban

Larban
  • Автор темы
  • Пользователи
  • Сообщений: 25
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 14 Май 2015 - 21:31

я хотел написать программу для микроконтролера и я это сделал а как известно в них нельзя запихнуть жесткий диск потому я писал данные в код программы

сейчас я понял что добавив в нее все желаемое она просто не поместится в eeprom по этому я переписываю ее под openos



#14 Оффлайн   Asummonster

Asummonster
  • Пользователи
  • Сообщений: 570
  • Уровень сигнала: 48,95%
  • В игре: 368 час. 28 мин.
  • ГородКиев

Награды

                    

Отправлено 10 Июнь 2015 - 07:54

я хотел написать программу для микроконтролера и я это сделал а как известно в них нельзя запихнуть жесткий диск потому я писал данные в код программы
сейчас я понял что добавив в нее все желаемое она просто не поместится в eeprom по этому я переписываю ее под openos


А зачем переписывать? Почему бы просто не вставить биос в комп с д.ж.?

#15 Оффлайн   MineUbuntu

MineUbuntu
  • Пользователи
  • Сообщений: 185
  • Уровень сигнала: 4,72%
  • В игре: 35 час. 33 мин.

Награды

     

Отправлено 10 Июнь 2015 - 08:38

А зачем переписывать? Почему бы просто не вставить биос в комп с д.ж.?

д.ж.? Возможно, ты имел в виду ж.д.?
  • Asummonster это нравится





Темы с аналогичным тегами OpenDNS, DNS

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных