Vorgurakendused 2 prax 1 2016: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
PriitJ (arutelu | kaastöö)
PriitJ (arutelu | kaastöö)
59. rida: 59. rida:
[http://fragments.turtlemeat.com/javawebserver.php siit].Loe java socketitest põhjalikumalt [http://download.oracle.com/javase/tutorial/networking/sockets/ siit]. Pythoni serverinäite [http://muharem.wordpress.com/2007/05/29/roll-your-own-server-in-50-lines-of-code/ saad siit]; [https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/ lühem ja uuem]. Http kohta võib lugeda [http://www.jmarshall.com/easy/http/ näiteks siit].
[http://fragments.turtlemeat.com/javawebserver.php siit].Loe java socketitest põhjalikumalt [http://download.oracle.com/javase/tutorial/networking/sockets/ siit]. Pythoni serverinäite [http://muharem.wordpress.com/2007/05/29/roll-your-own-server-in-50-lines-of-code/ saad siit]; [https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/ lühem ja uuem]. Http kohta võib lugeda [http://www.jmarshall.com/easy/http/ näiteks siit].


== Rakenduse ideed ==
== Rakendus: anonümiseeriv võrk ==


* <strike>masspäringute hajutamine</strike>
Eesmärgiks on ehitada anonümiseeriv võrk nagu [https://www.torproject.org/ Tor]. Täpsemalt on eeskujuks praeguseks mitteaktiivne anonüümne failijagamise võrk [http://mute-net.sourceforge.net/ MUTE Network]. Sealt võetud ideid kasutades teeme võrgu, kus saab anonüümselt veebist faile (html vms) alla laadida.
* <strike>content distribution (streaming)</strike>
 
* <strike>maksed</strike>
Meie võrgus teab iga võrgusõlm (node) näiteks kolme naabrit. Kui sõlm A tahab alla laadida URL-i http://google.ee, saadab ta päringu kõigile oma naabritele. Need omakorda saadavad päringu oma naabritele jne. Päringul on kaasas salajane identifikaator - ainult A teab, et see identifikaator seostub temaga. Lõpuks jõutakse võrgusõlmeni B, kes otsustab, et laadib ise URL-i sisu alla. B ei tea kes URL-i sisu soovis, aga saadab vastuse suunas, kust ta päringu sai. Samal viisil liigub vastus mööda võrku tagasi, kuni jõuab A-ni, kes tunneb ära oma salajase identifikaatori.
* <strike>maatriksite korrutamine</strike>
 
* anonümiseeriv võrk
Võrku liituda ja sealt lahkuda võib suvalisel ajal. Seetõttu tuleb liitudes ja edasi perioodiliselt värsket naabrite nimekirja küsida, selleks paigutatakse samasse võrgu eraldi kataloogiserver.


== Protokoll ==
== Protokoll ==

Redaktsioon: 18. september 2016, kell 10:12

Ülesandeks on implementeerida lihtne P2P protokoll (rakendus selgub lähiajal)

  • realiseeritud HTTP protokolli peale (vaja implementeerida ka HTTP server ja klient)
  • hakkab tööle virtuaalses võrgus (https://rangeforce.com/)
  • eesmärk kõigi rakendused omavahel suhtlema ja ühise võrguna tegutsema panna

Ettevalmistus

Vali arenduseks töövahend: virtuaallaboris on olemas Java (+maven) ning Python 3 tugi. Muud keeled (Haskell, C, Javascript, C#) eeldavad, et tudeng saab ise arenduskeskkonna tööle. Seda on kasulik kohe alguses testida. Virtuaalmasinas jookseb Ubuntu desktop 16.04.

Tee avalikku git SCM teenusesse uus repo. Sobivad teenused on http://gitlab.com, http://github.com, http://bitbucket.com .

Leia tehtud repo URI. Näiteks: git@gitlab.com:priitj/test3.git (SSH), https://gitlab.com/priitj/test3.git (HTTPS).

Üle SSH protokolli reposse pöördumiseks on vaja täiendavalt teha SSH võti. Selleks vaata juhendeid, näit. Githubi puhul https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ ; https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ (need juhendid sisaldavad ka konfi Windowsi/Linuxi/Maci git kliendi jaoks).

Töö käigus repo kasutamiseks on kaks alternatiivi:

  1. IDE-sse integreeritud giti klient. IntelliJ/PyCharm puhul tee uus projekt selliselt, et vali VCS->Checkout from Version Control->Git, pane URI (SSH või HTTPS oma) ning uus kataloog. Siis "Clone" ning edaspidi on projekti töökataloog juba seotud eelnevalt tehtud repoga.
  2. Käsurea git klient (GIT bash Windowsi all või git käsk Linuxi/Maci all). Sel puhul järgi Gitlabi/Githubi/Bitbucketi juhiseid repo kohalikku arvutisse kloonimiseks ning selle initsialiseerimiseks.

Virtuaallabor

HTTP server/klient

HTTP baasil töötav protokoll näeb välja umbes järgmine:

 GET http://1.2.3.4/request?param1=val1&param2=val2
 POST http://1.2.3.5/response?param1=val1&param3=val3

jne. Seega tuleb meil teha:

  1. HTTP server, mis suudaks vastu võtta GET ja POST päringut ning parseerida pathi ja parameetrid (query stringi). Meid huvitab ka IP, kust päring tuli, see tuleb edaspidi kasutamiseks meelde jätta. POST päringu puhul peab lugema päringu "keha" (body).
  2. Selle peale peaks serveris käivituma mingi funktsioon. Selle võime jätta hetkel tühjaks
  3. Lõpuks saadame vastuse samuti HTTP päringuga. Seega vaja selleks HTTP klienti.

Server tuleb realiseerida ise, kasutades võrgust leitavaid näiteid mikro-http-serveri jaoks (tüüpiliselt paar lehekülge koodi). Selliseid näitekoode võib täiesti otse kasutada.

C jaoks on sobiv mikroserver näiteks tiny, java jaoks sobib alustuseks sisseehitatud HTTP server. Socketi tasemel alternatiividest on see server väga hea väike näide, aga selgitava tekstita, ning selgitavate tekstidega servereid leiad mh siit ja siit.Loe java socketitest põhjalikumalt siit. Pythoni serverinäite saad siit; lühem ja uuem. Http kohta võib lugeda näiteks siit.

Rakendus: anonümiseeriv võrk

Eesmärgiks on ehitada anonümiseeriv võrk nagu Tor. Täpsemalt on eeskujuks praeguseks mitteaktiivne anonüümne failijagamise võrk MUTE Network. Sealt võetud ideid kasutades teeme võrgu, kus saab anonüümselt veebist faile (html vms) alla laadida.

Meie võrgus teab iga võrgusõlm (node) näiteks kolme naabrit. Kui sõlm A tahab alla laadida URL-i http://google.ee, saadab ta päringu kõigile oma naabritele. Need omakorda saadavad päringu oma naabritele jne. Päringul on kaasas salajane identifikaator - ainult A teab, et see identifikaator seostub temaga. Lõpuks jõutakse võrgusõlmeni B, kes otsustab, et laadib ise URL-i sisu alla. B ei tea kes URL-i sisu soovis, aga saadab vastuse suunas, kust ta päringu sai. Samal viisil liigub vastus mööda võrku tagasi, kuni jõuab A-ni, kes tunneb ära oma salajase identifikaatori.

Võrku liituda ja sealt lahkuda võib suvalisel ajal. Seetõttu tuleb liitudes ja edasi perioodiliselt värsket naabrite nimekirja küsida, selleks paigutatakse samasse võrgu eraldi kataloogiserver.

Protokoll

Päringu saamise kinnitus. Peale iga HTTP requesti saamist vastab P2P node tekstiga "OK" juhul kui ei olnud viga ning tekstiga "Error: xxxxxxxxxxx" kui oli viga (xxxxxxxxxxx tähistab vabas vormis vea kirjeldust ning selle võib ka ära jätta).

Praktikumi kirjeldus täieneb jooksvalt semestri käigus