Advertisement
Programist135

mcdns_server

Nov 27th, 2016
275
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local component = require("component")
  2. local fs = require("filesystem")
  3. local string = require("string")
  4. local event = require("event")
  5. local modem = component.modem
  6. local gpu = component.gpu
  7.  
  8. local dir = "/dns"
  9. modem.open(19178)
  10. require("term").clear()
  11.  
  12. gpu.setForeground(0x00FF00)
  13. print("Запущен DNS-сервер")
  14. print("Адрес сервера: "..modem.address)
  15.  
  16. while true do
  17.     local data = {event.pull("modem_message")}
  18.     local subdomain = string.sub(data[7], 0, string.find(data[7], ".", 0, true)-1) -- vs
  19.     local domain = string.sub(data[7], string.find(data[7], ".", 0, true)+1, string.len(data[7])) -- .io
  20.     local path = dir.."/"..domain.."/"..subdomain..".dns"
  21.     if data[6] == "dns_request" then
  22.         gpu.setForeground(0xFFFF00)
  23.         print("Поступил DNS-запрос: "..data[3].." -> "..data[7])
  24.         if fs.exists(path) then
  25.             local address = io.lines(path)()
  26.             gpu.setForeground(0x00FF00)
  27.             print("DNS-запрос успешно обработан, адрес: "..address)
  28.             modem.send(data[3], 19178, "dns_answer", address)
  29.         else
  30.             gpu.setForeground(0xFF0000)
  31.             print("DNS-адрес "..subdomain.."."..domain.." не существует.")
  32.             modem.send(data[3], 19178, "dns_not")
  33.         end
  34.     elseif data[6] == "dns_reg" then
  35.         gpu.setForeground(0xFFFF00)
  36.         print("Поступил запрос на регистрацию: "..data[3].." -> "..data[7])
  37.         if fs.exists(dir.."/"..domain) then
  38.             gpu.setForeground(0x00FF00)
  39.             print("Регистрация зоны ."..domain.." возможна")
  40.             if not fs.exists(dir.."/"..domain.."/"..subdomain..".dns") then
  41.                 gpu.setForeground(0x00FF00)
  42.                 print("Домен "..subdomain.." свободный!")
  43.                 local reg_file = io.open(dir.."/"..domain.."/"..subdomain..".dns", "w")
  44.                 reg_file:write(data[3])
  45.                 reg_file:flush()
  46.                 reg_file:close()
  47.                 print("Домен "..subdomain.."."..domain.." зарегистрирован!")
  48.                 modem.send(data[3], 19178, "dns_success")
  49.             else
  50.                 gpu.setForeground(0xFF0000)
  51.                 print("Домен "..subdomain.." уже зарегистрирован.")
  52.                 modem.send(data[3], 19178, "dns_err")
  53.             end
  54.         else
  55.             gpu.setForeground(0xFF0000)
  56.             print("Зону ."..domain.." нельзя зарегистрировать.")
  57.             modem.send(data[3], 19178, "dns_err")
  58.         end
  59.     end
  60. end
Advertisement
RAW Paste Data Copied
Advertisement