Proiectarea Si Implementarea Aplicatiei Raspberry Pi

Cuprins

Capitolul 1. Introducere …………………………………………………………..…………… 7

1.1. Rețelele de calculatoare – introducere ………………………………………………………………….. 7

1.2. Noțiuni introductive Hub/Router/Switch …………………………………………………………….. 13

1.3. Instalarea și configurarea sistemului de operare pentru desktop și/sau laptop ………….. 15

Capitolul 2. Visual Studio și programul C# ………….……………..………….……….…… 16

2.1. Origine și istoric ………………………………………………………………………………………………. 16

2.2. Programarea orientată pe obiect – scurt istoric …………………………………………………….. 17

2.3. Visual Studio 2013 – crearea unui proiect …………………………………………………………… 17

Capitolul 3. Proiectarea si implementarea aplicatiei ………………..……………………… 19

3.1. RASPBERRY PI …………………………………………………………………………………………….. 20

3.2. Sistemul de operare Linux ………………………………………………………………………………… 27

3.3. Linux și Internetul ……………………………………………………………………………………………. 29

3.4. Principalele comenzi Linux folosite în comunicarea în rețea …………………………………. 29

3.5. Interfețele de rețea în Raspberry Pi 2 ………………………………………………………………….. 31

3.6. Principalele comenzi Linux folosite în comunicarea în rețea …………………………………. 29

3.7. SSH si VNC…………………………………………………………………………………………………….. 29

3.8. Routerul ASUS N56U ………………………………………………………………………………………. 29

Capitolul 4. Aplicații …………………………………………………..……………………… 33

4.1. Aplicația 1 ………………………………………………………………………………………………………. 33

4.2. Sistemul de operare Linux ………………………………………………………………………………… 27

4.3. Linux și Internetul ……………………………………………………………………………………………. 29

4.4. Principalele comenzi Linux folosite în comunicarea în rețea …………………………………. 29

4.5. Interfețele de rețea în Raspberry Pi 2 ………………………………………………………………….. 31

3.6. Principalele comenzi Linux folosite în comunicarea în rețea …………………………………. 29

Concluzii ……………………………………………………………………………………………………………………. 50

Bibliografie ………………………………………………………………………………………………………………… 51

Anexe ………………………………………………………………………………………………………………………… 56

Capitolul 1

INTRODUCERE

Această lucrare prezintă configurarea și utilizarea plăcii Raspberry PI 2 în câteva scenarii pentru acasă și la birou in domeniul Internet Of Things (IOT), precum și folosirea limbajului C# și a mediului de dezvoltare Visual Studio de la Microsoft.

Pentru dezvoltarea acestor aplicații am folosit următoarele:

Limbajul de programare Python si uneltele de dezvoltare gratuite de la adresa python.org, versiunea 3.4, curentă.

Mediul de dezvoltare Visual C# 2013 Professional Edition, IDE proprietar Microsoft, ce permite dezvoltarea aplicațiilor care să ruleze pe platforme cu .NET diferite versiuni.

Card de memorie microSD si adaptor, format FAT32.

Placa de dezvoltare Raspberry Pi 2, versiunea a doua.

Routerul propriu, model ASUS N56U, pentru testarea comunicației în rețea.

Conexiune HDMI catre TV LCD

Voi începe cu o scurtă introducere în rețelistică, deoarece este esențială ințelegerea conceptelor de comunicare în cazul acestei lucrări.

1.1. Retelele de calculatoare – introducere

Rețelele de calculatoare și dezvoltarea globală

Retelele de calculatoare sunt, la această oră, arterele ce duc informația către tot Pământul. Aș putea îndrazni să compar funcționarea rețelelor de calculatoare cu neuronii ce duc informație de la toate organele către creier și nu aș exagera, având în vedere importanța pe care electronica și IT-ul o au la aceasă oră.

E pur și simplu de neconceput lumea modernă fără calculatoare, de la imagistică medicală la sateliți, de la cercetări balistice în domeniul nuclear și până la proiectarea 3D sau armele autoghidate “powered by Linux” despre care voi reveni.

Setea de informatie si necesitatea atingerii unor viteze tot mai mari imping baremele cunoscute de noi catre noi culmi, e de domeniul SF-ului ce poate face azi un banal smartphone de cateva sute de dolari si legea lui Moore incepe sa nu mai faca fata la avansul pe care producatorii de procesoare il ating in aceste momente.

Daca imaginea unei retele de calculatoare, in mod traditional, implica un router si cateva hosturi, de obicei calculatoarele butucanoase si grele cu ecranele CRT, progresul si-a facut aparitia si la aceasta ora putem discuta de frigidere cu Internet, cuptoare cu microunde conectate global sau televizoare Smart cu care putem discuta cu oameni de la celalalt capat al planetei.

Fibra optica, conexiunile transoceanice si folosirea transmisiilor de ordinal gigabitilor (sute) si banalizarea chiar a conexiunilor gigabit pentru home-useri asigura un viitor luminos streamingului de acaasa, televiziunii 4K sau realitatii virtuale.

Evident, progresul stiintific costa, si de multe ori pretul accesului la cele mai noi tehnologii e prohibitiv, insa o data cu intrarea in folosinta larga, noile tehnologii devin din ce in ce mai accesibile.

Desi am progresat foarte mult, termenul de retea de calculatoare nu s-a denaturat, dimpotriva, e din ce in ce mai raspandit, chiar fără să ne dam seama. Am ajuns sa plecam la tramvai sau troleibuz ghidati de un GPS dintr-o carcasa metalica sau de plastic, sa privim filme care ruleaza de pe un server configurat de noi insine si sa aflam ca temperatura acasa necesita pornirea climei, care s-a realizat deja automat astfel incat sa ajungem acasa intr-un climat confortabil. Ba chiar putem munci de acasa, din confortul biroului, in timp ce clientii dintr-o alta tara asteapta rezolvarea unei probleme cu ajutorul uneltelor remote pe care le avem la dispozitie.

Dezvoltarea retelelor de calculatoare este inexorabil legata de dezvoltarea companiilor, cautarea continua a acestora a profitului, maririi productivitatii si usurarii activitatii cotidiene a angajatilor a dus de multe ori la o viata mai buna pentru noi, utilizatorii casnici.

O clasificare sumara a rețelelor de calculatoare se poate face :

După tipul mediului de transmisie

După întindere geografică

După topologie fizică

După topologie logică

După tipul mediului de transmisie, avem:

Wired – transmisie pe fire

Wireless – transmisie prin unde electromagnetice

După întinderea geografică:

LAN (local area network, adică rețele locale)

MAN (metropolitan area network)

WAN (wide area network)

După topologia fizică, există

Rețele tip ring

Rețele tip bus

Rețele tip star

Rețele tip mesh

Figura 1.1.

De asemenea, se mai pot face clasificari, in functie de metodele de acces la mediul de transmisie: TDM (time division multiplexing) – metode statice, FDM (frequency division multiplexing) si WDM (wavelength division multiplexing), si token passing (metode dinamice – deterministe)

La ora actuala, exista un standard extrem de uzitat în ceea ce privește comunicarea în retea, si anume TCP/IP. TCP/IP, IPX/SPX si Apple Talk, alaturi de OSI, au concurat pentru suprematie, incepand cu anii 70, cand nu exista inca un standard care sa fie adoptat de toate firmele. Gigantii ca IBM isi dezvoltasera « in the house » standarde proprietare, iar lipsa posibilitatii de interconectare incepea sa fie o problema. In cele din urma, din lupta dintre TCP/IP, dezvoltat de catre DARPA, si OSI, standard dezvoltat de catre o echipa in 1984 (International Standards Organization), primul a castigat.

Modelul OSI

Arhitectura OSI se compune din sapte layere, sau straturi. Modelul OSI este doar un model abstract, care se studiaza in prezent doar cu titlu de referinta. Modelul OSI a fost in dezvoltare in anii 80 si 90, de catre un comitet ce a creat protocoale si specficatii pentru a implementa functiile corespunzatoare fiecarui layer.

Fiecare nivel din OSI, datorita muncii extraordinare depusa in acei ani, este excelent descris, astfel incat comparatia cu TCP/IP se poate face extrem de facil.

Avand in vedere ca la ora actuala competitia a fost castigate cu brio de TCP/IP, orce protocol nou va aparea are correspondent intr-unul din modelele comparative OSI sau TCP/IP

Desi par identice, nivelele inferioare din OSI si TCP/IP nu sunt chiar asa “imagine fidela” deoarece, de exemplu, OSI foloseste Physical Layer ca sa descrie doar specificatiile fizice si protocoalele necesare transmisiei in retea. OSI separa specificatiile de retea in layer fizic si functiile de control in data link layer. TCP/IP le unifica.

Figura 1.2.

Modelul TCP/IP

TCP/IP își are originile în proiectul inițiat de DARPA ( U.S.A.) în 1969 numit ARPANET, în 1983 fiind adoptat ca standard. în cele din urmă, rețeaua a ajuns să conecteze între ele, utilizând linii telefonice închiriate, sute de rețele universitare și guvernamentale. Atunci când au fost adăugate, mai târziu, rețele prin satelit și radio, interconectarea acestora cu protocoalele existente a pus diferite probleme. Era nevoie de o nouă arhitectură de referință. De aceea, posibilitatea de a interconecta fără probleme mai multe tipuri de rețele a reprezentat de la bun început un obiectiv de proiectare major. Această arhitectură a devenit cunoscută mai târziu sub denumirea de modelul de referință TCP/IP, dată după numele celor două protocoale fundamentale utilizate.

Inițial, scopul a fost construirea unei retele capabile sa supravietuiască, pe teritoriul SUA, unui bombardament nuclear. Ca și în cazul modelului OSI, TCP/IP împarte funcțiile de rețea în straturi distincte. Cu toate acestea, TCP/IP face acest lucru cu doar patru straturi: Aplicație(eng. Application), Transport(eng. Transport), Internet(eng. Internet), și de Acces la rețea(eng. Network Access). Toate funcționalitățile modelului OSI au loc de asemenea și în cadrul modelului TCP / IP; cu toate acestea, straturile nu se alinează exact :

Figura 1.3.

Nivelul ACCES LA REȚEA (Data Link)

Nivelul acces la rețea se ocupă cu toate problemele legate de transmiterea efectivă a unui pachet IP pe o legătură fizică, incluzând și aspectele legate de tehnologii și de medii de transmisie, adică nivelurile OSI Legătură de date și Fizic.

Nivelul de INTERNET

Nivelul Internet se ocupă cu trimiterea pachetelor sursă din orice rețea pe internet și capacitatea de direcționare a acestor pachete la destinație.

Protocoalele care lucrează la nivelul Rețea din modelul TCP/IP sunt:

IP (Internet Protocol)

ICMP (Internet Control Message Protocol)

ARP (Address Resolution Protocol)

RARP (Reverse Address Resolution Protocol).

IP caută cea mai bună cale de a trimite pachetele. ICMP oferă capabilități de control și de schimbul de mesaje. ARP determină adresa MAC pentru adresele IP RARP determină adresa IP pentru o adresă MAC cunoscută. Problemele majore se referă la dirijarea pachetelor și evitarea congestiei în rețea. De aceea este rezonabil să presupunem că nivelul Rețea din TCP/IP funcționează asemănător cu nivelul rețea din OSI

Nivelul TRANSPORT

Acest nivel este proiectat astfel încât să permită conversații între entitățile pereche din gazdele sursă și, respectiv, destinație, la fel ca în nivelul transport OSI.

în acest sens au fost definite două protocoale. Primul din ele, TCP este un protocol orientat pe conexiune (eng.connection-oriented) utilizat de aplicatii care necesita corectare a erorilor la livrare. Dezavantajul este că, în scopul de a furniza un grad de incredere(eng. reliability) al seviciilor, TCP adaugă informație adițională la procesul de comunicare (figura 4, antetul TCP). Acest lucru incetineste viteza, consuma latime de banda mai mare, și necesită mai multă procesare pentru gazde în timpul comunicării.

TCP este un protocol punct la punct (eng. point to point), orientat pe conexiune(eng. connection-oriented), introdus pentru a proteja rețeaua împotriva supraîncărcării puternice și pentru a realiza o împărțire echitabilă a lățimii de bandă pentru diferite surse TCP. Protocolul TCP detectează erori precum pachete eronate, pierdute sau duplicate. Emițătorul atribuie o secvență numerică fiecărui pachet (segment) și solicită o confirmare pozitivă (ACK) de la receptor. Receptorul detectează pierderea de pachete verificând secvența numerică și confirmând, la fiecare pachet primit, ultimul pachet recepționat în ordinea corectă. Pentru fiecare pachet care nu este în ordine, o confirmare duplicat este trimisă. Acest ACK duplicat are rolul de a notifica perechea de faptul că a fost detectată o pierdere, și pentru a îi transmite emițătorului următoarea secvență numerică așteptată.

Utilizarea de protocoale TCP ca ca protocol de transport include SMTP, HTTP, HTTP (e), FTP. Procesul de comunicare TCP cuprinde trei funcții majore: înființarea sesiunii, recuperarea erorilor și control al fluxului.

Antetul TCP:

Figura 1.4.

Al doilea protocol din acest nivel, UDP ( User Datagram Protocol ), este un protocol nesigur, fără conexiuni, destinat aplicațiilor care doresc să utilizeze propria lor secvențiere și control al fluxului, și nu pe cele asigurate de TCP. Protocolul UDP este de asemenea mult folosit pentru interogări rapide întrebare-răspuns, client-server și pentru aplicații în care comunicarea promptă este mai importantă decât comunicarea cu acuratețe, așa cum sunt aplicațiile de transmisie a vorbirii și a imaginilor video. Relația dintre IP, TCP și UDP este prezentată în figura de mai jos. De când a fost dezvoltat acest model, IP a fost implementat pe multe alte rețele.

Figura 1.5.

Exemple de aplicații care folosesc procolul UDP:

DNS ( DOMAIN NAME SERVER )

TFTP (TRIVIAL FILE TRANSFER PROTOCOL )

IPTV ( TV prin Internet)

VOIP ( Telefonie prin Internet)

Nivelul APLICAȚIE (Application)

Acesta conține toate protocoalele de nivel mai înalt. Primele protocoale de acest gen includ terminalul virtual (TELNET ), transferul de fișiere (FTP ) și poșta electronică (SMTP). Protocolul de terminal virtual permite unui utilizator de pe o mașină să se conecteze și să lucreze pe o mașină aflată la distanță. Protocolul de transfer de fișiere pune la dispoziție o modalitate de a muta eficient date de pe o mașină pe alta.Poșta electronică a fost la origine doar un tip de transfer de fișiere, dar ulterior a fost dezvoltat un protocol specializat pentru acest serviciu. Pe parcursul anilor, la aceste protocoale s-au adăugat multe altele, așa cum sunt Serviciul Numelor de Domenii (Domain Name Server – DNS) pentru stabilirea corespondenței dintre numele gazdelor și adresele rețelelor, NNTP, protocolul utilizat pentru a transfera articole de știri, HTTP , folosit pentru aducerea paginilor de pe Web și multe altele.

1.2. Noțiuni introductive Hub/Router/Switch

Indiferent de topologia rețelei, transmisia datelor de la host-uri (adica, dispozitive ce au adresa IP) în interiorul, respectiv exteriorul rețelei se face cu ajutorul unor echipamente hardware specializate. Fiecare din acestea lucrează la un anumit nivel al layerului OSI (sau TCP/IP), și execută funcții specifice în cadrul rețelei.

Un ruter (eng. router) este un dispozitiv hardware sau software care conectează două sau mai multe rețele de calculatoare bazate pe "comutarea de pachete" (eng. packet switching). Funcția îndeplinită de routere se numește rutare. Diferențierea între routere hardware și routere software se face în funcție de locul unde se ia decizia de rutare a pachetelor de date. Routerele software utilizează pentru decizie un modul al sistemului de operare, în timp ce routerele hardware folosesc dispozitive specializate (de tip ASIC) ce permit mărirea vitezei de comutare a pachetelor.

Routerele operează la nivelul trei al modelului OSI. Ele folosesc deci adresele IP (de rețea) ale pachetelor aflate în tranzit pentru a decide către care anume interfață de ieșire trebuie să trimită pachetul respectiv. Decizia este luată comparând adresa destinație a calculatorului cu înregistrările (câmpurile) din tabela de rutare. Aceasta poate conține atât înregistrări statice (configurate/definite de către administratorul rețelei), cât și dinamice, aflate de la routerele vecine prin intermediul unor protocoale de rutare.

Un switch de rețea este este un dispozitiv hardware care conectează mai multe computere într-o rețea locală(LAN). O dată cu implementarea Ethernetului huburile și switchurile sunt cele mai folosite dispozitive. Diferenta dintre switch-uri și hub-uri este mare din punct de vedere al incărcarii rețelei. Comparativ cu hub-urile, care foloseau algoritmul CSMA/CD*** și incărcarea rețelei era mare, datorită faptului că un pachet era trimis către dispozitivele din rețea, switch-urile permit în schimb transmiterea unicast/multicast/broadcast. Acest lucru ajuta la decongestionarea rețelei, precum și la transmiterea mai rapidă a informației, datorită faptului că hub-urile transmit mereu informația half-duplex(între două host-uri transmisia se face pe rand). Switch-urile transmit full-duplex, ceea ce inseamnă, de exemplu, că un switch Gigabit cu opt porturi va menține opt legaturi între host-uri, în cazul în care acestea transmit. Deși din punct de vedere al aspectului fizic, hub-urile și switch-urile pot fi confundate, într-o organizație modernă, indiferent de mărime, este extrem de important să putem decongestiona rețeaua, folosind switch-uri.

Algoritmul CSMA/CD implementează retransmisia aleatoare a unui pachet de date în momentul în care dispozitivul care incearcă să livreze date rețelei detectează folosirea acesteia de catre un alt dispozitiv.

Switchurile pot opera pe mai multe niveluri(eng. layers) OSI, cum ar fi cel fizic, conexiunea datelor, transport, rețea. Un dispozitiv care lucreaza simultan pe mai multe astfel de niveluri se numeste switch multistrat (multilayer switch).

Switchurile pot conecta și tipuri diferite de rețele, cum ar fi Ethernet, Fibre Channel, ATM(Asynchronous Transfer Mode) și wireless. Al doilea strat funcțional din modelul OSI (data link layer) este adecvat pentru transportul în interiorul unei singure tehnologii iar interconectarea tehnologiilor precum Ethernet și token ring se face mai usor la stratul al treilea (network layer).

Un hub Ethernet este un dispozitiv care conectează împreună mai multe fire torsadate sau dispozitive Ethernet care utilizează fibra optică acestea funcționând apoi ca un segment de rețea unic.

Hub-urile funționează la nivelul fizic(nivelul 1) al modelului OSI. Dispozitivul este de fapt un repetor multiport (eng. multiport repeater).

Motivul alegerii rețelei si beneficiile în mediul home sau office

La aceasta ora, suntem legați permanent la Internet, cu ajutorul smartphone-urilor, al laptopurilor si al retelelor de socializare. Avem prieteni pe Internet pe care nu i-am vazut niciodata la față, și putem lucra la firme care sunt la distante de sute sau mii de km departare.

Reteaua intr-o companie inseamnă:

comunicare interna in acea companie, folosind de exemplu Pidjin (un soft care permite chiar si comunicarea inter-retele)

comunicare interdepartamente

accesarea datelor companiei si accesul la baze de date de pe un server de fisiere, spre exemplu, sau server de mail

back-up al datelor, zilnic sau saptamanal

posibilitatea de automatizare a logisticii si achizitiei, dar si o actualizare permanenta a stocurilor, verificarea calitatii sau a statusului livrarilor

conferinte multimedia si streaming

server Web pentru prezentarea firmei

Rețeaua acasă se poate referi, în anul 2015, la:

un calculator puternic, pe post de stație de lucru, calculator de jocuri, echipat de obicei cu placă video și placă de sunet discrete, monitor Full HD sau mai mare, rezoluțiile 4K devin din ce în ce mai accesibile, avem acasă procesoare quad-core sau mai mult, zeci de giga de RAM si hard diskuri ultra rapide, gen SSD, efectiv inimaginabil acum 10-20 de ani

un laptop, o tabletă sau ambele, pentru folosirea în pat, bibliotecă sau chiar bucătărie, există persoane care le folosesc chiar în baie (vezi seria tabletelor de la Sony rezistente la apă)

un telefon smart, diagonalele acestor dispozitive cresc din ce în ce mai mult, și pot fi folosite chiar și în curte, pentru a verifica știri sau ce s-a downloadat nou

Server NAS sau router echipat cu clienți de torrent, eventual accesibil ca și server FTP sau SSH din afară, adică de pe Internet, atunci când proprietarul este plecat din locuință

Televizor Smart, care la rândul lui poate fi folosit pentru browsing Internet, vizionare clipuri Youtube sau socializare, eventual folosind o camera web integrată în acest dispozitiv. Televizorul încetează a mai fi un membru pasiv al rețelei, și participă la rândul său la proiectul de casă inteligentă

Consolă de jocuri, chiar și un dispozitiv mai vechi gen Xbox 360 sau Playstation 3 poate fi folosit pe post de streaming server, pentru vizionarea pozelor sau fotografiilor din concediu

Dispozitivul pe care l-am ales în acest proiect, și anume Raspberry Pi, poate fi folosit în multiple moduri, de exemplu ca server Web, server de fișiere sau centur download, asta ca să nu menționez aplicațiile tip casă inteligentă, din ce în ce mai la modă.

1.3. Instalarea și configurarea sistemului de operare pentru desktop și/sau laptop

Alegerea sistemului de operare pentru 2015, avand in vedere ca Windows 10 nu a fost oficial lansat pe piată, precum si faptul ca intr-un mediu enterprise, dar și acasă, testele pe utilizatori nu sunt dezirabile este una foarte simpla: Windows 7 Professional Edition. Alegerea e logică având în vedere interfața incomodă din Windows 8, precum și faptul că Windows 10 Beta este încă problematic din punct de vedere al driverelor.

Cum configurarea Windows 7 nu mai pune probleme deosebite, voi trece în revistă pașii, foarte rapid : este necesară fie arderea unui DVD cu imaginea ISO a sistemului de operare sau, mai comod, configurarea unui stick USB de minim 4 Gb cu ajutorul utilitarului gratuit Rufus.În timpul instalării se va alege partiția pe care urmează să fie instalat sistemul de operare și apoi se pornește instalarea. După terminarea instalării, se vor instala driverele necesare, e posibilă downloadarea unui Visual Studio Express Studio, precum și a unui packet Office, după posibilități și dorință.

Capitolul 2

VISUAL STUDIO ȘI PROGRAMUL C#

2.1. Origine și istoric

Limbajul de programare C# este creația Microsoft ca răspuns la provocarea Java, încercând să compenseze lipsa de deschidere a gigantului din Redmond în fața problemelor pe care i le-au pus Linux si Open Source în general.

C Sharp este creația inginerului olandez Anders Hejlsberg, care a format o echipă ce dorea dezvoltarea unui limbaj de programare orientat-obiect care să permită lucrul în rețea si dezvoltarea Web. C# își propunea (și reușește) să îmbunătățească C și C++, folosind standardul CLI (common language infrastructure) implementat de Microsoft și ISO si ECMA.

Limbajul C# folosește bibliotecile .Net și s-a vrut a fi o alternativă pentru Visual Basic, un limbaj simpu de învățat, dar care nu avea nici pe departe puterea sau flexibilitatea C++, de exemplu. Cu ajutorul C#, Microsoft a reussit sa atraga atentia si comunitatii open source, deoarece a permis dezvoltarea pentru platforme Linux a programelor C# cu ajutorul Mono. Se poate spune chiar, la aceasta ora, ca Microsoft cu C# vrea sa fie Unix cu C-ul în anii 70.

Cea mai nouă iterație a acestui limbaj este, la această oră, C# 5.0. Deși, din punct de vedere al consumului de memorie, nu se poate compara cu limbajul C sau Assembly (adica limbajul de asamblare), C# poate fi folosit pentru a scrie aplicații atât pentru sisteme embedded, cât și sisteme mainframe pe care rulează Windows (adică servere șamd)

C# folosește programarea funcțională LINQ, și începând cu versiunea 3.0, precum și expresii lambda, făcând posibilă interogarea bazelor de date, parsing-ul fișierelor XML, sau căutarea prin structuri de date.

Simbolul C# este folosit în muzică, și a fost folosit ca simbol a sistemului de operare. De fapt, denumirea vine de la C++ la care se mai adaugă încă două plusuri, ceea ce semnifică evoluția.

Figura 2.1.

C# folosește CLI (common Language Interface), este un limbaj strict, ce scapă programatorii de problema spinoasă a pointerilor și de verificarea alocării memoriei, așa cum se întâmplă in Java.

Pentru prima parte a proiectului, am ales să creez o aplicație simplă, ce poate fi folosită în cazul în care se dorește, în primă instanță, editarea rudimentară a unei imagini, iar apoi folosirea C# în vederea realizării unei aplicații steganografice simple, ce permite transmiterea unui mesaj disimulat într-o imagine.

Mediul de dezvoltare C# permite salvarea si deschiderea fișierelor folosind bibliotecile incluse.

2.2. Programarea orientată pe obiect – scurt istoric

Deși multă lume crede că limbajele orientate obiect (OOP) sunt produsul anilor 80 și ale creatorului limbajului C++, Bjarne Stroustrup, care a transformat limbajul C și l-a modernizat, de fapt SIMULA 1 (1962) and Simula 67 (1967) sunt cele mai vechi limbaje orientate obiect. Limbajele Simula au fost dezvoltate de Ole – John Dahl și Kristen Nygaard la Norwegian Computing Center din Oslo, Norvegia. Deși cele mai multe din avantajele OOP erau disponibile în variantele vechi ale limbajului Simuta, până în anii 90 și dezvoltarea C++, limbajele C++ nu au început să înflorească. C, limbajul părinte al C++, era puternic, atât de puternic încât puteai sa ”te împuști în picior singur, de mai muilte ori”. C++, pe de altă parte, nu doar că-ți permite să te împuști în picior, ci să îl zbori cu totul. În ciuda puterii din spatele C++, proiectele mari au o complexitate imesă. Developerii aveau nevoie de ceva mai simplu și poate mai puțin complex pentru OOP.

În ianuarie 1991, James Gosling, Bill Joy, Patrick Naughton, Mike Sheradin, și alții s-au întâlnit în Aspen, Colorado, pentru a pune bazele Stealth Project. Grupul își dorea dezvoltarea dispozitivelor electronice inteligente, controlabile și programabile cu ajutorul unui dispozitiv ceputea fi ținut în mînă. Rezultatul poartă numele de Oak, ce avea să devina arhicunoscutul Java.

Language (named after an oak tree outside Gosling ’ s window), which eventually morphed into the Java. Cu ajutorul Java și îmbunătățirile pe care le-a adus funcționalității internetului, dezvoltarea era asigurată

2.3. Visual Studio 2013 – crearea unui proiect

După ce s-a instalat fie Visual Studio Professional, fie Visual Studio Express și am ales opțiunea de programare în C#, noul proiect se creează în funcție de cerințe. Așa cum am menționat, e posibilă fie realizarea unui utilitar simplu tip consolă, fie a unei aplicații complexe, ce are interfață grafică, așa cum e cazul de față.

Figura 2.2. – Crearea unui proiect in Visual Studio

Înaintea mediilor de dezvoltare integrate (așa cum e Visual Studio, și cum e și Python, despre care voi vorbi în capitolul dedicat), programarea se făcea în mai mulți pași, cum ar fi : editarea se făcea pe codul sursă. Urma rularea compilatorului și verificarea de erori. Apoi se rula un program în Assembler pentru a converti codul sursă în limbaj de asamblare. În cele din urmă, se rula un linker pentru legarea elementelor programului și combinarea acestora într-un executabil. IDE-ul Visual Studio permite combinarea acestor funcții într-un singur mediu, pentru a ușura si grăbi atât testarea cât și scrierea programului.

Figura 2.3.

Capitolul 3

PROIECTAREA ȘI IMPLEMENTAREA APLICAȚIEI

Interfața Visual Studio Professional, mediul de integrare pe care l-am ales, permite crearea unei interfețe grafice mult mai rapid decât în cazul Java și evident mai ușor decât in C. Așa cum se poate vedea în figura 1, am ales o interfață aerisită și clară pentru a putea permite vizualizarea imaginii de prelucrat.

Figura 3.1. – Interfața programului

S-au folosit următoarele biblioteci, pe care C# ni le pune la dispoziție :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Drawing.Imaging;

Pentru deschiderea și salvarea documentelor, am folosit clasele OpenFileDialog, respectiv SaveFileDialog.

Cum proiectul folosește manipularea imaginilor, am limitat alegerea tipurilor de fișiere pe care le voi manipula în bmp, jpg, gif, png, deoarece sunt cele mai întâlnite tipuri de fișiere pe care utilizatorii le folosesc.

Fiecare pixel dintr-o imagine BMP are trei caracteristici, pe lângă poziția, X respectiv Y, respectiv R, G si B, pentru a reprezenta intensitatea de culoare rosu, verde si albastru. In hexazecimal, R, G si B pot avea valori intre 00 si FF, zecimal 00 – 255.

Pentur manipularea imaginii și crearea unei alb-negru am folosit o formulă matematică ce schimbă culoarea pixelilor din RGB

3.1. RASPBERRY PI

Raspberry Pi 2, pe care-l voi folosi în acest proiect, este o placă de dezvoltare, de mărimea unui card de credit, care se folosește într-un televizor sau monitor, ce folosește o tastatură și un mouse standard.

Figura 3.2.

Configurarea Rasbperry Pi

Raspberry Pi prezintă posibilitatea alegerii într-un checkbox a șase sisteme de operare:

Archlinux,

Openelec

Pidora

Risc Os

RaspBMC

Raspberry

Raspbian este selecția dorită, și se va apăsa butonul Install OS.

Cand se porneste Pi pentru prima data impreuna cu cardul NOOBS va aparea o caseta de selectie cu sase alegeri: Archlinux, OpenELEC, Pidora, RISC OS, RaspBMC, si Raspbian. Se va selecta Raspbian si se va apasa butonul “Install OS” din coltul din stânga sus al ferestrei. Se confirmă instalarea apăsând butonul Yes. Se așteaptă câteva minute până la terminarea instalării. Se recomandă urmărirea isntalării deoarece se afișează câteva instrucțiuni folositoare

După finalizarea scrierii, se apasă butonul Ok, iar sistemul de operare rebootează.

La începutul procesului de boot, ca pe orice Linux funcțional, vom vedea linii de text curgând, cu informații despre sistem.

După pornire, exista un tool de configurare ce este afișat pe ecran: raspi-config. Acesta oferă câteva opțiuni adiționale, cum ar fi:

mărirea file system-ului (sistemul de fișiere poate avea ca și mărime mai puțin ca suprafața totală a cardului MicroSD). Deși aceasta este o idee bună, în

momentul instalării cu ajutorul Noobs, e deja rezolvat.

Schimbarea parolei utilizatorului (chestie pe care am încercat-o, după aceea uitând parola, ceea ce a dus la repornirea instalării de la zero)

Overclocking.

Ultima opțiune, anume overclocking-ul, permite obținerea unor performanțe superioare, dar evident va scădea durata de viață a produsului. Recomandarea producătorului este să nu se exagereze cu acesta, și să nu se urce mai mult de 900 Mhz.

Alte opțiuni incud:

Alegerea unui unui hostname

Împărțirea memoriei (splitting)

Accesul cu ajutorul SSH (de care m-am folosit mai târziu)

Orice opțiune incorect aleasă la momentul instalării poate fi reparată până înaite de a da Finish si a apăsa Enter.

Credențialele default pentru accesul la sistemul Linux (la care eu personal am atașat o tastatură mecanică și un mouse Razer DeathAdder) sunt:

User: pi

Parola: raspberry

După instalarea sistemului Raspbian, se poate lansa din terminal comanda startX. Aceasta pornește interfața grafică a sistemului, deși aceasta nu e musai necesară. Evident, din meniul Rasp_Config se poate alege pornirea sistemului direct în GUI.

Desktopul standard și câteva icoane vor apărea:

Terminalul LXTerminal – pentru interacțiunea cu ajutorul liniei de comandă

Scurtătura către browserul standard, Epiphany

Scurtătura către File Managerul inclus, PCManFM

IDLE Python, pentru lucru cu Python

Coșul de gunoi, numit Waste Basket

Deși la acest moment, instalarea pare a fi fost finalizată, e necesar să mai lucrăm pentru finalizarea instalării, de exemplu sistemul de operare ce rulează pe Raspberry este Linux, care, la fel ca și Microsoft Windows, are parte de update-uri (actualizări) regulate.

Pentru efectuarea update-urilor, este necesară urmărirea pașilor de mai jos:

sudo apt-get update – lista de software se reînnoiește

sudo apt-get upgrade

Se actualizează versiunile și se cere confirmarea utilizatorului pentru a efectua modificări. În funcție de tipul actualizării, este necesară repornirea device-ului Raspberry.

După repornirea mașinii Raspberry Pi, se repornește din nou interfața grafică, cu ajutorul comenzii startx.

Închiderea sistemului se face, în mod normal, numai la nevoie, motivul fiind consumul excelent al mașinii raspberry, și anume 1.8 Amperi, conform site-ului oficial al producatorului:

https://www.raspberrypi.org/help/faqs/#powerReqs

La nevoie, sistemul poate fi oprit scoțându-l din priză, în cazul în care nu avem activiăți pornite, deoarece tot ce-i în RAM dispare – evident. Modul corect de a-l opri este din

– meniul Raspberry (click pe zmeura din stânga sus), apoi shutdown

– linia de comandă, folosind comanda sudo shutdown –r now

Figura 3.3.

Această comandă oprește procesele care rulează, NU oprește total sistemul! Abia după rularea acestei comenzi, sistemul poate fi scos de sub tensiune.

Personal, am încercat rularea mașinii Raspberry cu ajutorul unui cablu MicroUSB, fără nicio problemă, deși aveam să atașez un HDD extern (după cum voi arăta) precum și un modem USB 3G.

Comenzile Linux care se pot folosi în Raspbian sunt:

ls

cd

pwd

rm filename

mkdir directory_name

rmdir directory_name

cat textfile

mv oldfile newfile

cp oldfile newfile

man command

date

echo

grep

sudo

./program

Exit

Descrierea comenzilor Linux , pe scurt:

ls afișează directorul curent, ca și conținut

cd schimbă directorul

pwd afișează locația curentă (director)

rm folosește la ștergere (spre deosebire de Windows, unde avem comanda delete, în Linux se șterge la fel ca un permanently delete în cazul folosirii acestei comenzi)

mkdir, respectiv rmdir, creere și ștergere directoare

cat afișează un text sau un program ca și conținut

mv mută sau redenumește un fișier

cp copiază (la fel ca și comanda copy din Windows)

date afișează sau modifică data sistemului

echo afișează conținutul unui sistem sau output-ul unei comenzi

grep este una din cele mai utile comenzi Linux, și în mâinile unui bun cunoscător, este o unealtă de căutare extrem de versatilă sau puternică, permite căutarea în întreaga structură ierarhică a sistemului Linux după unui fișier, ba chiar permite căutarea după porțiuni text din acesta

sudo permite excecutarea comenzilor ca și user root, adică având control total asupra sistemului, ca un administrator în sistemul Windows sau Windows Server. Sudo este una din cele mai puternice arme la dispoziția unui eventual atacator asupra unui sistem, deoarece permite, în cazul Linux, dreptul de a înlătura sau distruge după bunul plac porțiuni din sistem.

cat este o cale rapidă de a vizualiza un fișier sau modificările efectuate asupra acestuia

./filename permite executarea unui program în Linux.

Raspberry Pi permite și accesul la Accesorii, pentru a putea edita fișiere, cu ajutorul TextLeaf, din interfața grafică. Acest progămel este inaccesibil pentru lucrul remote, din păcate, pentru cei ce lucrează cu ajutorul SSH.

Spre deosebire de Windows, unde permisiunile sunt modificate de cele mai multe ori din interfața grafică, în cazul Linux, de cele mai multe ori modificarea permisiunilor pentru fișiere sau foldere se face cu ajutorul comenzii chmod.

Fără să aduc argumente în favoarea folosirii Linux ca mediu de lucru uzual (pentru că nu există, în umila opinie a subsemnatului, rival la administrarea Windows din punct de vedere al unui administrator, Active Directory este foarte user friendly și puternic ca instrument ingegrat), pot enumera câteva avantaje ale administrării unui sistem din linia de comandă, așa cum se întâmplă în cazul Linux:

Costul sistemului este zero, Linux este Free și Open Source

Linia de comandă, folosită corect, este puternică, pentru task-uri repetitive

Se poate efectua accesul la distanță la un sistem fără CAL ca în cazul Windows Server

Sistemul de operare Linux este mai stabi, putând rula chiar și fără interfață grafică. Culmea, Windows Server a dezvoltat versiunea Windows Core pentru Windows 2008, în care folosirea liniei de comandă și a utilitarului Power Shell nu necesită folosirea unei interfețe grafice.

Drepturile de utilizator în Linux sunt, pentru fiecare fișier sau director, împărțite în trei categorii, după cum urmează:

Creatorul fișierului/directorului, adică owner

Grupul, adică group

Toți ceilalți utilizatori, adică others

Drepturile de utilizator în Linux sunt:

Scriere – Read

Citire – Write

Executare – Execute

Modificarea drepturilor asupra unui obiect (fie fișier fie director) se realizează fie explicit fie reprezentând binar drepturile:

https://en.wikipedia.org/wiki/Chmod

Având în vedere faptul că este extrem de importantă modificarea drepturilor fișierelor, și că Linux se bazează în primul rând pe linia de comandă (contrar opiniilor că ar fi comparabil ca și features cu Windows în modul grafic, realitatea este că, ne place sau nu, Linux e folosit cu precădere în mediul enterprise sau academic sau specific în routere, media centere sau NAS-uri), consider că este util un mic tutorial referitor la chmod, mai ales că a trebuit să-l folosesc în acest proiect.

Listarea tuturor fișierelor dintr-un director, cu comanda mai sus menționată, ls –l , și a drepturilor acestora, urmată de crearea cu ajutorul comenzii touch a unui fișier de test.

Fișierul are drepturile implicite, si stim ca-i vorba de un fișier deoarece începe cu ”-” notarea:

-rw – r- – r – –

După cum se poate vedea în figura de mai jos:

Figura 3.4.

Reprezintă, ceea ce înseamnă că proprietarul fișierului, adică userul pi, are drept de scriere și citire, iar grupul și ceilalți useri doar drept de citire.

Având în vedere că aceste drepturi pot fi scrise și sub formă de cifre, am putea spune că drepturile sunt tip 644.

De unde aceste cifre?

Știind că drepturi totale pentru un user reprezintă cifra 7:

Drept de citire: 4

Drept de scriere: 2

Drept de executie: 1

Niciun drept: 0

Știind că drepturi totale pentru un user reprezintă însumate dau 7, drepturi totale asupra unui fișier se pot da executând chmod 777 nume_fisier.

Figura 3.5.

3.2. Sistemul de operare Linux

Deși am vorbit despre comenzile Linux, este cazul să expun structura de directoare Linux. Spre deosebire de Microsoft Windows, unde împărțirea se face pe hard disk-uri și litere, în Linux sistemul de fișiere seamănă cu un copac, utilizatorul se află într-un director, putând vedea numai cale aspre acel director și subdirectoarele directorului curent.

Figura 3.6.

Principalele directoare într-un sistem Linux sunt după cum urmează :

/ directorul root, rădăcină, este baza sistemului Linux, toate celelalte directoare îi sun subordonate, așa cum este directorul C: corespunzător unui Hard Disk în Microsoft Windows

/bin – conține comenzile Linux folosite de adminstratorii de sistem sau useri

/dev – se folosește de către Linux pentru a instala dispozitive

/etc – se folosește pentru a controla execuția programelor și suportul mediului dinamic Linux. Conține fișierele de configurare pt. sistem și aplicații

/media – aici găsim echivalentul discurilor din Windows, locul în care se pot găsi HDD-uri externe, unități USB, modemuri 3G, DVD-uri externe,

/mnt – similar cu /media, se păstrează aici sisteme de fișiere temporar

/proc – funcționează ca un sistem de fișiere temporar pentru procesele de sistem si kernel-ul Linux

/sbin – păstrează utilitarele Linux folosite doar de adminsitratorul de sistem (root). Aici găsim executabile critice pentru bootarea, restaurarea si repararea sistemului Linux

/usr/sbin – Aici se găssesc executabilele sistemului

usr/lib și usr/lib64– aici se găsesc librăriile software și pachetele pentru programe, inclusiv fișierele obiect si binare specifice platformei (în cazul nostru, Raspberry Pi cu al său Raspbian)

usr/local – locație pentru aplicațiile instalate local. Acest folder se poate share-ui în rețea

usr/share – aici se stochează fișierele read-only, independent de platformă

var/log – conține fișiere de date generate ca și loguri ale sistemului

BASH – sau interpretorul de comenzi pe care-l folosește Linux

Dacă in cazul Windows, putem să discutăm despre ușurința de folosire și mediul integrat Active Directory, în cazul Linux, putem vorbi despre puterea liniei de comandă – CLI. Ca și în cazul rețelelor de calculatoare, pentru firewall-uri, routere sau switch-uri, linia de comandă fiind acolo rege, dela Juniper la Cisco, același lucru se întâmplă pentru Linux, task-urile repetitive și plictisitoare se pot automatiza pe diferite tipuri de mașini, folosind accesul remote. BASH este un interpretor de comenzi, ce permite navigarea prin ultimele comenzi, și executarea acestora. În cadrul Bash, putem discuta de editoare de text, de verificarea proceselor ce rulează, și temporizarea anumitor evenimente, de exemplu cu ajutorul comenii cron. De asemenea, putem vedea serviciile care rulează (așa numiții daemon)

Comanda Uptime

Fără niciun parametru adițional, comanda se lansează, din linia de comandă

uptime

Figura 3.7.

Cum consumul mașinii este unul infim, meriă menționat că un Rasbperry Pi e excelent folosit ca mașină standalone, eventual diskless, pentru folosirea ca dispozitiv low-power NAS; eventual ca media server sau, ca în cazul proiectului de față., mașină pe care rulează raspberry Pi.

3.3. Linux și Internetul

Spre deosebire de Windows, care a fost gândit inițial ca mașină de lucru individuală, iar implementarea conexiunilor Internet sau locale s-a făcut greoi, în cazul Linux, sistemul de operare suportă conexiunile Internet si sharing-ul de fișiere ”from the ground up”. Acest lucru nu se face însă fără mici-mari dificultăți, după cum voi arăta la partea practică a proiectului.

Linux suportă direct TCP/IP, iar numele interfețelor în Windows este LAN area connection 1, 2 etc. În Linux, vorbim despre: eth0, eth1 s.a.md.

Raspberry Pi vine direct cu interfața Fast Ethernet, de 100 Mbps, suficientă pentru puterea procesorului instalat, dar evident că personal (și nu doar eu) mi-aș fi dorit interfețe USB 3.0, de viteză mai mare, precum și cel puțin o interfață gigabit 1 Gbps, asta pentru a putea asigura un Network Area Storage funcțional, la capacități adecvate anului 2015.

Evident, prețul dispozitivului ar fi urcat și el în acest caz, dar poate că ar fi meritat diferența de preț.

3.4. Principalele comenzi Linux folosite în comunicarea în rețea

Deși Microsoft Windows și în general interfețele grafice de care dăm la tot pasul în 2015 ne-au obișnuit cu reprezentări care de care mai împodobite și mai frumoase pentru lățime de bandă ocupată, widget-uri care ne arată vremea sau încărcarea procesorului, iar cantitatea de informație vizuală ajunge uneori la saturație (vezi efectele filmelor de multe, multe milioane de dolari), linia de comandă oferă un ajutor imbatabil celor implicați în rețelistică spre exemplu (Cisco și al său CLI fiind primul exemplu care-mi vine în minte). Evident, linia de comandă se găsește, de obicei bine ascunsă, și în Windows, unde un power user poate da liniștit un ipconfig, ping etc ca să investigheze, rudimentar cel puțin, starea rețelei. Troubleshooting-ul unei aplicații sau al unui joc PC ce refuză să se conecteze la server începe de la nivelul OSI de bază, și pentru a ajunge să spunem cu certitudine că există o problemă într-o aplicație, trebuie să ne asigurăm că totul e în regulă în ceea ce privește comunicarea la nivelele 1-3.

Următoarele utilitare Linux ne sunt de un real folos când e vorba de Raspberry Pi:

ping – comanda cea mai simplă pentru a verifica starea rețelei. Cu ajutorul ei, putem verifica dacă la un host putem ajunge sau nu. Hostul poate fi local sau de pe Internet. În cazul în care dorim să ajungem la Google, de exemplu, adresa IP este una publică, iar serverul DNS va translata în cifre partea scrisă de noi într-o formă ușor de reținut. Comanda ping trimite un pachet de date numit ICMP Echo_Request. În imaginea de mai jos putem vedea comanda ping, care trimte continuu pachete către google (82.77.159.98)

Figura 3.8.

Traceroute – afișează calea pe care pachetele o iau pentru a ajunge la un host, pas cu pas.

Figura 3.9.

netstat – afișează statistici legate de rețea

Figura 3.10.

3.5. Interfețele de rețea în Raspberry Pi 2

Pe lângă interfața de care am menționat anterior, și anume eth0, în exemplul pe care l-am ales, exista întotdeauna în Linux o interfață numită l0, interfață de loopback, care are aceeași funcție (și adresă IP cu 127.0.0.1)

În exemplul de mai jos, se poate vedea ping-ul către localhost (pe mașina Windows)

Figura 3.11. – PING către localhost (pe mașina Windows)

Pe mașina Linux:

Figura 3.12. – PING către localhost (pe mașina Linux)

3.6. Editarea fisierelor de configurare

Pentru a putea lucra in Raspberry Pi, pe langa comenzile pe care le introduc in terminal, mai am nevoie si de salvarea confguratiei pentru urmatorul reboot. Editarea se poate face fie cu ajutorul utilitarului vim, fie cu nano.

Personal, prefer nano deoarece mi se pare mai comod sa nu mai instalez vim sau alte editoare, iar volumul textului de editat este minuscul.

La pornirea nano, suntem intampinati cu un ecran foarte simplu, de exemplu la editarea fisiereului de confgurare al interfetei de retea:

Figura 3.13.

Editorul este WYSIWYG, ceea ce inseamna ca ceea ce vedem pe ecran este ceea ce va ramane in fisier ca si continut.

Principalele scurtaturi pe care le putem folosi in nano sunt, conform site-ului tuxradar[http://www.tuxradar.com/content/text-editing-nano-made-easy], dupa cum urmeaza:

Ctrl+X Exit – Iese din editor. Daca nu sunt salvate modificarile, se afiseaza un mesaj de atentionare

Ctrl+O Write (output) – bufferul cu continutul text curent e scris intr-un fisier. Se cere un nume de fisier, CTRL+T deschide un navigator fisiere

Ctrl+R  – citeste un nume de fisier in sesiunea curenta de editare. Read a text file into the current editing session. CTRL+T deschide si in acest caz navigator fisiere

Ctrl+K – taie o linie text, pe care-o pune in clipboard, adica memoria temporara. Ctrl+K se poate folosi de mai multe ori, pt a copia mai multe linii, ce sunt stocate ca o bucata de text

Ctrl+J Justify (fill out) – completeeaza un paragraf de text, pentru a a umple toata fereastra curenta a editorului.

Ctrl+U Uncut text, or rather, paste it from the clipboard. Note that after a Justify operation, this turns into unjustify.

Ctrl+T Check spelling.

Ctrl+W Find a word or phrase. At the prompt, use the cursor keys to go through previous search terms, or hit Ctrl+R to move into replace mode. Alternatively you can hit Ctrl+T to go to a specific line.

Ctrl+C Show current line number and file information.

Ctrl+G Get help; this provides information on navigating through files and common keyboard commands.

3.7. SSH si VNC. Accesul remote la Raspberry Pi

Pentru a putea accesa sistemul Raspberry Pi, cele mai folosite unelte în rețea sunt:

SSH

VNC

Pentru online, serviciul furnizat de weaved

Pentru accesul din rețeaua locală, se folosește utilitarul SSH, care permite conectarea securizată. Numele vinde de la Secured Shell, și acest serviciu rezolvă două probleme de securitate într-una singură: autentificarea hostului remote (și împiedică atacurile tip man-in-the middle), precum și criptarea tututor comunicațiilor între hostul local și remote. SSH consistă din două părți, un server SSH care rulează pe hostul remote, și ascultă mesajele ce-i vin pe portul 22, iar pe sistemul local, utilitarul putty, client SSH ce e folosit pentru a accesa serverul remote.

Accesul cu programul SSH prezintă însă un inconveninent pentru persoanele ce preferă o interfață grafică: SSH permite accesul doar în format text pe Rasbperry Pi. Pentru rezolvarea acestui mic inconvenient, am ales să folosesc accesul prin VNC. În cazul accesului remote, dar pe un sistem Windows, ar mai fi existat posibilitatea folosirii fie a utilitarului LogMeIn, fie a lui TeamViewer, fie folosirea utilitarului inclus în sistemul de operare, și anume RDP, adică remote Desktop. Însă, având în vedere faptul că VNC rulează foarte bine și cu resurse puține pe Raspberry Pi, am preferat instalarea acestuia.

3.7. Routerul ASUS N56U

Pentru accesul la Internet personal folosesc in reteaua de acasa routerul ASUS N56U. Producatorul ASUS a creat un produs care-mi permite folosirea retelei Internet la viteza ridicata pentru acasa. Caracteristicile acestui router sunt:

Porturi Gigabit pentur conexiunea local LAN

Port Gigabit pentru conexiunea WAN

Dual_Band pentru folosirea a doua retele wireless simultan, pe 2.4 si 5 Ghz.

NAT hardware

Peste 300.000 de conexiuni simultane disponibile teoretic

Meniul routerului este intuitiv si usor de folosit, iar faputl ca permite folosirea unei conexiuni 3G ca backup in cazul in care conxiunea principala este cazuta e un urias punct in plus. Avand in vedere aceste plusuri, routerul poate fi folosit chiar intr-o firma de mici dimensiuni, cum ar fi cabinet stomatologic, avocatura etc.

O facilitate extrem de utila pe care o ofera acest router este download master, un soft ce permite descarcarea torentilor cand calculatorul este oprit.

De asemenea, e posibila configurarea unui serviciu dynamic dns pentru acces din Internet. Problema, in cazul subsemnatului, este ca nu am acces la routerul Asus direct de pe net, din cauza media converterului Huawei instalat in casa, ce-mi ofera un IP nerutabil.

Figura 3.14.

Capitolul 4

APLICAȚII

4.1. Aplicația 1:

Accesul la Rasbperry Pi folosind reteaua locala, programul Putty si portul SSH 23.

Pentru accesul din rețeaua locală, am downloadat de pe pagina oficială utilitarul putty, care pe platforma Windows este cel mai utilizat pentru a lucra cu SSH, acesta permite conectarea securizată. Clientul putty rulează, conform specificațiilor, pe portul 22.

La prima conectare, asa cum am aratat, se afiseaza un mesaj de avertizare a utilizatorului, si se indica si cheia criptografica folosita pentru conectarea la serverul ssh care ruleaza pe Raspberry Pi. La urmatoarele conectari, in cazul memorarii conexiunii, acest mesaj de avertizare nu se mai afiseaza pe ecran.

Asa cum am facut si eu in cadrul acestui proiect, am salvat conexiunea cu IP-ul pe care l-am ales pentru Raspberry Pi, astfel incat sa nu mai fie necesara introducerea acestuia.

Figura 4.1.

Figura 4.2.

Figura 4.3.

Așa cum se poate vedea din figurile 4.1, 4.2, am reușit folosind utilitarul putty (figura 4.3 prezintă meniul acestuia) să mă conectez la un sistem din același subnet, fără nicio problemă.

Cum e de prefereat și accesul facil la interfața grafică, acesta se face cu ajutorul programului VNC, în cazul Windows, de pe pagina oficială. Există posibilitatea activării unei licențe pentru modul professional, care oferă acces la facilități extra, evident contra cost, după prima lună de acces gratuit.

Dacă pornirea utilitarului VNC de pe Microsoft Windows e foarte facilă, fiind nevoie numai de adresa IP și portul pe care rulează serverul VNC pe utilitarul Raspberry Pi, în cazul serverului VNC de pe acesta, e necesară instalarea folosind comanda apt-get.

Figura 4.4.

In figura de mai jos, putem vedea instalarea din Raspberry Pi cu ajutorul apt-get a serverului VNC. Ca toate comenzile de instalare din Linux, instalarea se face si in acest caz cu credentiale de root. Vom folosi:

sudo apt-get install tightvncserver pentru a instala aplicatia vnc

tighvncserver:1 pentru a porni serverul vnc in vederea accesului pe Raspberry. Portul implicit pe care se va face pornirea VNC este 5901

important e de știut e faptul că resetarea parolei de conectare la serverul vnc se face cu ajutorul comenzii: vncpasswd, urmată de alegerea unei parole noi, ce trebuie confirmată. Conectarea funcționează mai apoi fără nicio problemă.

Figura 4.5.

Figura 4.6.

Automatizarea pornirii serverului VNC si a posibilitatii conectarii prin SSH presupune:

fie editarea fisierului de configurare astfel incat adresa IP sa ramana pentru interfata eth0 aceeasi, fie folosirea unei alte modalitati in acest caz am folosit o alternativa, si anume alocarea din routerul ASUS N56 U a unei adrese IP fixa. In imaginea de mai jos, am afisat adresa IP si MAC a interfetei ETH0, corespunzatoare Raspberry Pi-ului.

Figura 4.7.

iamginea 4.8 arata configurarea, foarte simpla de altfel, a unui IP fix pentru Raspberry, pentru intefata eth0, folosind meniul LAN/DHCP Server:

Figura 4.8.

folosirea utilitarului raspi-config, specific platformei Linux Raspberry, pentru a putea automatiza startul serviciului SSH la pornirea sistemului:

Figura 4.9.

Figura 4.10.

Figura 4.11.

editarea folosind utilitarul nano a configuratiei de start pentru a automatiza pornirea serverului vnc, precum și a a setărilor pt wireless se face în felul următor:

Figura 4.12.

La pornirea sistemului e necesară rularea unui script, pe care l-am editat cu comanda nano /etc/init.d/tightvncserver, ce contine urmatoarele:

#! /bin/sh

# /etc/init.d/tightvncserver

#

# Carry out specific functions when asked to by the system

case "$1" in

start)

su pi -c '/usr/bin/vncserver'

echo "Starting VNC server "

;;

stop)

pkill vncserver

echo "VNC Server has been stopped (didn't double check though)"

;;

*)

echo "Usage: /etc/init.d/blah {start|stop}"

exit 1

;;

esac

exit 0

Figura 4.13.

În cele din urmă, e nevoie de pornirea de pe Internet a serviciului weaved. Pentru aceasta, am rulat din terminal comanda de instalare, de pe github

wget https://github.com/weaved/installer/raw/master/binaries/weaved-nixinstaller_1.2.13.bin

Figura 4.14.

Executabilul acum downloadat trebuie să aibă drept de scriere.

chmod +x weaved-nixinstaller_1.2.13.bin

După aceea, am rulat instalarea, nu înainte de a crea pe weaved.com un cont gratuit.

Figura 4.15.

Am creat un Alias pentru numele dispozitivului, mneidoniPi

Figura 4.16.

După cum installer-ul ne-a arătat în ultimul ecran, putem da următoarea comandă pentru a ajunge la Raspberry Pi cu weaved online:

sudo /usr/bin/Weavedssh22.sh start|stop|restart

În continuare, pe portalul: https://developer.weaved.com/portal/members/home.php, am putut vedea setările, un proxy și un port virtual pe care le-am folosit în programul Putty din Windows.

Evident, obișnuitul mesaj de avertizare a fost afișat pe ecran:

Figura 4.17.

Și success, am putut intra de pe Internet pe raspberry Pi:

Figura 4.18

Evident, cea mai simplă aplicație a acestui effort este posibilitatea de a accesa share-urile de pe PC_ul propriu, sau a ajunge la IP-urile din rețea.

O altă posibilitate este adăugarea accesului Web, respectiv a celui prin VNC. Pentru aceasta, am rulat iarăși comenzile de instalare, alegând opțiunea corespunzătoare fiecărui din aceste servicii.

Figura 4.19

Pentru serviciul online web, am ales numele dispozitivului ca mneidoniPiWeb, iar pentru cel prin VNC, am ales numele mneidoniVNC.

Deși serviciul online permite folosirea sesiunilor gratuite timp de maxim 30 de minute, acest interval de timp este arhisuficient pentru, de exemplu:

verificarea share-urilor de rețea de pe rețeaua Linux

pornirea calculatorului cu ajutorul Wake-On_Lan

reconfigurarea routerului propriu în cazul unei probleme sau nevoi, gen acces pentru un nou dispozitiv sau blocarea unui MAC corespunzător unui host

troubleshooting-ul rețelei pentru unul din membrii familiei, acest lucru poate fi de un real folos în cazul folosirii ca back-up pentru aplicații critice

Figura 4.21.

După realizarea instalării, la următorul restart dispozitivul poate fi accesat și cu ajutorul conexinii VNC, de fapt avem un tunel între clientul nostru de VNC și un proxy de pe Internet, așa cum putem vedea în imaginea de mai jos:

Și avem iar acces, și prin VNC:

Evident, aplicațiile pe care le permite placa de dezvoltare Raspberry Pi nu se limitează deloc la Wake-On-Lan. Spre exemplu, cu ajutorul unui sensor de temperature sau umiditate, un fermier își poate verifica de exemplu starea serelor, putând chiar să comande, cu ajutorul unor electrovalve acționate de relee udarea plantelor.

4.2. Aplicația 2: Modificarea și aranjarea unei poze cu ajutorul programului C#

Dacă în exemplul anterior, am configurat un dispozitiv Pi pentru acces de pe Internet,ce se întâmplă daca dorim să transmitem cuiva drag un mesaj, fără ochi iscoditori? Putem fie să încercăm să trimitem un mail, fie să folosim un serviciu de criptare. Cum folosirea unui browser ca TOR sau a unui Anonymizer pe Internet ne pune deja o etichetă ”suspicioasă” am ales să creez un mic program în C# care să-mi permit câteva manipulări rudimentare de imagine, dar și afișarea unui mesaj deja criptat cu ajutorul micului meu soft.

Pentru realizarea modificării imaginii m-am folosit de faptul că fiecare pixel dintr-o imagine BMP de exemplu are trei caracteristici, biții de culoare pentru R, G și B cu ajutorul cărora e reprezentată culoarea, dar si X și Y, adică mai precis coordonatele fiecărui pixel.

BIBLIOGRAFIE

CCENT/CCNA ICND1 Official Exam Certification Guide, Wendell Odom, 3rd Edition, CiscoPress

CCENT/CCNA ICND2 Official Exam Certification Guide, Wendell Odom, 3rd Edition, CiscoPress

Cisco Router and Switch Forensics, Jesse Varsalone, Syngress Publishing

C# Programming From Problem Analysis to Program Design 3rd Edition, Barbara Doyle. 2011, Cengate Learning

Microsoft Security Essentials, Darril Gibson, 2011, Sybex, Wiley Publishing

Site-ul official weaved https://developer.weaved.com/portal/members/betapi.php

Site-ul official RealVNC: https://www.realvnc.com/download/vnc/

Site-ul Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Site-ul Weaved: https://developer.weaved.com/portal/members/betapi.php

Site-ul https://developer.weaved.com/portal/members/home.php

11.

DECLARAȚIE DE AUTENTICITATE

A

LUCRĂRII DE FINALIZARE A STUDIILOR

Titlul lucrării

PROGRAMAREA UNUI SBC RASPBERRY PI PENTRU ACASĂ ȘI ÎN SCOP RECREATIV

Autorul lucrării NEIDONI MARCEL

Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea de Inginerie Electrică și Tehnologia Informației din cadrul Universității din Oradea, sesiunea Iulie 2015 a anului universitar 2014 – 2015.

Prin prezenta, subsemnatul (nume, prenume, CNP)_____________________

___________________________________________________________________

___________________________________________________________________,

declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.

Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.

Oradea,

Data Semnătura

Similar Posts

  • Terorismul Cibernetic la Nivel Global

    TERORISMUL CIBERNETIC LA NIVEL GLOBAL PLANUL LUCRĂRII Argument Introducere CAPITOLUL I. Cyberterorismul-terorismul cibernetic I.1.Starea de pericol cauzată de cyberterorism I.2.Potența actelor teroriste “convenționale” I.3.INTERNET-ul, mijloc de propulsare a islamismului I.3.1. Al Qaida si Statul Islamic – „Baza” virtuală I.3.2. Recrutarile și radicalizarea in spatiul virtual I.3.3.Tabere de antrenament virtuale ale gruparilor teroriste CAPITOLUL II. Utilizarea…

  • Procesul de Upgrade al Bazelor de Date Oracle

    Cuprins 1. Introducere………………………………………………………………………………………………… 4 2. Oracle RAC………………………………………………………………………………………………… 4 3. Upgrade și migrare……………………………………………………………………………………………………………………… 5 Lucrarea de față iși propune prezentarea procesului de upgrade al unei baze de date Oracle către versiunea 12c al acestui software, descrierea diverselor metode oferite pentru realizarea upgrade-ului precum și exemplificarea procesului pe o bază de date din cadrul unui Oracle Real…

  • Retea DE Microcalculatoare Pentru Informatizarea Unei Societati Comerciale

    CUPRINS Cuprins 3 CAPITOLUL I: Memoriu tehnic Necesitatea informatizării 4 Standarde existente 7 CAPITOLUL II: Standarde Ethernet 2.1 Încadrarea în model 11 2.1.1 Nivelul 1 din stiva de protocoale ISO/OSI 12 2.1.2 Nivelul 2 din stiva de protocoale ISO/OSI 14 2.2 Standardul 802.3 16 2.2.1 Nivelul fizic 16 2.2.2 Subnivelul MAC 17 2.2.3 Standardul Fast…

  • Realizarea Programelor de Retea Bazate pe Tehnologii Client Server

    Realizarea programelor de retea bazate pe tehnologii client- server CAPITOLUL I Note introductive A. Retele de calculatoare Impreuna cu imensul potential al numarului mare de computere precum si extinderea pe care o are acum Internetul, oamenii pot comunica liber, repede si cu folos. Sistemele deschise, orientate pe obiect, interfetele grafice, bazele de date si super…

  • Utilizarea Limbajului C In Aplicatii Economice

    CUPRINS Capitolul I- Introducere……………………………………………. 5 1.1.Necesitate………………………………………………….5 1.2.Mod de realizare. Obiective Cerințe. ……………………6 1.3.Structura lucrării…………………………………………8 Capitolul II- Specificații de contabilitate……………………………9 2.1. Aspecte lingvistice………………………………………..9 2.2. Specificații software………………………………………9 2.2.1.Probleme de terminologie…………………………….9 2.2.2.Specificații software definire………………………..11 2.3. Specificații contabile……………………………………13 2.3.1. Probleme de terminologie…………………………..13 2.3.2. Cadrul conceptual contabil…………………………18 Capitolul III- Platformă deschisă…………………………………28 3.1.Sisteme informatice deschise……………………………28 3.1.1. Definiția sistemelor informatice deschise…………28 3.1.2….