Programul de Licență : Calculatoare si Tehnologia Informatiei [601979]
Facultatea de Automatică și Calculatoare
Programul de Licență : Calculatoare si Tehnologia Informatiei
Aplicație pentru monitorizarea traficului în
rețele LAN și WLAN
Proiect de diplomă
Daniil -Cristian MANCU
Condu cător științific:
Prof. dr. ing. Sebastian FUICU
Timișoara,
2015
Cuprins
Capitolul 1 Introducere ………………………….. ………………………….. ………………………….. ………………. 5
1.1 Domenii de Abordare s i obiective generale ………………………….. ………………………….. ……… 5
1.2 Contextul de realizare ………………………….. ………………………….. ………………………….. ……….. 6
1.3 Structura documentației ………………………….. ………………………….. ………………………….. …….. 6
Capitolul 2 Date teoretice ………………………….. ………………………….. ………………………….. …………… 7
2.1 Rețele de calculatoare ………………………….. ………………………….. ………………………….. ……….. 7
2.1.1 Protocol in contextul rețelelor de calculatoar e ………………………….. …………………………. 7
2.1.2 Modelul OSI ………………………….. ………………………….. ………………………….. ………………. 9
2.1.3 Modelul Internet (Stiva TCP/IP) ………………………….. ………………………….. ……………… 10
2.1.4 Rețele LAN Ethernet ………………………….. ………………………….. ………………………….. …. 12
2.1.5 Rețele WLAN ………………………….. ………………………….. ………………………….. ………….. 12
2.1.6 Protocolul IP ………………………….. ………………………….. ………………………….. ……………. 13
2.1.8 Pachetele TCP si UDP ………………………….. ………………………….. ………………………….. . 13
2.1.7 Erorile de transmisie ………………………….. ………………………….. ………………………….. …. 14
2.1.8 Stabilirea comunicației ………………………….. ………………………….. ………………………….. . 15
2.2 Procesul de capturare al pachetelor ………………………….. ………………………….. ……………….. 15
2.3 Limbajul de programare C++ ………………………….. ………………………….. ……………………….. 16
2.3.1 Biblio teca QT ………………………….. ………………………….. ………………………….. …………… 16
2.3.2 Biblioteca Pcap ………………………….. ………………………….. ………………………….. ………… 17
Capitolul 3 Prezentarea generala a proiectului ………………………….. ………………………….. …………. 19
Capitolul 4 Proiectarea aplicației ………………………….. ………………………….. ………………………….. . 20
Capitolul 5 Implementarea aplicației ………………………….. ………………………….. ……………………… 21
5.1 Limbajul de programare s i biblioteci ………………………….. ………………………….. ……………… 21
5.2 Mediul de lucru ………………………….. ………………………….. ………………………….. ………………. 21
5.3 Structura interna a proiectului ………………………….. ………………………….. ………………………. 22
5.3.1 Biblioteca entity ………………………….. ………………………….. ………………………….. ……….. 22
5.3.2 Biblioteca exception ………………………….. ………………………….. ………………………….. ….. 25
5.3.3 Biblioteca gui ………………………….. ………………………….. ………………………….. …………… 27
5.3.4 Biblioteca logic ………………………….. ………………………….. ………………………….. ………… 28
5.3.5 Biblioteca util ………………………….. ………………………….. ………………………….. …………… 34
Capitolul 6 Utilizarea aplicației ………………………….. ………………………….. ………………………….. …. 34
6.1 Capturarea de pachete pe o interfața cu exteriorul ………………………….. ……………………….. 34
6.1.1 Selectarea interfeței de capturare ………………………….. ………………………….. …………….. 35
6.1.2 Pornirea capturării ………………………….. ………………………….. ………………………….. …….. 35
Capitolul 1 Introducere
Domeniul rețelelor de calculatoare este unul vast si într -o continua evoluție. Încă de la începutul
dezvoltării obiectelor computaționale, s -a văzu t nevoia de comunicație intre astfel de dispozitive.
Pornind de o curiozitate academica încă de prin anii 19 50, acestea au ajuns sa dev ina astăzi un element
major in cadrul științei calculatoarelor. Totuși domeniul rețelelor de calculator este tânăr si înc ă rămâne
un domeniu in care se poate cercetare pentru îmbunătățirea lui.
Printre primele rețele de succes este rețeaua SAGE(Semi -Automatic Ground Enviromment). Ea a
devenit operaționala la sfârșitul anilor 1950 si reprezenta un sistem complex de calculato are,
echipamente periferice de rețea si echipamente radar. Ea avea rolul de a monitoriza spațiul aerian
american si de a crea o imagine de ansamblu al obiectelor din spațiul aerian. A fost dezvoltat datorita
războiului rece, dar rămâne in istorie ca unele dintre primele rețele de calculatoare.
Precursorul Internetului este rețeaua ARPANET (Advanced Research Projects Agency Network ).
Ea este prima rețea ce folosea comutarea de pachete. Comutarea de pachete presupune transmiterea
datelor prin intermediul unei succesiuni de mesaje partajând resursele rețelei.
In momentul de fata, rețeaua cea mai răspândita este Internetul. El reprezintă cel mai complex
sistem de interconectare si reușește ca conecteze dispozitive in ordinul miliardelor. Spre deosebire de
celela lte rețele, Internetul este descris ca fiind o rețea de rețele, in componenta lui intrând cele private,
publice, academice, guvernamentale si multe altele.
Odată cu creșterea domeniului rețelelor de calculatoare, a crescut si complexitatea rețelelor . Cu
creșterea complexității creste si posibilitatea apariției erorilor dar si dificultatea găsirii unor astfel de
probleme. Desigur o rețea bine plănuita știe sa ia in calcul astfel de erori si, mai mult, știe sa corecteze
o buna parte al acestora. In ajutorul u nui proiectant de rețele vine pe lângă experiența anterioara sau
metode specifice de plănuire si diferite programe pentru depanarea, monitorizarea si analiza
elementelor rețelei .
1.1 Domenii de Abordare si obiective generale
Domeniile abordate in acesta lu crare cuprind atât partea de rețelistica, telecomunicații si
tehnologia informațiilor cat si domeniul aplicațiilor de calcularea, interfețe grafice si sisteme de
operare. Fiecare dintre aceste domenii sunt vaste, iar documentul acesta nu este îndeajuns pen tru a
acoperii întreaga arie de studiu al domeniului. Este atins totuși fiecare domeniu si pe parcursul lucrării
vom descrie fiecare concept si cum intra in componenta aplicației.
In contextul teoretic, acest document prezinta elementele de baza ale unei r ețele, prezenta metode
de analiza a traficului într -o rețea cat si analiza performantelor unor rețele locale(LAN) cat si al
rețelelor locale fără fir. In contextul aplicativ, vom descrie arhitectura aplicației , părțile ei componente,
implementarea algoritm ilor si contexte de folosire al programului .
Obiectivul final al proiectului este de a prezenta utilizatorilor aplicației detalii despre rețea prin
capturarea mesajelor transmise, prin analiza proprietăților conexiunii si prin monitorizarea diferiților
factori de performanta.
1.2 Contextul de realizare
In domeniul de abordare al proiectului exista deja o suita de aplicații si sisteme pentru
managementul rețelelor. Fie ca vorbim despre aplicații de setare sau monitorizare, acestea oferă
posibilitatea de anal iza complexa a sistemelor astfel încât sa un utilizator deține controlul complet al
rețelei . Astfel de programe necesita un grad destul de mare de cunoaștere al teoriei din spatele
domeniului si o oarecare experiența in folosirea lor.
Acest proiect a fost realizat in contextul lipsei unei aplicații care sa ofere o suita de utilitare ce
înglobează atât posibilitatea captării mesajelor transmise si recepționate dintr -o rețea cat si posibilitatea
analizei performantelor rețelei in timp real.
1.3 Structura doc umentației
Documentația este structurate in doua parți independente:
Partea Teoretica : in acesta vom atinge subiectele cele mai relevante proiectului pe care
îl descriem. Vom aveam explicații in ceea ce privește rețelele de calculatoare, arhitecturi
de re țele de calculatoare, rețeaua Internet, protocoluri folosite in rețeaua Internet si analiza
rețelelor si al pachetelor transmise într -o rețea. Vom mai avea si descrieri teoretice pentru
limbajul de programare C++ si despre bibliotecile utilizate in proiect .
Partea Aplicativa : in acesta parte vom analiza in detaliu părțile componente ale rețelei,
interconexiunile in diversele module, implementarea din interiorul funcțiilor si cum poate
fi utilizata aplicația.
Capitolul 2 Date teoretice
2.1 Rețele de calculato are
Conceptul de rețea nu este unic domeniului calculatoarelor. O rețea reprezintă orice structura ce
conectează doua sau mai multe obiecte. Ca exemplu putem menționa rețeaua de telefonie sau rețeaua
de canalizare.
Orice rețea are in componenta ei următoar ele elemente: doua sau mai multe obiecte numite noduri,
pe care rețeaua le conectează; un set de drumuri numite canale, prin care se transmit date intre noduri
si un set de reguli pentru controlul datelor . In cazul rețelelor de calculatoare, nodurile sunt reprezentate
de calculatoare, canale de comunicare reprezintă mediul fizic de transmisie al datelor care poate sa fie
reprezentat de fire sau unde radio, iar setul de reguli in reprezintă protocoale. Un protocol reprezintă
acel set de reguli ce permit comu nicarea intre doua sisteme de comunicare cu scopul final de a primi
de transmite informații.
Pe lângă elementele principale ce definesc o rețea, exista si un set de cerințe pentru definirea
corecta a unei rețele :
Să asigure o conectivitate generala;
Să fie eficienta sub aspectul costurilor;
Să fie corecta;
Să fie robusta;
Să asigure performante mari pentru un număr mare de utilizatori ;
Să răspundă cerințelor ce vin din partea aplicațiilor;
Să evolueze in timp pentru a se adapta modificărilor de tehnologie .
Pentru a simplifica problema proiectării, s -au creat modele generale denumite arhitecturi de rețea .
Ele ghidează proiectarea si implementarea arhitecturilor de rețea. Exista doua tipuri importante de
arhitecturi de rețea:
Modelul OSI;
Modelul Internet.
2.1.1 Protocol in contextul rețelelor de calculatoare
Pentru a putea înțelege conceptele de capturare al pachetelor, trebuie mai întâi sa înțelegem modul
de comunicare intre calculatoare.
Comunicația intre doua calculatoare poate începe când este realizata o conexiune fizica. Daca
avem de -a face cu o comunicație intre un calculator si un periferic sau intre 2 calculatoare aceasta se
poate realiza printr -o singura conexiune, si vom ști ca date se vor transmite de la unul la celălalt. O
astfel de conexiune nu ne cesita nici o forma de adresare sau rutare pentru ca pachetele de date vor
ajunge tot timpul de la unul dintre utilizatori la celălalt, iar aceasta conexiune rămâne pana in momentul
in care legătura fizica este deconectata. Acesta metoda de conexiune nu es te eficienta într -o rețea
complexa conținând o multitudine de destinatari si transmițători datorita alocării ineficiente al
resurselor. Prin resurse neutilizate înțelegem legături intre doua calculatoare prin care nu sunt
transmise date in anumite interval e de timp.
Alternativa presupune utilizarea unui sistem de rutare al pachetelor. Un astfel de sistem implica
existenta unui centru de rutare a cărui scop este de a primi mesaje si de ale transmite mai departe
destinatarului atunci când conexiunea către ace sta este libera. Sistemul este cunoscut sub numele de
stocare si transmitere. O rețea bine conceputa prin prisma traficului din sistem va avea latente foarte
mici in privința timpului de așteptare pentru transmisie. Pentru o rețea foarte mare un pachet va trece
prin mai multe centre de rutare.
Rețele moderne au incorporate o mulțime de sisteme, fiecare cu configurări si componente
diferite, rulând pe o multitudine de platforme. Pentru a permite o comunicare intre diferite tipuri de
sisteme, s -a decis defin irea unor interfețe, in domeniul relelor de calculatoare având numele de
protocoale, având ca scop ușurarea transmiterii de mesaje intre sisteme si in același timp având
posibilitatea integrării de noi sisteme.
Pentru a îmbunătății performantele rețele put em sa împărțim mesajele de o anumita dimensiune
in mesaje având o dimensiune maxima si un număr de identificare pentru stabilirea ordinii mesajelor.
Mesajele având o lungime maxima specificata se numesc, in termenii rețelelor de calculatoare, pachete
sau c adre.
Un mare avantaj al acestei metode de transmisie este faptul ca un mesaj complet, de o dimensiune
considerabila, nu trebuie sa parcurgă același traseu pana la destinatar, pachetele fiind transmise pe rute
care sunt neutilizare in momentul respectiv. O informație vitala ce trebuie inclusa într -un pachet este
adresa mesajului. Acesta adresa este unica si este folosit de mecanismul de directare a pachetelor
pentru determinarea caii de transmisie.
Pe lângă adresa, alte informații atașate pachetului sunt co durile de verificare a erorilor ce asigura
integritatea mesajului, numărul din secvența ce reprezintă bucata de masaj din mesajul inițial si alte
bucăți de informații in funcție de protocol. Acestea sunt atașate mesajului fie înaintea, fie după
informația utila.
In cele mai multe cazuri, nu este de ajuns utilizarea unui singur protocol, fiind necesara definirea
a mai multor protocoale pentru o grupare logica a informațiilor necesare transmiterii.
Când complexitatea rețelei este ridicata se prefera împărțire a acestuia in mai multe nivele de
abstractizare. Prin abstractizare se urmărește definirea unui model care sa poată sintetiza un aspect
important al sistemului, înglobarea modelului intru -un obiect care sa furnizeze o interfața manipulabila
de către alte c omponente din sistem si ascunderea detaliilor de implementare ale obiectelor fata de
utilizatorii acestuia.
Abstractizarea conduce in mod natural la stratificare in cazul rețelelor. Se pornește de la serviciile
oferite de către echipamentele de baza si se adaugă o secvența de starturi. Fiecare strat oferă un set de
servicii mai ridicat. Stratificarea oferă doua facilitați importante: dezvoltarea unei rețele se
descompune in componente ușor de controlat si se asigura o proiectare modulara. Obiectele abstract e
care alcătuiesc starturile unei rețele se numesc protocoale .
Un protocol asigura un serviciu de comutație pe care obiectele de nivel mai ridicat le folosesc
pentru a realiza schimbul de mesaje. Fiecare protocol folosește doua interfețe distincte:
Service Interface: reprezintă interfața cu celelalte obiecte din stiva;
Peer Interface: reprezintă interfața către omologul sau de pe același nivel dar de pe un alt
sistem.
Doar la nivel hardware, echipamentele omoloage comunica direct unele cu altele. In rest fi ecare
protocol comunica indirect cu perechea sa de pe același nivel. Pentru a transmite un mesaj, acesta este
transferat protocolului de pe nivelul inferior, care încerca sa livreze mesajul către perechea sa.
2.1.2 Modelul OSI
Protocoalele sunt separate in funcție de scopul lor folosind drept referința un model de
standardizare definit de către organizația internaționala de standardizare(ISO) numit si modelul
OSI(Open System Interconnection). Acest model împarte procesul de comunicație in 7 nivele distincte :
Nivelul Aplicație ;
Nivelul Prezentare;
Nivelul Sesiune;
Nivelul Transport;
Nivelul Rețea ;
Nivelul Legătura de date;
Nivelul Fizic.
Mai jos avem un grafic cu elementele din modelul OSI. Atunci când o aplicație dorește sa trimită
un mesaj, date vor merge d e sus in jos, mergând de la nivelul aplicație pana la nivelul fizic, fiecare
protocol încapsulând datele, si va merge prin canalul de comunicație pana la destinatar. La destinatar,
datele încapsulate parcurg modelul de jos in sus, fiecare încapsulare fiind scoasa din mesaj la fiecare
nivel corespunzător.
Figura 2.1 Modelul OSI
Acum vom analiza in parte fiecare dintre abstractizările fon modelul OSI:
Nivelul Aplicație : este cel mai înalt nivel al modelul si oferă utilizatorului posibilitatea de
a folosi re sursele rețelei. In cele mai multe cazuri, utilizatorul va folosi doar acesta
interfața, restul detaliilor fiind ascunse;
Nivelul Prezentare : transforma datele primite intr -un format care poate fi citit de către
nivelul aplicație. Tot la acest nivel sunt p relucrate câteva forme de criptare si decriptare a
datelor.
Nivelul Sesiune : se ocupa cu stabilirea dialogului intre doua calculatoare; stabilește,
verifică si oprește conexiunea. Acesta reprezintă o modalitate de sincronizare a
comunicației intre 2 proces e care comunica de la distanta.
Nivelul Transport : principala responsabilitate a acestui nivel este de a oferii nivelurilor
superioare date corecte. Acest lucru se realizează prin segmentarea si compunerea
mesajelor, asigura ordinea mesajelor si de asemene a realizează un control al fluxului de
date.
Nivelul Rețea : este responsabil de rutarea datelor intre mediile fizice si este unul dintre
cele mai complexe nivele din model. Printre responsabilități mai enumeram si adresarea,
identificarea protocoalelor si , cate odată si verificarea erorilor.
Nivelul Legătura de Date : definește moduri de transport in cadrul rețelei. Oferă o schema
de adresare care este folosita pentru identificarea dispozitivelor fizice. Pe lângă cele
menționate avem si partea de verificare a integrității datelor.
Nivelul Fizic : aflat la baza modelului, el reprezintă mediul de transmisie al datelor. Toate
detaliile legate de implementarea hardware si electrică sunt realizate pe acest nivel.
Modelul OSI nu mai este standard recomandat in indu strie, iar dezvoltatorii de rețele nu trebuie
sa respecte in totalitate graficul menționat. In momentul de fata exista stiva TCP/IP care este cel mai
răspândit model de rețea, iar de cele mai multe ori, se va lua in considerare structura ce o oferă acesta.
2.1.3 Modelul Internet (Stiva TCP/IP)
Stiva TCP/IP sau modelul Internet reprezintă un model ce definește un set de protocoale de
comunicare folosita in rețelele moderne de calculatoare. Rețeaua Internet folosește acest model, de
unde si provenința numel ui. Este numita stiva TCP/IP deoarece acestea sunt cele mai importante
protocoale pe: TCP – Transmission Control Protocol si IP – Internet Protocol, si pentru ca au fost
primele protocoale definite in acest standard. Inițial era denumit modelul DoD, deoare ce a fost rețeaua
departamentului de apărare al Statelor Unite ale Americii.
Câteva dintre facilitățile importante ale stivei TCP/IP o reprezintă lipsa unei stratificări fixe. O
aplicație poate sa ignore nivelul transport si sa facă apel direct la nivelul Internet, sau daca exista
posibilitatea la nivelul acces la mediu. Dar cea mai importanta proprietate o reprezintă folosirea
nivelului Internet. Acesta reprezintă punctul focal al întregii arhitecturi Internet, prin definirea de unei
metode comune de schi mb de pachete pentru in număr foarte mare de rețele.
Figura 2.2 Diferențele intre cele doua modele definite
La fel ca si la modelul OSI, vom definii in parte funcționalitățile fiecărui modul:
Nivelul Aplicație : are același rol ca si in modelul OSI, de de finire al unei interfețe cu
utilizatorul ce dorește sa folosească rețeaua.
Nivelul Transport : cele mai importante servicii pe care le poate oferii nivelul transport
sunt: un serviciu orientat pe conexiune, fără erori, care furnizează octeți in ordinea in c are
au fost transmiși (TCP) si un serviciu ce nu oferă nici o garanție asupra ordinii in care vor
fi recepționate datele(UDP).
Nivelul Internet : pe acest nivel exista doar un singur protocol si anume protocolul IP. Tipul
de serviciu pe care îl oferă este de tipul comutare de pachete. Pachetele încapsulează date
si sunt dirijate in mod independent unele fata de altele către destinație.
Nivelul Acces la mediu : Pe acest nivel nu este definit un anume protocol. Ideea de baza
consta in faptul ca pe acest nivel fo r fi acceptate o mulțime de protocoale de vor folosi
standardul IP.
Figura 2.3 Stiva TCP/IP si diverse protocoluri pentru diferite nivele
2.1.4 Rețele LAN Ethernet
Ethernet a fost introdus de prin anii 1970 ca si o metoda de a conecta multiple echipament e si
calculatoare intr -o singura clădire . El oferă câteva avantaje semnificative: este rapid, flexibil , ușor de
instalat si ieftin. El a devenit un standard in industrie, ajungând astăzi ca mai mult de 85% din toate
rețelele locale(LAN) sa utilizeze Ethern et pentru legătura fizica dintre calculatoare.
Preambul Start
Delimitator Adresa MAC
al
destinatarului Adresa MAC al
transmițătorului Tipul Date CRC
Figura 2.4 Structura unui cadru Ethernet
In figura 2.4, cu albastru avem hederul cadrului Ethernet. Acest a încapsulează datele
informaționale si este identificat cu ajutorul delimitatorului ce semnalează începerea cadrului.
Analizând fiecare element avem:
Preambul : are dimensiunea de 7 byți, care formează un tipar ce arata astfel: 10101010 .
Rolul acestui câmp este de a sincroniza pulsul;
Startul cadrului : are rol de a semnala ca informația critica începe din acest moment. Are
dimensiunea de 1 byte si are același tipar precum preambul, cu excepția ultimilor 2 biți ce
for fi tot timpul 1;
Adresa MAC a destinatar ului: reprezintă adresa MAC a dispozitivului următor din rețea,
pentru transmisie.
Adresa MAC a transmițătorului: reprezintă adresa MAC a ultimului dispozitiv ce a trimis
mesajul. Fiecare dintre adrese sunt pe 6 byți;
Tipul: reprezintă tipul mesajului ce e ste transportat. Are dimensiunea de 2 byți;
Date: reprezintă partea cea mai importanta a mesajul si reprezintă datele efective. Acesta
parte poate avea dimensiune de la minim 46 de byți pana la 1500 de byți.
CRC(Cyclic redundancy check): este un număr ce ajuta controlerul de rețea sa determine
daca pachetul conține erori.
2.1.5 Rețele WLAN
Principala particularitate al rețelelor WLAN este aceea ca folosesc undele radio pentru transmisia
radio. Undele radio au proprietăți total diferite fata de celelalte m edii fizice folosite in comunicațiile
de date:
Este un mediu fără o delimitare bine definita;
Nu este protejat fata de interferente;
Are o topologie ce se poate modifica ușor;
Modul de propagare a semnalelor poate varia in timp si poate prezenta asimetrii .
Rețelele WiFi, cum mai sunt nu numite, include date suplimentare de confirmare al transferului,
astfel ca viteza de transfer este de cele mai multe ori mai înceata decât in cazul Ethernet.
Rețelele fără fir au început sa fie dezvoltate de la sfârșitul anilor 1990. Primul standard IEEE este
standardul 802.11A si 802.11B. Pe urma a devenit valabil standardul 802.11G si mai recent 802.11N.
Problema importante este ca nu exista compatibilitate intre standarde. Astfel, la nivel hardware, au fost
integrate dif erite module ce suporta fiecare standard.
2.1.6 Protocolul IP
Serviciul oferit de către protocolul IP conține doua componente: o schema de adresare care
permite identificare tuturor clienților interconectați; si un model de transfer al datelor, de tip datagrama,
fără conexiune, numit si „best effort”. Prin „best effort” înțelegem faptul ca daca pachetul se pierde,
sau est afectat de eroare, nu se face nimic pentru recuperarea lui. Păstrarea simplității reprezintă scopul
principal al protocolului IP.
Bit 0 -7 Bit 8 -15 Bit 16 -23 Bit 24 -31
Versiunea Lungimea
Heder Tipul de serviciu Lungimea totala
Identificarea Flags Fragment Ofset
Timpul de păstrare Protocol Checksum
Adresa IP a sursei
Adresa IP a destinației
Figura 2.5 Formatul uni pachet IP
Acum vom analiza in parte fiecare element aparținând pachetului:
Versiunea : Versiunea protocol ului, exista in momentul de fata doua versiuni ale
protocolului;
Lungime Heder : după cum reiese si din nume, acesta este lungimea exprimata in octeți a
hederului;
Tipul de serviciu : octet ce are in componenta lui câteva opțiuni pentru ce pachet transporta;
Lungimea totala : reprezintă lungimea întregului pachet.
Identificare, Flags si Fragment Ofset : aceste câmpuri sunt folosite in procesul de
fragmentare al pachetelor;
Timpul de păstrare: reprezintă numărul maxim de hop -uri prin care poate trece un pachet;
Protocol: reprezintă protocolul încapsulat de IP;
Checksum: suma de control pentru verificarea erorilor;
Adresa IP a sursei: adresa nodului care a trimis pachetul;
Adresa IP a destinației : conține adresa nodului căruia ii este destinat pachetul;
2.1.8 Pach etele TCP si UDP
Protocolul TCP, pe lângă protocolul IP, reprezintă elementul de baza in dezvoltarea stivei TCP/IP.
Este un protocol aflat pe nivelul transport al stivei, si oferă un serviciu relabil si ordonat pentru
transmisia datelor intre aplicații. Pr intre aplicațiile ce folosesc acest protocol se numără World Wide
Web, email si transferul de fișiere.
Bit 0 -7 Bit 8 -15 Bit 16 -23 Bit 24 -31
Portul sursa Portul Destinație
Numărul de secvența
Numărul de recunoaștere
Lungime Heder Flags Fereastra
Check sum Pointer Urgent
Opțiuni
Date
Figura 2.6 Formatul unui pachet TCP
Portul sursa si portul destinație reprezintă numărul folosit de către aplicația care rulează pe mașina
care trimite, respectiv primește pachete. Numărul de secvența este folosit pentru numerotarea fiecare
octet trimis. Când se inițiază o comunicație intre doua mașini, numărul de secvența reprezintă un număr
aleatoriu si este incrementat cu trimiterea fiecărui pachet. Numărul de recunoaștere este folosit pentru
a confirma octeții recepțio nați. Lungimea heder reprezintă dimensiunea hederului exprimata in cuvinte
de 32 de biți. Fereastra reprezintă spațiul disponibil in zona tampon de recepție.
Bit 0 -7 Bit 8 -15 Bit 16 -23 Bit 24 -31
Portul sursa Portul Destinație
Checksum Pointer Urgent
Date
Figura 2.7 Formatul unui pachet UDP
Protocolul UDP este un protocol minimalist, si este folosit pentru transmisia de streaming, când
nu este necesara ca integritatea datelor sa fie 100% corecta.
2.1.7 Erorile de transmisie
Într-un mediu perfect, semnalu l de transmisie al mesajul ajunge la celălalt capăt identic cu mesajul
inițial. In lumea reala acest lucru nu este posibil si mesajul va ajunge la destinatar puțin diferit fata de
cum a fost văzut la transmițător. Fenomenul responsabil de inducerea de eror i in mesajul transmis
poarta denumirea de zgomot. Zgomotul poate provenii din diverse surse: fenomene naturale, alte
dispozitive de comunicare, dispozitive ce funcționează incorect, contactele electrice si așa mai departe.
Într-o lume in care sunt transmis e un număr foarte mare de date, pana si un singur bit poate sa duca la
coruperea întregului mesaj aducând la pierderea de informație.
Datorita riscului foarte mare, s -a introdus o metode de verificare a mesajului, proces numit
verificare de eroare. O metod a simpla de verificare a mesajului este metoda verificării bit -ului de
paritate. acest bit de paritate reprezintă o suma a biților din mesaj. Astfel daca mesajul conține un
număr impar de biți, el va avea valoarea '1' respectiv '0' pentru un număr par de b iți. Rețele cu
transmisie fără fir realizează verificări suplimentare asupra integrității mesajului.
Rețelele moderne conțin metode mult mai avansate de verificare si inclusiv corectarea al erorilor,
dar analiza lor nu reprezintă scopul acestei lucrări.
2.1.8 Stabilirea comunicației
Într-un paragraf anterior am menționat faptul ca pentru o rețea ce implica doar doua calculatoare
nu este necesar adăugarea unor logici complexe deoarece nu pot exista interferente, mesajele se
transmit doar intre cei doi partic ipanți si nu este necesara terminarea comunicației chiar daca nu sunt
transmise informații. Legătura fizica este inițiata de către utilizatorul rețelei si sie care vor fi
participanții si ce mesaje vor interschimbate.
In cazul unei rețele complexe nu este posibila stabilirea unei conexiuni imediate intre doua noduri
datorita motivelor legate de securitate sau eroare. Pentru ca doua noduri sa comunice, trebuie ca mai
întâi transmițătorul sa anunțe destinatarul ca va iniția o conexiune, iar destinatarul poate accepta sau
nu acesta cerere de la transmițător. Destinatorul va trimite si el mesaje transmițătorului de notificare
cum ca au fost recepționate mesajele si ca nu conțin erori. In caz de eroare, mesajele mai pot fi trimise
încă odată.
2.2 Procesul de capt urare al pachetelor
Analiza pachetelor descrie procesul de capturare si interpretare al datelor așa cum sunt in rețea.
Motivul pentru analiza pachetelor din rețea este de a cunoaște mai bine caracteristicile rețelei,
determinarea utilizatorilor activi dint r-o rețea si identificarea atacurilor malițioase.
Procesul de capturare al pachetelor poate fi împărțit in 3 pași:
Colectare;
Conversie;
Analiza.
Primul pas in reprezintă colectarea pachetelor, iar acest proces se realizează prin selectarea
interfeței de c omunicație cu rețeaua in modulul promiscuu. In acest mod de funcționare, controlerul de
interfața cu rețeaua va trimite pachetele recepționate unității centrale, dar vor fi si procesate de către
modulele speciale pentru procesarea lor. Un analizator de pac hete se folosește de acest mod de lucru
pentru a vedea pachetele așa cum sunt in rețea.
Al doilea pas in procesul de capturarea in reprezintă conversia. In acest pas, datele colectate sunt
convertite intr -o forma lizibila.
Al treilea si ultim pas in reprez intă analiza asupra pachetelor capturate. Acest pas este dependent
de necesitățile utilizatorului. Aici un utilizator poate filtra pachetele capturate pentru a detecta un
program malițios sau sa verifice ce utilizatori folosesc cele mai multe resurse sau a lte analize.
2.3 Limbajul de programare C++
Limbajul C++ este un limbaj de programare orientat pe obiecte dar include si facilitați de
manipulare a memoriei, moștenită din limbajul C. Posibilitatea de a lucra atât la nivel apropiat de
hardware cat si utili zarea unor facilitați specifice limbajelor orientate pe obiecte îl face popular atât in
sistemele embedded cat si in aplicații desktop.
Codul C++ este compilat, iar rezultatul compilării îl reprezintă un cod executabil specific pentru
arhitectura pentru ca re a fost for compilat. Datorita faptului ca codul este optimizat pentru arhitectura
pentru care este destinat, programele scrise in C++ sunt foarte rapide si reușesc sa se folosească de
resursele oferite de sistem.
Diferențele fata de limbajul de programa re Java îl constituie faptul ca executabilul generat in urma
compilării , nu necesita o componenta speciala pentru a virtualiza interfața hardware a sistemului.
Programele Java pot rula doar pe sistemele ce au instalate Mașina Virtuala Java.
Dezvoltarea lim bajului C++ a fost făcută de către Bjarne Stroustrup in perioada 1983 -1985 la
Laboratoarele AT &T. Autorul a dorit o îmbunătățire a deja existentului limbaj C, motiv pentru care,
acest limbaj este ales ca baza pentru C++.
Așa cum este dedus si din nume, lim bajul C++ reprezintă un increment sau o îmbunătățire al
limbaju lui C, principala îmbunătățire reprezentând adăugarea conceptelor de programare orientata pe
obiecte . Prima standardizare a avut loc in anul 1998, iar ultima versiune a fost publicata de ISO in
Decembrie 2014, fiind cunoscut sub numele de C++14.
2.3.1 Biblioteca QT
Exista numeroase motive pentru succesul limbajului de programare Java fata de C++, iar printre
ele putem enumera simplitatea sintaxelor, utilizarea unui mecanism de ștergere al pointe rilor ce nu mai
sunt folosiți, fără a fi necesara intervenția utilizatorului, un set de clase pentru implementarea
interfețelor cu utilizatorul si multe altele.
Toate aceste beneficii pot fi utilizate si in C++ prin folosirea bibliotecii QT. Printre benef iciile
utilizării acestei biblioteci putem menționa : existenta unei librarii pentru construcția de interfețe grafice
ce oferă o mult mai mare flexibilitate fata de biblioteca Swing din Java. Un alt beneficiu major îl
reprezintă mecanismul de semnale si slo turi ce reprezintă o mult mai flexibila si ușoara utilizare a
mecanismului de ascultare("Listener") din Java.
Folosind limbajul C++ împreuna cu biblioteca QT putem crea aplicații foarte rapide cu aceeași
ușurința cu care putem crea aplicații scrise in Java . Avantajul vitezei si al eficientei fac aplicațiile C++
ideale pentru procesarea pe un număr mare de date, pentru lucrul cu rețele dar si pentru procesarea
rapida a calculelor intr -un joc cu multe elemente grafice.
Acesta biblioteca a fost dezvoltata de către compania QT, o subsidiara a companiei Digia Plc. Ea
este responsabila de toate activitățile legate de dezvoltarea cadrului de dezvoltare, comercial izarea
acesteia si licențierea .
Dezvoltata începând din anii 1994, ea se bucura de o utilizare larga in numeroase companii
dezvoltatoare de aplicații software pe calculatoarele personale, pe sistemele incorporate cat si pentru
aplicațiile mobile. Ea se lauda ca fiind folosita in peste 250 de companii multinaționale din aproape
toate segmentele de dezvoltare precum industria automobila, industria electronica, medicala, in
domeniul animației , cea de divertisment si multe altele.
2.3.2 Biblioteca Pcap
In domeniul administrării rețelelor de calculatoare, PCAP constituie o librărie ce oferă aplicațiilor
o interfa ța pentru capturarea traficului dintr -o rețea. Pentru sistemele Unix este definita librăria libpcap,
iar mașinile Windows folosesc un port al acesteia cunoscuta sub numele de WinPcap.
Acesta biblioteca este scrisa in limbajul de programare C. Astfel daca se dorește utilizarea
bibliotecii in alte limbajele de programare precum Java sau limbajele .NET trebuie sa definească clase
înviletoare peste interfața bibliotecii. Limbajul C++ are avantajul ca poate sa folosească direct funcțiile
dintr -o biblioteca C.
Capitolul 3 Prezentarea generala a proiectului
Principala utilitate a proiectului aplicativ este cea de snifuire a pachetelor dintr -o rețea TCP/IP
indiferent de interfața de comunicare dintre calculator si Internet. Pe lângă acesta, aplicația oferă si
posibilitatea a fișării informațiilor despre interfețele WLAN disponibile in calculator. Informațiile
afișate sunt de la SSID pana la valoarea efectiva in decibeli a puterii semnalului de la diferite puncte
de acces. O a treia utilizare a aplicației este cea de generare d e grafie pentru rata de transfer sau pentru
puterea semnalului punctului de acces conectat.
Figura 3.1 Fereastra principala a aplicației atunci când este deschisa prima oara.
Aplicația dispune de o interfața grafica cu care utilizatorul poate interacțion a, si a executa diferite
operații de capturare si analiza a rețelelor . Limba in care este prezentata aplicația este limba engleza,
pentru a putea fi folosită de care un număr destul de mare de utilizator. De asemenea, interfața este
intuitiva , utilizatoru l putând sa înțeleagă foarte ușor cum funcționează mecanismele de capturate.
Modurile de lucru ale programului sunt afișate in partea dreapta, acesta constituind consola
aplicației, făcând separarea intre modurile de funcționare ale aplicației. Partea de c aptura asculta pe
canalul de comunicare si ne indica pachetele ce au traversat prin controlerul de rețea. Partea a doua o
reprezintă partea de afișare al informațiilor legare de punctele de acces disponibile in apropierea
controlerului de rețea fără fir. A treia parte analizează numărul de pachete ce traversează prin controler
si afișară un grafic cu evoluția. De asemenea poate fi analizata si puterea semnalului punctului de acces
la care este conectat un anumit controler, tot printr -un afișaj grafic sub f orma unei diagrame.
Aplicația este destinata atât depanatorilor de rețele dar si utilizatorilor e doresc sa afle informații
despre rețelele de calculatoare si cum sunt văzute pachetele dintr -o rețea TCP/IP.
Capitolul 4 Proiectarea aplicației
Proiectarea aplicației a î nceput de la alegerea mediului de lucru. Am ales implementarea aplicației
pe un sistem de tipul calculator personal sau laptop deoarece in cadrul analizei rețelelor nu avem
neapărata nevoie de sisteme speciale. Astfel, proiectul se rezuma doar la o aplicaț ie software, dar care
folosește nivelurile privilegiate ale procesorului pentru a analiza si a obține informații legate de
pachetele capturate.
Figura 4.1 Snifuirea pe un hub de rețea oferă o vizibilitatea mare indicata prin dreptunghi
Următorul pas a fo st alegerea limbajului in care va f dezvoltata aplicația. Am ales limbajul de
programare C++ datorita posibilității de creare a aplicațiilor orientate pe obiecte. Pe urma am ales
mediul de lucru in care va fi dezvoltata aplicația. Acesta este QtCreator. El este un utilitar pentru
dezvoltarea aplicațiilor ce oferă multe opțiuni ce vin in ajutorul programatorului.
După pasul de setare inițiala , trebuie sa stabilim ce dorim sa facă aplicația . Pentru acesta am
stabilit use -casurile. Ele sunt vizibile in figura 4.2.
Figura 4.2 Use -caseurile generale ale aplicației .
In uram stabilirii a ce vrem sa facă aplicația, vom încerca sa determinam structura aplicație, ce
module for fi disponibile, cum este realizata intercomunicația intre module si așa mai departe. Dator ita
faptului ca vom avea de -a face cu un progra m de dimensiuni considerabile, v om încerca sa facem
acesta împărțire pentru a ne fi ușor si de depanat si de modularizare a aplicație .
Următorul pas este de crea arhitectura aplicației. Acesta e ajuta sa vedea m cum poate optimizata
construcția si cum poate fi împărțite blocurile logice.
Capitolul 5 Implementarea aplicației
5.1 Limbajul de programare si biblioteci
Limbajul de programare ales pentru dezvoltarea aplicației este C++. Motivul alegrii acestui limbaj
este faptulu i ca este un limbaj orientat pe obiecte, oferă posibilitatea lucrului cu pointeri si pentru ca
oferă un set de operații cu pointeri ce poate fi utilizata pentru interpretarea mesajelor.
Utilizarea resurselor oferite de limbajul C++ se dovedesc a fi insufic iente daca se dorește sa se
creeze si o interfața grafica pentru aplicație. Exista totuși un set de biblioteci ce implementează
mecanismul de creare de interfețe grafice iar printre acestea se afla si biblioteca QT.
Biblioteca QT oferă un set extins de met ode si clase ce oferă funcționalități de la crearea la efecte
grafice pana la un modul de lucru cu bazele de date. Pe lângă biblioteca QT se mai utilizează biblioteca
Pcap. Aceasta ne permite sa capturam pachete dintr -o interfața cu o rețea.
5.2 Mediul de lucru
Mediul de lucru folosit pentru dezvoltarea aplicației este sistemul integrat de dezvoltare software
QT Creator. Acesta este o aplicație gratuita oferita de către compania QT. Ei sunt responsabili si de
crearea bibliotecii QT. Acest mediu de dezvoltar e dispune de toate funcționalitățile obișnuite unei
aplicații de dezvoltare software precum:
posibilitatea creării de proiecte ce vor încapsula o funcționalitate, o biblioteca sau un
program;
posibilitatea setării versionarii pentru un proiect;
definirea p așilor de compilare linkuire si rulare a unei aplicații
posibilitatea de a depana programe cu ajutorul unui program special destinat
depanării(precum gdb pentru Linux);
posibilitatea de a analiza programul din perspectiva consumului de memorie;
utilizarea uneltelor de refactorizare;
posibilitatea de a crea interfețe grafice folosind o planșa.
Lista poate continua dar acestea sunt printre cele mai utilizate funcționalități al acestuia. De
asemenea este posibila si integrarea de module suplimentare fie instal ate printr -un manager, fie chiar
prin scrierea si dezvoltarea unuia.
5.3 Structura interna a proiectului
Fiind un proiect destul de complex este necesara împărțirea in diferite subsisteme a proiectului
pentru o mai buna separare a datelor si o mai buna dif erențiere a diferitelor tipuri de clase. Aceasta
separare nu este doar una vizuala ci are si rol de definire a bibliotecilor aplicației. Împărțirea in
biblioteci a implementării ne ajuta in procesul de compilare si linkuire datorita faptului ca nu trebuie
compilatorul sa genereze cod pentru fiecare clasa, ci este generat codul binar doar pentru un set restrâns
de clase ce au fost modificate.
In continuare vom analiza separat fiecare modul aflat in proiect si vom analiza clasele din
componenta acestuia.
5.3.1 Biblioteca entity
Acesta biblioteca definește toate clasele de entități relevante aplicației. Ele vor fi utilizate pe
parcursul procesului pentru a retine valori relevante in contextul in care sunt utilizate. Printre clasele
definite sunt cele ce abstrac tizează încapsulările utilizate in modelul Internet(rețeaua IP):
clasa EthernetHeader ;
clasa IpHeader ;
clasa TcpPayload ;
clasa UdpPayload ;
Clasele sus menționate au in componenta lor câmpuri reprezentative pentru hederul ce îl descriu,
metode de setare si primire al informațiilor si metode utilizate pentru afișarea datelor intr -o fereastra a
aplicației.
In continuare vom analiza structura clase EthernetHeader . Pentru o mai buna înțelegere a
codului, vom împarți codul si vom analiza elementele distinctive in parte. Nu vom menționa ce
reprezintă fiecare tip de data încapsulate, deoarece ele sunt definite in capitolele anterioare.
Codul 5.1 Tipul de data abstractă ethernet_header
#define MAC_ADDRESS_SIZE 6
#define ETHERNET_HEADER_SIZE 14
/* Ethernet header */
typedef struct ethernet_header {
/* destination host address */
uint8_t mac_dest [MAC_ADDRESS_SIZE ];
/* source host address */
uint8_t mac_source [MAC_ADDRESS_SIZE ];
/* IP? ARP? RARP? etc */
uint16_t frame_type ;
}ethernet_header ;
In codul de mai sus avem definita structura de date ethernet_header . Acesta este in principal
folosita de către librăria Pcap in momentul capturii. Atunci când pachet este capturat, el este inițial
salvat intr -o zona de memorie. Cu ajutorul operației de castare putem sa inseram in structura de date
valorile de la acea locație. Constantele definesc dimensiunea unui cadru Ethernet respectiv
dimensiunea unei adresa MAC.
Codul 5.2 Definiția de pointer pentru clasa EthernetHeader
// pointer definition
class ENTITYSHARED_EXPORT EthernetHeader ;
typedef std::shared_ptr <EthernetHeader > EthernetHeaderPtr ;
Mai departe avem definirea tipului de data shared_ptr . Pentru fiecare clasa din proiect, cu
excepția claselor din subsi stemul gui, avem acesta definiție. Datorita faptului ca avem de lucru cu
aceleași obiecte in mai multe locuri in cadrul programului si pentru a reduce duplicarea acestora, este
recomandata utilizarea pointerilor. Un dezavantaj al acestora este faptul ca od ată creat, el va rămâne
pe parcursul execuției aplicației si va duce la utilizarea ineficienta a memoriei. Daca avem de -a face
cu o aplicație de dimensiuni considerabile, riscul devine foarte mare si poate duce la oprirea procesului
in care rulează aplicaț ia. In ajutorul programatorului vine shared_ptr . Acesta ne ajuta sa cream
foarte ușor obiecte si sa nu avem grija ștergerii lor din memorie. Prin mecanismul de reference counter ,
acesta numără referințele care obiect, iar când numai este referit, el se va șterge din memorie .
In cadrul definiției clasei observam si un macro ENTITYSHARED_EXPORT . Acesta este folosit
de care mecanismul de creare a aplicației in QT pentru determinarea vizibilității clasei in exteriorul
librăriei.
Codul 5.3 Definiția clasei EthernetHeader
class ENTITYSHARED_EXPORT EthernetHeader : public QAbstractTableModel
{
Q_OBJECT
public :
/**
* Constructorul clasei.
* Primeste parametru ca parametru un QObject, folosit de catre mecanismul
de QT
* pentru relatiile pa rinte-copil.
*/
EthernetHeader (QObject *parent = 0);
/**
* Destructorul clasei.
* Atunci cand se va sterge obiectul(delete), acesta metoda se va apela.
* Are rol de sterge al obiectelor din clasa curenta.
*/
virtual ~EthernetHeader () {};
/**
* Metode de set si get.
* Folosite pentru operatiile de setare si primire al aributelor clasei.
*/
QString getMacDestination () const ;
void setMacDestination (const QString &value );
void setMacDestination (const uint8_t *value );
QString getMacSource () const ;
void setMacSource (const QString &value );
void setMacSource (const uint8_t *value );
QString getFrameType () const ;
void setFrameType (const QString &value );
void setFrameType (const uint16_t &value );
/**
* Metode virtual mostenite de la clasa QAbstractTableModel.
* Aceste metode sunt folosite pentru setarea valorilor intr -un tabel din
interfata vizuala
* al aplicatiei.
*/
int rowCount (const QModelIndex &parent ) const ;
int columnCount (const QModelIndex &parent ) const ;
QVariant data (const QModelIndex &index , int role ) const ;
private :
/**
* Metoda pricata folosita pentru formatarea sirului de caractere ce contine
adresa MAC.
*/
void beautifyMacAddress (QString & input );
/**
* Atributele clasei.
* Ele reprezinta valorile dintr -un cadru ethernet. Pentru o mai usoara
utilizare
* in aplicatie, ele sunt de tipul sir de caractere.
*/
QString macDestination ;
QString macSource ;
QString frameType ;
};
Clasa noastră extinde clasa abstracta QAbstractTableModel . Acesta aparține bibliotecii QT
si este folosita pentru afișarea intr -un tabel al informațiilor din clasa cu ajutorul metodei data. In QT,
afișarea datelor intr -o fereastra se face cu ajutorul. Acest mod de afișare al datelor reprezintă un model
de dezvoltare al interfețelor grafice numit Model -View Pattern. Observam in interiorul clasei si un
macro Q_OBJECT. Acesta este in mare utili zat pentru mecanismul de semnale din QT.
Comentariile din cod explica pe scurt funcționalitatea fiecărei metode așa ca nu le vom mai
parcurge.
Asupra codului sursa din fișierul .cpp nu vom insista deoarece acesta sunt foarte scurte(se extind
de la 1 pana l a 10 linii de cod) iar descrierea explică funcționalitatea acestora.
Pe lângă clasele de abstractizare al pachetelor din modelul IP mai avem clasele ce definesc
interfețele de rețea prin care se poate realiza captura. Acestea sunt:
clasa NetworkInterface ;
clasa WlanInterface .
Asemănător cu clasele definite anterior avem metode de get si set, ce ne furnizează informații,
precum si metode moștenite de la clasa abstracta QAbstractTableModel , folosite pentru
afișarea intr -un tabel al informațiilor reținute. Cu excepția datelor modificate, nu putem spune ca sunt
multe diferențe intre aceste clase si cele anterior menționate. De fapt toate sunt definite in aceiași
măsura, diferențierea dintre ele făcându -se la nivel de date.
Vom analiza totuși datele din clase, dar nu vom adăuga cod sursa. Începând cu clasa
NetworkInterface , acesta abstractizează un controler de interfațare cu rețeaua si conține toate
datele legate de acesta. In interiorul ei avem:
Numele interfeței : acesta reprezintă numele dat de sistemul de op erare perifericului;
Descrierea : numele adaptorului. Spre deosebire de numele interferai, acesta nu are alt rol
decât reținerea unui nume recunoscut de utilizator.
Tipul de adaptor : reprezintă interfața cu care se conectează u exteriorul(Ethernet, WiFi,
etc);
Adresa IP : reprezintă numărul asignat dispozitivului ce este conectat la rețeaua Internet;
IP mask : folosit pentru determinarea subrețelei din care face parte dispozitivul;
Adresa Adaptorului : reprezintă adresa MAC a dispozitivului si este unica pentr u fiecare
dispozitiv;
Gateway : reprezintă adresa IP la care sunt redirectate pachetele daca nu este găsita adresa
destinatarului in algoritmul de rutare;
DHCP enabled/server : ne indica adresa serverului de la care ne -a fost asociata adresa IP
pentru confi gurare.
Clasa WlanInterface extinde clasa NetworkInterface fiind o interfața particulara ce
comunica prin intermediul semnalelor radio. Acesta are pe lângă elementele sus menționate si o stare
de conexiune si o lista de puncte de acces la care se poate con ecta. Abstractizarea pentru un punct de
acces este definita de clasa WlanAvailableConnection . WlanAvailableConnection
are in componenta ei următoarele atribute:
SSID : acronimul de la service set identifier, reprezintă un identificator unic de o lungime
de 32 de caractere alfanumerice reprezintă un mod de identificare al punctului de acces ;
BSS: basic service set, identifica tipul de punct de acces(ad -hoc sau nu);
Calitatea semnalului : valoare ce indica puterea semnalului in procente;
IRSSI : valoarea in deci beli a semnalului;
Pe lângă cele menționate, in acest subsistem mai avem definite câteva enumerări pentru diferite
valori intr -un interval discret.
5.3.2 Biblioteca exception
Acesta biblioteca definește clasele de excepții ce pot fi aruncate in aplicație. Toate clasele din
acest modul moștenesc clasa exception din biblioteca standard oferita de C++. Toate clasele
urmează un standard de definire, iar mai jos sunt afișate fișierele header si sursa pentru definirea unui
excepții.
Codul 5.4 MyException.h
#ifndef MYEXCEPTION_H
#define MYEXCEPTION_H
// biblioteci disponibile din librara standard C++ :
// header care defineste metode si tipuri generice de date pentru gestionarea
memoriei.
// din cadrul acestui header vom folosi doar partea de definire de pointer
partitionat(shared)
#include <memory>
// header care defineste metode pentru procesarea si conversia de tipuri de date
de tipul 'string'
// vom utiliza acest header pentru tipul de date 'string' si pentru eventuale
procese de formatare al acestui tip de data
#include <string>
// header care defineste clasa de baza pentru exceptii
// clasa curenta find de tipul exceptie este necesar ca acesta sa mosteneasca
clasa definita in header
#include <exception>
// header special utilizat pentru defirea unui ma cro ce mentioneaza vizibilitatea
clasei catre celelalte module
#include "exception_global.h"
// definirea tipului de data pointer pentru clasa curenta
class EXCEPTIONSHARED_EXPORT MyException ;
typedef std::shared_ptr <MyException > MyExceptionPtr ;
// defin irea clasei MyException, cu metodele specifice si campurile acesteia
class EXCEPTIONSHARED_EXPORT MyException : std::exception
{
public :
/**
* Constructorul clasei.
* Primeste parametru in sir de caractere care vor fi folosite pentru
* afisarea motivului exceptiei.
*/
MyException (const char * why) {};
/**
* Destructorul clasei.
* In cadrul definitiei unei exceptii, destructorul acesteia nu trebui sa
arunce
* nici o exceptie.
*/
virtual ~MyException () throw () {};
/**
* Metoda redefinita din clasa std::exception.
* Acesta este folosita pentru returnarea motivului exceptiei atunci cand
este prinsa.
*/
virtual const char * what () const throw ();
private :
/**
* Camp al clasei ce va retine motivul exceptiei.
*/
std::string reason ;
};
#endif // MYEXCEPTION_H
Codul 5.5 MyException.cpp
#include "myexception.h"
const char * MyException ::what () const throw ()
{
return reason .c_str ();
}
Obiectele de tipu l excepție sunt folosite in celelalte module pentru transmiterea excepțiilor care
vor fi capturate de către alte module, de obicei de nivel mai înalt, si care vor fi afișate sub forma unui
dialog utilizatorului motivul excepției.
5.3.3 Biblioteca gui
Subsi stem gui oferă implementare logici ferestrelor ce pot fi afișate in aplicație. Afișarea
elementelor grafice este rezultatul bibliotecii QT, pentru o interfața foarte ușor de înțeles si posibilității
foarte mari de parametrizare.
Elementul principal al aces tei biblioteci îl constituie fereastra principala(in QT este reprezentat
de QMainWindow ). Ea reprezintă o fereastra ce va fi afișata si in interiorul căreia vom definii
diferitele elemente de afișare. Ea are un plan general in care pot fi poziționate dife rite elemente precum
statusul aplicației sau butoane de control.
Figura 5.1 Modul de afișare pentru fereastra QMainWindow .
Un Widget este un element grafic ce poate conține si el la rândul lui elemente grafice, si care
poate fi afișat intr -o fereastra. A vând o singura fereastra, restul claselor din acest subsistem reprezintă
fie widget -uri ce pot fi afișate in fereastra principala, fie obiecte de tip dialog, un subtip de fereastra ce
au o perioada foarte scurta de timp si au doar rol interogativ.
Widget -urile din acest subsistem sunt:
Clasa PacketSniffingWidet ;
Clasa AccessPointInformationWidget ;
Clasa GeneralAnalysisWidget ;
In funcție de ce informație este necesara afișării, ele își vor seta un model, sau vor primi drept
parametru unul, si vor ști unde s a afișeze informația. Majoritatea codului din acesta clase presupune
setarea proprietăților pentru afișare si setarea de date in interiorul lor.
5.3.4 Biblioteca logic
Subsistem ce se ocupa cu logica interna aplicației. Prin acesta ne referim la funcționa litățile ei.
Acesta este de departe cea mai importanta biblioteca interna proiectului deoarece pe acest nivel.
Toate intrările si ieșirile din acest modul se fac printr -o casa fațada. Acesta are unicul rolul de
definii interfețe pentru celelalte subproiect e. In proiect are numele de LogicFacade . In acesta clasa
avem cele 3 atribute pentru fiecare funcționalitate ce este definita in aplicație. Prin intermediul lui
LogicFacade , biblioteca gui, va interoga biblioteca logic, si astfel se realizarea comunicația intre
cele 2 module. De menționat este faptul ca acesta clasa este singletor, ceea ce înseamnă ca in program
poate exista doar un singura instanța de tipul clasei LogicFacade . La fel este valabil si pentru
celelalte clase din acest subsistem. Motivul utili zări acestui model este faptul ca nu se vor crea obiecte
suplimentare ce nu vor fi necesare si se lucrează cu o singura instanța partajata de restul aplicației.
Figura 5.2 Modelul singleton
Clasa SnifferManager se ocupa cu partea de capturare al pachetel or de pe o interfața. Metoda
startSniffing() este cea care se ocupa cu captura si va trimite un semnal cu conținutul mesajul
ce a reușit sa îl captureze.
Codul 5.6 metoda startSniffing() din cadrul clasei SnifferManager
void SniffingManager ::startSniffing (
NetworkInterfacePtr inter ,
uint32_t nrOfPacketsToCapture )
{
if(inter )
{
stopSingnaled = false ;
QString deviceName = inter ->getPcapName ();
bool canCapture = true ;
uint32_t count = 0;
PacketPt r output ;
// generic per -packet information – see pcap.h
struct pcap_pkthdr *header ;
// data from the packet
const u_char *pkt_data ;
// error buffer
char errbuf [PCAP_ERRBUF_SIZE ];
// clear the buf fer before displaying
memset (&errbuf [0], 0, sizeof (errbuf ));
// obtain a handle for our current device we are tring to sniff
handle = pcap_open (deviceName .toLocal8Bit ().data (), // device
65536 , // snaplen
PCAP_OPENFLAG_PROMISCUOUS , // flags
1000 , // read timeout
NULL , // remote
authentication
errbuf ); // error buffer
// check if the operation was successful
if (handle == NULL )
{
// if the operation was not successful, then throw an exception
std::string exceptionText ("Error opening source: " );
exceptionText .append (errbuf );
throw PcapException (exceptionText .c_str ());
}
else
{
// the result from capturing
int res = 0;
elapsingTimer .start ();
while (canCapture )
{
res = pcap_next_ex ( handle , &header , &pkt_data );
if(res > 0)
{
output .reset (new Packet ());
// the fisrt operation to execute is the time setting
output ->setElapsedNanoSeconds (elapsingTimer .nsecsElapsed ());
count ++;
// if the legth of the packet if greater than 0
// then save the data and show it on the screen
// add the size of the payload
output ->setSizeOfPacket (header ->len);
// add the payload
output ->setRawData (pkt_data );
// signal the capturing of a package
emit packageCaptured (output );
}
else if(res == 0)
{
continue ;
}
mutex .lock ();
if(((nrOfPacketsToCapture != 0) &&
(count >= nrOfPacketsToCapture )) ||
stopSingnaled )
{
canCapture = false ;
stopSingnaled = false ;
}
mutex .unlock ();
}
}
}
}
Începem analiza codului 5.6 prin parametrii ce sunt primiți. Primul parametru reprezintă
controlerul de interfața cu rețeaua prin care vor trece datele. Al doilea parametru îl reprezintă nu mărul
de pachete ca dorim a fi capturate. Daca numărul este zero, atunci se vor captura un număr nelimitat
de pachete. Urmează inițializarea variabilelor: avem un steag indicand daca a fost sau nu apăsat butonul
de stop, numele interfeței, un numărător, o instanța de tipul pachet ce va retine datele capturate, un
handler folosit de biblioteca Pcap, si un buffer ce va conține mesajul de eroare in caz ce sa întâmpla
ceva greșit pe parcursul capturii.
Următorul pas este deschiderea interfeței pentru captura fo losind interfața definita de Pcap. Ei ii
vom trimite numele interfeței, numărul maxim de biți ce se pot captura, modul promiscuu al
procesorului, valoarea de time-out pentru procesare, si buferul in care for si scrise mesajele de eroare.
Daca operația ante rioara s -a soldat cu succes, vom putea începe captura, acesta se face cu ajutorul
metodei pcap_next_ex . Atunci când este capturat un pachet, el este salvat in memorie, si este
trimis către interfața grafica pentru afișare. Daca utilizatorul apasă butonul d e stop, operația se încheie.
Clasa NetworkInterfaceManager se ocupa cu obținerea de informații de la sistemul de
operare in ceea ce privește interfețele ce conectare cu exteriorul. Ea este singleton, si nu este vizibila
in exteriorul librăriei. In compone nta ei intr -o o singura metode, si anume cea de returnare a unei liste
de interfețe către utilizator. Exista doua clase sursa pentru definirea metodei, una pentru Windows si
una pentru Linux.
Clasa AccessPointManager se ocupa cu obținerea de informații leg ate de interfețe WLAN.
Asemănător cu clasa NetworkInterfaceManager acesta are 2 fișiere sursa, una pentru fiecare
mediu de dezvoltare. In componenta ei intra 2 metode: una de obținere a unei liste de informați legate
de rețelele fără fir si una de obținere a valorii semnalului in timp pentru punctul de acces conectat. Ne
vom uita doar asupra codului sursa pentru Windows pentru a ne face o idee despre cum se realizează.
Codul 5.6 metoda getDetailedAccessPointInformation() din cadrul clasei
AccessPointManage r
WlanInterfacePtr
AccessPointManager ::getDetailedAccessPointInformation (NetworkInterfacePtr value )
{
HANDLE hClient = NULL ;
// declere the return list
WlanInterfacePtr toReturn ;
// Declare and initialize variables.
DWORD dwMaxClient = 2;
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
int iRet = 0;
WCHAR GuidString [39] = {0};
/* variables used for WlanEnumInterfaces */
PWLAN_INTERFACE_INFO_LIST pIfList = NULL ;
PWLAN_INTERFACE_INFO pIfInfo = NULL ;
PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL ;
PWLAN_AVAILABLE_NETWORK pBssEntry = NULL ;
int32_t iRSSI = 0;
if(hClient == NULL ) {
dwResult = WlanOpenHandle (dwMaxClient , NULL , &dwCurVersion , &hClient );
}
dwResult = WlanEnumInterfaces (hClient , NULL , &pIfList );
if (dwResult == ERROR_SUCCESS ) {
QString tempQstring ;
for (unsigned i = 0; i < (unsigned int) pIfList ->dwNumberOfItems ; i++) {
pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList ->InterfaceInfo [i];
tempQstring = QString ::fromWCharArray (pIfInfo –
>strInterfaceDescription );
if(!(tempQstring .compare (value ->getDescription ()))) {
toReturn = WlanInterfacePtr (new WlanInterface ());
toReturn ->setAdapterAddress (value->getAdapterAddress ());
toReturn ->setAdapterType (value ->getAdapterType ());
toReturn ->setDescription (value ->getDescription ());
toReturn ->setDhcpEnabled (value ->getDhcpEnabled ());
toReturn ->setDhcpServer (value ->getDhcpServer ());
toReturn ->setGateway (value ->getGateway ());
toReturn ->setIpAddress (value ->getIpAddress ());
toReturn ->setIpMask (value ->getIpMask ());
toReturn ->setName (value ->getName ());
toReturn ->setPcapDescription (value ->getDescription ());
toReturn ->setPcapLoopback (value ->getPcapLoopback ());
toReturn ->setPcapName (value ->getPcapName ());
toReturn ->setPcapAddress (value ->getPcapAddress ());
pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList ->InterfaceInfo [i];
iRet = StringFromGUID2 (pIfInfo ->InterfaceGuid , (LPOLESTR )
&GuidString ,
sizeof (GuidString )/sizeof (*GuidString ));
if (iRet != 0)
{
// set the GUID
tempQstring = QString ::fromWCharArray (GuidString , 39);
toReturn ->setGuid (tempQstring );
}
tempQstring = QString ::fromWCharArray (pIfInfo –
>strInterfaceDescription );
toReturn ->setWlanDescription (tempQstring );
switch (pIfInfo ->isState )
{
case wlan_interface_state_not_ready :
toReturn ->setConnectionType (WlanConnectionType_not_ready );
break ;
case wlan_interface_state_connected :
toReturn ->setConnectionType (WlanConnectionType_connected );
break;
case wlan_interface_state_ad_hoc_network_formed :
toReturn –
>setConnectionType (WlanConnectionType_ad_hoc_network_formed );
break ;
case wlan_interface_state_disconnecting :
toReturn ->setConnectionType (WlanConnectionType_disconecting );
break ;
case wlan_interface_state_disconnected :
toReturn ->setConnectionType (WlanConnectionType_disconected );
break ;
case wlan_interface_state_associating :
toReturn ->setConnectionType (WlanConnectionType_associating );
break ;
case wlan_interface_state_discovering :
toReturn ->setConnectionType (WlanConnectionType_discovering );
break ;
case wlan_interface_state_authenticating :
toReturn –
>setConnectionType (WlanConnectionType_authenticateing );
break ;
default :
toReturn ->setConnectionType (WlanConnectionType_unknown );
break ;
}
dwResult = WlanGetAvailableNetworkList (hClient ,
&pIfInfo ->InterfaceGuid ,
0,
NULL ,
&pBssList );
if (dwResult == ERROR_SUCCESS ) {
// declare a pointer for an available network
WlanAvailableConnectionPtr newAvailableNetwork ;
for (unsigned int j = 0; j < pBssList ->dwNumberOfItems ; j++)
{
newAvailabl eNetwork = WlanAvailableConnectionPtr (new
WlanAvailableConnection ());
pBssEntry = (WLAN_AVAILABLE_NETWORK *) & pBssList –
>Network [j];
tempQstring .clear ();
for (unsigned int k = 0; k < pBssEntry –
>dot11Ssid .uSSIDLength ; k++) {
tempQstring .append (QChar ((int)pBssEntry –
>dot11Ssid .ucSSID [k]));
}
newAvailableNetwork ->setSsid (tempQstring );
tempQstring .clear ();
tempQstring = QString ::fromWCharArray (pBssEntry –
>strProfileName );
newAvailableNetwork ->setProfileName (tempQstring );
switch (pBssEntry ->dot11BssType ) {
case dot11_BSS_type_infrastructure :
newAvailableNetwork –
>setBbsType (WlanBssType_infrastructure );
break ;
case dot11_BSS_type_independent :
newAvailableNetwork –
>setBbsType (WlanBssType_independent );
break ;
case dot11_BSS_type_any :
newAvailableNetwork ->setBbsType (WlanBssType_any );
break ;
default :
newAvailableNetwork ->setBbsType (WlanBssType_unknown );
break ;
}
newAvailableNetwork ->setNrOfBssIds (pBssEntry –
>uNumberOfBs sids );
if (pBssEntry ->bNetworkConnectable )
newAvailableNetwork ->setConnectable (true );
else {
newAvailableNetwork ->setConnectable (false );
std::stringstream sstr ;
sstr << pBssEntry ->wlanNotConnectableReason ;
std::string str = sstr .str();
newAvailableNetwork –
>setConnectableReason (QString ::fromStdS tring (str));
}
newAvailableNetwork ->setNrOfPhySupported (pBssEntry –
>uNumberOfPhyTypes );
// calculate the signal quality
if (pBssEntry ->wlanSignalQuality == 0)
iRSSI = -100;
else if (pBssEntry ->wlanSignalQuality == 100)
iRSSI = -50;
else
iRSSI = -100 + (pBssEntry ->wlanSignalQuality /2);
newAvailableNetwork ->setSignalQuality (pBssEntry –
>wlanSignalQuality );
newAvailableNetwork ->setIrssi (iRSSI );
if (pBssEntry ->bSecurityEnabled )
newAvailableN etwork ->setSecurity (true );
else
newAvailableNetwork ->setSecurity (false );
toReturn ->addWlanConnction (newAvailableNetwork );
}
}
}
}
}
if (pBssList != NULL ) {
WlanFreeMemory (pBssList );
pBssList = NULL ;
}
if (pIfList != NULL ) {
WlanFreeMemory (pIfList );
pIfList = NULL ;
}
return toReturn ;
}
Metoda se folosește de metodele ofe rite de sistemul de operare pentru obținea informațiilor.
5.3.5 Biblioteca util
Acesta biblioteca oferă o suita de metode statice ce rezolva operații simple si sunt utilizate in
restul subproiectelor. Operații se refera fie la operații de conversie de tipu ri, fie la operații de calcul
sau la conversie de baza pentru numere.
Capitolul 6 Utilizarea aplicației
Aceasta aplicație este destinata calculatoarelor personale si laptopurilor ce rulează sisteme de
operate Linux sau Windows. Pentru ca aplicația sa ruleze pe diferit e arhitecturi de sistem este necesara
compilarea surselor cu un compilator de C++ specific pentru mașina ce va rula aplicația. Vor exista de
asemenea versiuni precompilate pentru sistemele Windows ce au ca sistem de operare Windows 8.
Exista mai multe modu ri de funcționare al aplicației, ele fiind independente unele de altele. In
continuare vom trata separat aceste moduri de funcționare si vom descrie modul de utilizare si tratarea
rezultatelor.
6.1 Capturarea de pachete pe o interfața cu exteriorul
Una din tre modurile de lucru al aplicației îl reprezintă analiza pachetelor capturate de pe o
interfața ce oferă un mod de lucru promiscuu. Acesta este modul principal de lucru al aplicației si este
modul care este activat la pornirea aplicației.
In partea de sus a ferestrei observam controalele pentru modul de lucru cu pachete. Butoanele de
'Start' si 'Stop' sunt pentru pornirea respectiv oprirea capturării pachetelor. Pentru prima pornire a
aplicației, butoanele sunt inactive, datorita faptului ca nu respectam t oate precondițiile pentru a porni
procesul de captura. Pentru a activa butonul de 'Start', avem nevoie de o interfața cu rețeaua de
calculatoare.
6.1.1 Selectarea interfeței de capturare
Pentru a selecta o interfața, avem butonul de Select Interface . Apăsâ nd butonul, o fereastra de
selecție a interfeței ne este prezentata. In funcție de sistem si sistemul de operare, numărul opțiunilor
poate sa difere. Pe prima coloana avem numele interfeței așa cum este recunoscut pentru sistemul de
operate. A doua coloana reprezintă tipul interfeței. In a treia coloana avem prezent, pentru fiecare
interfața cate un buton pentru informații suplimentare legate de interfața pe care dorim sa o alegem.
Figura 6.1 Dialogul afișat in momentul in care utilizatorul apasă pe buton ul de Select Interface
Selectând opțiunea de detalii pentru o interfața, avem la dispoziție toate informațiile legate de o
anumita conexiune.
Observam o împărțire pe culori a informațiilor afișate, iar acestea reprezintă diferitele module ce
oferă informaț iile afișate. Rândurile având fundalul albastru reprezintă informația oferita de biblioteca
PCAP, iar rândurile având fundalul roșu deschis reprezintă informațiile oferita de bibliotecile
sistemului de operate. Acesta este vizibila in figura 6.2.
6.1.2 Por nirea capturării
După selectarea interfeței prin care dorim sa capturam pachete, urmează pornirea procesului de
capturare. Observam ca in urma efectuării pasului anterior butonul de 'Start' este activ iar dedesubtul
lui este afișat interfața selectata de n oi. Asta înseamnă ca la activarea semnalului de start urmează sa
capturam pachete de pe acea interfața.
Figura 6.2 Dialogul de detalii pentru o interfața cu rețeaua.
O alta opțiune oferita este ceea de limitare a numărului de pachete pe care dorim sa cap turam.
Astfel daca dorim sa analizam doar 100 de pachete, vom introduce numărul de pachete dorite,
asigurându -ne ca opțiunea este selectata, iar la atingerea valorii, aplicația oprește procesul de captura.
Figura 6.3 Afișarea pachetelor capturate
Select ând 'Start' observam ca procesul de captura este pornit, in lista de sub comenzile de control
observam pachetele capturate. Oprirea capturării se realizează prin selectarea opțiunii de 'Stop' sau
daca a fost activata limita de pachete, la atingerea limitei .
Observam in lista câteva informații legate de pachetele capturate, iar prima informație o reprezintă
timpul capturii. Acest timp poate reprezenta, in funcție de opțiunea aleasa de către utilizator, atât durata
de la pornirea capturii pana la capturarea a celui pachet cat si timpul curent, atât in format Unix cat si
in format standard.
Următoarele doua câmpuri din tabelului principal reprezintă adresele MAC ale destinatarului si
transmițătorului. Adresele MAC ale participanților la comunicare reprezintă ide ntificatoare unice
pentru cele doua dispozitive hardware de interfațare cu exteriorul. Aceasta informație vine încapsulata
in cadrul Ethernet al pachetului.
A patra coloana din tabel reprezintă tipul pachetul capturat. Tipurile definite in aplicație sunt T CP
si UDP. Ele sunt cele mai răspândite tipuri de pachete transmise in rețeaua Internet si probabil cele
care vor fi analizare mult mai in detaliu. A cincea coloana reprezintă dimensiunea in biți a pachetului
capturat. Dimensiunea maxima a unui pachet este de 65535 biți, iar dimensiunea minima este de 20 de
biți.
Ultima coloana reprezintă coloana cu infamații generale despre pachet. Acestea pot sa menționeze
daca pachetele au fost transmise sau recepționate , daca au fost semnale de verificare a conexiunii s au
numărul de ordine al pachetului.
Mai departe, daca utilizatorul dorește sa afle in detaliu conținutul pachetului, el trebuie sa deschidă
fereastra de informații adiționale ale pachetului. Pentru a realiza acest lucru, utilizatorul trebuie sa dea
dublu -click pe un rând al tabelului iar acesta se va deschide.
Odată deschis a fereastra, el poate sa vadă la nivel de biți informațiile conținute in pachetul
capturat. Aceste informații sunt împărțite in funcție de încapsulare . In partea din stânga avem o lista
cu aceste încapsulări . Fiind un cadru al rețelei Internet, el va conține trei elemente:
Cadrul Ethernet;
Pachetul IP;
Pachetul TCP/UDP;
In dreapta listei va exista un tabel ce va afișa informațiile conținute in partea de început al fiecărei
încapsulări , in funcție de tipul ales din lista anterior menționata . Daca avem selectata opțiunea de
Ethernet, in tabel vor fi afișate informațiile legate de adresa MAC a destinatarului, adresa MAC a
transmițătorului , si tipul de pachet ce încapsulează cadrul Ethernet.
Daca avem selectata opțiunea IP din lista, in tabel vor fi afișate informațiile heder al încapsulării
IP. Detaliind pe scurt fiecare informație in hederul IP avem:
Versiunea : Versiunea protocolului, exista in momentul de fata doua versiuni ale
protocolului ;
Tipul de serviciu : octet ce are in componenta lui câteva opțiuni pentru ce pachet transporta;
Lungimea totala : reprezintă lungimea întregului pachet.
Identificare, Flags si Fragment Ofset : aceste câmpuri sunt folosite in procesul de
fragmentare al pachet elor;
Timpul de păstrare: reprezintă numărul maxim de hop -uri prin care poate trece un pachet;
Protocol: reprezintă protocolul încapsulat de IP;
Checksum: suma de control pentru verificarea erorilor;
Adresa IP a sursei: adresa nodului care a trimis pachetu l;
Adresa IP a destinației: conține adresa nodului căruia ii este destinat pachetul.
Figura 6.3 Fereastra de detaliu asupra pachetului
6.2 Obținerea informațiilor legate de interfețele WLAN
Apăsând pe al doilea buton d in consola din dreapta, se va schimba conținutul ferestrei principale,
afișând o alta lista alături de al te contro ale. Acesta este responsabila de afișarea informațiilor legate de
punctele de acces pentru o anumita interfața WLAN. Deasupra tabelului avem afișata lista interfețelor
WLAN cu informații legate de starea acestuia. Dedesubt se afla o tabela cu fiecare router vizibil pentru
interfața .
Avem afișate informații toate proprietățile acestuia obținute de la sistemul de operare.
Figura 6.4 Informațiile legate de interfețele WLAN
6.3 Analiza asupra interfețelor
Pe lângă modulele sus menționate , aplicația mai deține o a treia utilita te si anume cea de analiza
grafica asupra datelor. Acesta presupune un modul de afișare al graficelor, posibilitatea de alege dintr –
o listă de doua proprietăți pentru analiza ratei de transfer si puterii semnalelor de la punctul de acces
la care suntem conectați .
Asemănător cu primul modul, pentru analiza ratei de transfer, avem nevoie de o interfața prin care
putem sa contorizam pachetele si sa le afișam pe grafic. Acesta se face tot prin selectarea interfeței cu
ajutorul butonului de select interface , si alegerea dintr -o lista a interfeței .
După ce avem interfața selectata trebuie sa ne alegem analiza Pachet sniffed/time si putem astfel
sa ne generam graficul. Graficul se modifica in tim p real, si p utem sa observam modificările in timp.
Jos avem controalele pentru ștergerea graficului afișat curent daca dorim sa facem o alta analiza
respectiv daca dorim sa vedem rezultatele într-o lista.
Figura 6.5 O analiza asupra transferului de pachete.
O a doua opțiune ce poate fi selectata este cea de analiza a puterii semnalului unui punct de acces .
Acesta est e afișat in decibeli, si valorile se obțin in intervale regulate de jumătate de secunda. Pentru a
putea genera graficul avem nevoie sa selectam tipul de test ce dorim sa il facem si sa pornim procesu l
de captura al puterii din controlerul de WLAN.
Figura 6.6 Analiza puterii semna lului atunci când a fost oprit si pornit punctul de acces
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Programul de Licență : Calculatoare si Tehnologia Informatiei [601979] (ID: 601979)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
