Sunteți pe pagina 1din 11

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei


Catedra Automatică și Tehnologii Informaționale

RAPORT

Lucrare de laborator Nr.5


la disciplina Programarea în Rețea
Tema: Ingineria inversă în rețea

A efectuat: St.grupei SI-131, Gheorghisenco L.

A verificat: Antohi Ionel


Chișinău 2016
Scopul lucrării
Studierea analizatorului de pachete Wireshark.
Generalizare
Wireshark este o aplicației OpenSource, care monitorizează pachetele de date. Este pe larg
utilizată pentru soluționarea problemelor în rețea, pentru analizarea traficului, dezvoltarea produselor
software și a protocoalelor de comunicare. Inițial aceasta se numea Ethereal, dar în mai 2006 proiectul
a fost redenumit Wireshark din cauza problemelor legate de marca comercială.
A fost scrisă în C și C++, accesibilă pe diferite sisteme de operare ca: GNU/Linux, OS X,
BSD, Solaris, având o platformă mixtă.
Wireshark-ul este cross-platform, de aceea permite libera utilizare în toate ramurile IT, atât în
testing, management, cât și de developeri. Interfața e simplă și întregul arsenal de instrumente este la
îndemâna. (Vezi fig.1)

Fig. 1 – Interfața aplicației Wireshark. (1)


Pentru a înțelege mai bine cum are loc captarea pachetelor se navighează în browser, link-ul
respectiv http://httpbin.org/image/jpeg, însă, obligatoriu se setează ca filtru în aplicația dată,
următorul host: http.host ==httpbin.org. Realizând un Follow TCP stream, avem accesul către
pachetele de mai jos. (fig.2)

Fig. 2 – Analizarea imaginii în pachete.


Putem menționa faptul că întreg fluxul de date este captat în baiți reprezentați în sistemul de
numerație hexazecimal. Pentru a înțelege mai bine, în figura de mai jos vom observa întreg funcționalul,
în care, GTK+2 va prelua tot input/output-ul utilizatorului. Core va menține ambele blocuri împreună,
iar codul sursă se va afla în directoriul root.
Epan se va descifra Ethereal Packet ANalyzer – un motor de analizare a pachetelor. Codul sursă
va fi găsit în directoriul acestuia. La rândul lui acesta conține Protocol Tree, Dissectors, Dissector
Plugins și Display Filter. Toate aceste componente răspund de disecția informației pentru fiecare pachet în
parte, suport pentru fiecare modul și găzduirea codului sursă în mapa plugins. La fel avem librăria
Wiretap, care e utilizată în citirea și scrierea file-urilor capturi în diferite formate. WinPcap and
libpcap se vor utiliza în filtrarea și capturarea pe diferite platforme. Acest filtering lucrează la un nivel
mai jos în comparație cu filtrele anterioare. Anume acestui fapt avem diferite display-uri și sintaxe de
capturare a filtrului. (fig.3)
Fig. 3 – Structura și funcționalitatea Wireshark. (2)
Aceste pachete vor fi salvate în formatul hex, după care convertate în ASCII, pentru ca la final
să obținem imaginea propriu-zisă JPEG. (vezi fig.4)

Fig.4 – Imaginea captată.


Soluții de implementare
private void start_button_Click(object sender, EventArgs e)
{
if(!first_time)//we need to re-capturing so we need to restart the program
{
Application.Restart();
}

else if (adapters_list.SelectedIndex >= 0)//if an adapter selected


{
timer1.Enabled = true;//start updating listview and textbox to show
info selectedAdapter = AdaptersList[adapters_list.SelectedIndex];//get
selected adapter from combobox
backgroundWorker1.RunWorkerAsync();//start capturing and making
filters backgroundWorker2.RunWorkerAsync();//start saving .pcap file
if needed start_button.Enabled = false;
stop_button.Enabled = true;
adapters_list.Enabled =
false; _tcp.Enabled = false;
_udp.Enabled = false;
first_time = false;
save.Enabled = false;
}
else
{
MessageBox.Show("Please select an adapter!");
}
}

private void stop_button_Click(object sender, EventArgs e)


{
start_button.Enabled = true;
stop_button.Enabled = false;
adapters_list.Enabled =
true; _tcp.Enabled = true;
_udp.Enabled = true;
timer1.Enabled = false;
start_button.Text = "Re-Capturing";
save.Enabled = true;

if (ip.Protocol.ToString().Equals("Tcp")&&(save.Checked))
{
int _source = tcp.SourcePort;
int _destination = tcp.DestinationPort;

if (tcp.PayloadLength != 0) //not syn or ack


{
payload = new byte[tcp.PayloadLength];
tcp.Payload.ToMemoryStream().Read(payload, 0, tcp.PayloadLength);//
read payload from 0 to length
if (_destination == 80)// request from server
{
Packet1 packet1 = new Packet1();
int i = Array.IndexOf(payload, (byte)32, 6);
byte[] t = new byte[i - 5];
Array.Copy(payload, 5, t, 0, i - 5);
packet1.Name = System.Text.ASCIIEncoding.ASCII.GetString(t);

if (!packets.ContainsKey(_source))
packets.Add(_source, packet1);
}

La execuție observăm posibilitatea de alegere între TCP și UDP, la fel pot fi bifate ambele
protocoale. În timpul lansării se observă informația despre fiecare protocol în parte, iar atunci când
activăm Save Capturing, atunci stocăm fileul cu date în path-ul specificat. (fig.5) (3)

Fig.5 – Execuția programului.


Cu ajutorul aplicației NetworkMiner vizualizăm conținutul file-ului obținut anterior și observăm
pozele capturate, cât și sursa .html. (vezi fig.6)

Fig.6 – Conținutul file-ului obținut anterior


Concluzie
Efectuând acest mic studiu, putem spune că aplicația Wireshark este un instrument destul de
puternic, utilizat atât de developeri, testeri, cât și de operatori. Fiind cross-platform, e accesibil tuturor
celor care au nevoie de a monitoriza pachetele de date în rețeaua proprie. De asemenea, în soluționarea
problemelor în rețea, pentru analizarea traficului sau dezvoltarea produselor software și a protocoalelor
de comunicare.
La fel putem menționa flexibilitatea și puterea acestuia, ținând cont de faptul că are
posibilitatea de a captat absolut tot ce trece prin rețea, trebuie să fim atenți atunci când nu se va lua în
calcul securizarea rețelei, sesiunea proprie poate fi utilizată de alții în scopuri frauduloase, de aceea,
tipul rețelei utilizate trebuie analizată primordial.
Bibliografie

1. Bindi, Chen. HTTP Basic. www.bindichen.co.uk. [Online] March 30, 2016.


https://www.ieft.org/rfc/rfc2616.txt.
2. Bloice, Graham. Wireshark Developer's Guide. www.wireshark.org. [Online] April 21, 2016.
https://www.wireshark.org/docs/wsdg_html/.
3. Concise. Wireshark basics. www.concise-courses.com. [Online] April 21, 2016.
https://www.concise-courses.com/.
4. Florin, Rusu. Laborator5. www.gitlab.ati.utm.md. [Online] March 15,
2016. https://gitlab.ati.utm.md/rusu.florin/laborator5/tree/master/LW-5.
5. Foundation, .NET. Tidy.net Portable. www.nuget.org. [Online] March 21, 2016.
https://www.nuget.org/packages/TidyNetPortable.