Git Product home page Git Product logo

ipk's Introduction

IPK projekt 1 - HTTP resolver doménových jmen

Obecné informace

Autor: Richard Klem
Login: xklemr00
Email: [email protected]

Jazyk: Python
Verze jazyka: 3.6.9

Prerekvizity

Python 3.6.9
GNU make

Spuštění

make run PORT=XYZ

kde XYZ značí celé číslo portu, který má skript server.py obsluhovat
implicitní hodnota proměnné PORT je rovna 5353

Podporované operace

Upozornění

Část Podporované operace částečně opakuje zadání projektu, avšak
původní text je parafrázován a hojně doplněn o popis mé vlastní implementace
případů, stavů, možností apod., které nebyli v zadání specifikovány.
Je tedy důležité, přečíst si popis mojí implementace, pro správné
pochopení, jak konkrétně moje implementace serveru funguje a jaké jsou
doplňující požadavky, rozšíření a omezení na práci se serverem.

GET

Přeloží právě jeden dotaz, který je specifikován jako parametr URL požadavku,
například:

GET /resolve?name=apple.com&type=A HTTP/1.1

Povinně je nutné dodržet formát po částech následovně:
GET /resolve?name=, &type= a HTTP/1.1
Za name= a type= může následovat libovolná posloupnost znaků.

parametry jsou povinně právě tyto dva:
name = doménové jméno anebo IPv4 adresa
type = typ požadované odpovědi (A nebo PTR)

Odpovědí je právě jeden řádek formátu:
DOTAZ:TYP=ODPOVED

Například:
apple.com:A=17.142.160.59

V případě nalezení odpovědi se vrací status code 200 OK a přeložená
odpověď.
Není-li odpověď nalezena, vrací se status code 404 Not Found.
Je-li zadán některý parametr chybně nebo chybí, vrací se status code
400 Bad Request.

POST

Metoda POST obsahuje v těle požadavku seznam dotazů, každý musí být
na samostatném řádku. Seznam nesmí být proložen žádnými prázdnými řádky
ani jimi nesmí začínat. Na konci seznamu je povoleno jedno odřádkování.
Tedy na konci řádku, na kterém se nachází poslední dotaz je povolen
jeden bílý znak \n.

Řádek požadavku je povinně:
POST /dns-query HTTP/1.1

Řádek v těle obsahující jeden dotaz má formát:
DOTAZ:TYP

kde:
DOTAZ - doménové jméno nebo IP adresa
TYP - typ požadované odpovědi (A nebo PTR)

Například:

www.fit.vutbr.cz:A
apple.com:A
147.229.14.131:PTR
seznam.cz:A

V případě, že pro alespoň jeden požadavek byla nalezena odpověď,
je výsledkem status code 200 OK a seznam odpovědí.

V případě, že pro konkrétní dotaz nebyla nalezena odpověď, je tento
požadavek ignorován.

V případě, že z celého seznamu dotazů se nepodařilo přeložit ani jeden
dotaz, je navrácen status code 400 Bad Request pokud alespoň jeden
příkaz implikoval tento status code. V situaci, kdy se nepodařilo
přeložit ani jeden dotaz, ale žádný neskončil se status code
400 Bad Request, je navrácen status code 404 Not Found.

V případě, že se prázdný řádek vyskytl na začátku nebo uprostřed
seznamu dotazů nebo za posledním(mimo jeden povolený) dotazem v seznamu
dotazů, je navrácen status code 400 Bad Request a to bez seznamu
odpovědí
!

Popis průběhu programu

Skript namapuje server na zadanou nebo implicitní hodnotu portu.
Na tomto portu bude server běžet dokud ho uživatel neukončí pomocí
signálu SIGINT napřílad pomocí "Ctrl + C".
Program sestává z jedné funkce, v které běží v nekonečné smyčce, kde
čeká na příchozí soket, který zpracuje se souladem s popisem v části
Podporované operace a následně je připraven na přijmutí dalšího
soketu.

ipk's People

Contributors

richardklem avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.