|
@@ -2,13 +2,15 @@
|
2
|
2
|
|
3
|
3
|
![header.png](images/header.png)
|
4
|
4
|
|
|
5
|
+[Verano 2016 - Ive]
|
|
6
|
+
|
5
|
7
|
*Object Oriented Programming* (OOP) is a programming paradigm that promotes the design of programs by having different objects interacting together to solve a problem. C++ is one of the programming languages that promotes object oriented programming, allowing programmers to create their own classes from scratch or derive them from other existing classes. Other languages that promote OOP are Java, Python, Javascript and PHP.
|
6
|
8
|
|
7
|
9
|
In OOP, each object encapsulates within itself certain properties about the entity being modeled (for example, an object that models a *point* encapsulates the coordinates *x* and *y* of the point being represented). Furthermore, each object allows certain actions to be carried out on itself with the *methods* that the object contains. For example, an object of class *point* could carry out the action of changing the value of the *x* coordinate.
|
8
|
10
|
|
9
|
11
|
When an object class we need to use in our program has not been predefined in a library, we need to declare and implement our own class. To do this, we define *classes* that contain data with certain *properties* or *attributes* and actions that we want to carry out with this data through the use of *methods* or *member functions*. This way, we can organize the information and processes in *objects* that have the properties and methods of a class. In today's laboratory experience you will practice defining a class and implementing some of its methods by completing a simple network sniffer. The sniffer captures all the internet protocol (IP) packets that flow through your computer in the lab, and some other packet information.
|
10
|
12
|
|
11
|
|
-##Objectives
|
|
13
|
+## Objectives
|
12
|
14
|
|
13
|
15
|
1. Practice the implementation and declaration of classes in C++.
|
14
|
16
|
2. Implement methods in a class.
|
|
@@ -17,9 +19,13 @@ When an object class we need to use in our program has not been predefined in a
|
17
|
19
|
|
18
|
20
|
Before you get to the laboratory you should have:
|
19
|
21
|
|
20
|
|
- 1. Reviewed the implementation and declaration of C++ classes
|
21
|
|
- 2. Studied the concepts and instructions for this laboratory session.
|
22
|
|
- 3. Taken the Pre-Lab quiz in Moodle
|
|
22
|
+1. Reviewed the implementation and declaration of C++ classes
|
|
23
|
+2. Studied the concepts and instructions for this laboratory session.
|
|
24
|
+3. Taken the Pre-Lab quiz in Moodle
|
|
25
|
+
|
|
26
|
+---
|
|
27
|
+
|
|
28
|
+---
|
23
|
29
|
|
24
|
30
|
## Communication among computers
|
25
|
31
|
|
|
@@ -37,7 +43,7 @@ To complicate things a little bit, each computer network card has an unique iden
|
37
|
43
|
|
38
|
44
|
---
|
39
|
45
|
|
40
|
|
-## Packet Sniffer
|
|
46
|
+## Simple Packet Sniffer
|
41
|
47
|
|
42
|
48
|
A packet sniffer (also known as packet analyzer, protocol analyzer, or network analyzer) is a computer program that can intercept and log traffic passing over a digital network, or network device. As data flow across the network, the sniffer captures each packet and, if needed decodes the packet's raw data[1].
|
43
|
49
|
|
|
@@ -68,12 +74,15 @@ Inside the payload, the IP packet contains various field, among them:
|
68
|
74
|
In this laboratory experience you will complete a simple packet sniffer that captures all the IP packets that flow through your laboratory computer, and some addtional information of the packets. Additinally it detects the non encrypted requests of images in the web, and displays the images in a GUI.
|
69
|
75
|
|
70
|
76
|
---
|
|
77
|
+
|
71
|
78
|
---
|
72
|
79
|
|
73
|
80
|
## Laboratory session:
|
74
|
81
|
|
75
|
82
|
The application that you will complete today allows the users to analyze network traffic and to monitor the images that are being tranfered through the net.
|
76
|
83
|
|
|
84
|
+Figure 2 shows an image of the application interface. Each row in the table is the information of each captured packet. The text box under the table presents a ASCII summary of a selected packet from the table. The list in the right presents the images that have been captured by the sniffer.
|
|
85
|
+
|
77
|
86
|
---
|
78
|
87
|
|
79
|
88
|
![](images/ss.png)
|
|
@@ -82,24 +91,23 @@ The application that you will complete today allows the users to analyze network
|
82
|
91
|
|
83
|
92
|
---
|
84
|
93
|
|
85
|
|
-
|
86
|
|
-Figure 2 shows an image of the application interface. Each row in the table is the information of each captured packet. The text box under the table presents a ASCII summary of a selected packet from the table. The list in the right presents the images that have been captured by the sniffer.
|
87
|
|
-
|
88
|
94
|
To create a packet sniffer you can use the *pcap* library that provides an interface to access the data passing across your network card. This library contains a function that returns a raw stream of bytes of each packet captured.
|
89
|
95
|
|
90
|
96
|
The task of the sniffer programmer to decode the raw stream into human readable information. Fortunately this is not your task, but you can learn how to do it, if you want, by reading the source code of this laboratory. Your task is to follow the exercises below so you provide the packet sniffer with the needed objects (Classes) to process the packets.
|
91
|
97
|
|
92
|
|
-## Exercise 1: Familiriaze your self with the application
|
|
98
|
+### Exercise 1 - Familiarize yourself with the application
|
|
99
|
+
|
|
100
|
+#### Instructions:
|
|
101
|
+
|
|
102
|
+1. Load the project `SimpleSniffer` into `QtCreator`. There are two ways to do this:
|
93
|
103
|
|
94
|
|
-Instructions
|
|
104
|
+ * Using the virtual machine: Double click the file `SimpleSniffer.pro` located in the folder `/home/eip/labs/classes-simplesniffer` of your virtual machine.
|
|
105
|
+ * Downloading the project’s folder from `Bitbucket`: Use a terminal and write the command `git clone http:/bitbucket.org/eip-uprrp/classes-simplesniffer` to download the folder `classes-simplesniffer` from `Bitbucket`. Double click the file `SimpleSniffer.pro` located in the folder that you downloaded to your computer.
|
95
|
106
|
|
96
|
|
- 1. To load this project you need to run qt creator with root privileges.
|
97
|
|
- ```sudo qtcreator Documents/eip/simplesniffer/SimpleSniffer.pro```
|
98
|
|
- 2.The project `SimpleSniffer` is in the directory `Documents/eip/simplesniffer` of your computer. You can also go to `http://bitbucket.org/eip-uprrp/classes-simplesniffer` to download the folder `classes-simplesniffer` to your computer.
|
99
|
|
- 3. Configure the project. The project consists of several files. In this laboratory you will be working with the files `ethernet_hdr.h`, `ethernet_packet.h`, `ethernet_packet.cpp`, `ip_packet.h` and `ip_packet.cpp`
|
|
107
|
+2. Configure the project. The project consists of several files. In this laboratory experience you will be working with the files `ethernet_hdr.h`, `ethernet_packet.h`, `ethernet_packet.cpp`, `ip_packet.h` and `ip_packet.cpp`.
|
100
|
108
|
|
101
|
109
|
|
102
|
|
-## Exercise 2: Complete the class ethernet_packet
|
|
110
|
+### Exercise 2: Complete the class ethernet_packet
|
103
|
111
|
|
104
|
112
|
Study the file `ethernet_hdr.h`. This file contains the definition of the data structure that represents an Ethernet header.:
|
105
|
113
|
|
|
@@ -149,24 +157,16 @@ public:
|
149
|
157
|
};
|
150
|
158
|
```
|
151
|
159
|
|
152
|
|
-Note that each object of the class `ethernet_packet` only has one attribute:
|
153
|
|
-
|
154
|
|
- * one structure of type `sniff_ethernet` named `ethernet`
|
|
160
|
+Note that each object of the class `ethernet_packet` only has one attribute: a structure of type `sniff_ethernet` named `ethernet`
|
155
|
161
|
|
156
|
162
|
The rest are methods that act as interface to the attribute:
|
157
|
163
|
|
158
|
|
-* `void setEtherDHost(u_char [])`: is a *setter* to the field `ether_dhost` of the attribute `ethernet`
|
159
|
|
-
|
160
|
|
-
|
161
|
|
-* `void setEtherSHost(u_char [])`: is a *setter* to the field `ether_shost` of the attribute `ethernet`
|
162
|
|
-
|
163
|
|
-* `void setEtherType(u_short)`: is a *setter* for the field `ether_type` of the attribute `ethernet`
|
164
|
|
-
|
165
|
|
-* `getEtherDHost()` and `getEtherSHost()` are *getters* that return the values of `ether_dhost` and `ether_shost` in a human readable format, i.e. 6 pairs of hexadecimal digits (for example, `e0:f8:47:01:e9:90`).
|
166
|
|
-
|
167
|
|
-* `getEtherType()` is a *getter* that returns the value of `ether_type` as *unsigned char*.
|
168
|
|
-
|
169
|
|
-* the private method `string mac2string(u_char [])` receives an array of six *unsigned characters* and returns the corresponding string to its hexadecimal representation. For example, if it receives `{ 0x8A, 0x11, 0xAB, 0xFF, 0x12, 0x34}` it must return the string `"8A:11:AB:FF:12:34"`.
|
|
164
|
+ * `void setEtherDHost(u_char [])`: is a *setter* to the field `ether_dhost` of the attribute `ethernet`
|
|
165
|
+ * `void setEtherSHost(u_char [])`: is a *setter* to the field `ether_shost` of the attribute `ethernet`
|
|
166
|
+ * `void setEtherType(u_short)`: is a *setter* for the field `ether_type` of the attribute `ethernet`
|
|
167
|
+ * `getEtherDHost()` and `getEtherSHost()` are *getters* that return the values of `ether_dhost` and `ether_shost` in a human readable format, i.e. 6 pairs of hexadecimal digits (for example, `e0:f8:47:01:e9:90`).
|
|
168
|
+ * `getEtherType()` is a *getter* that returns the value of `ether_type` as *unsigned char*.
|
|
169
|
+ * the private method `string mac2string(u_char [])` receives an array of six *unsigned characters* and returns the corresponding string to its hexadecimal representation. For example, if it receives `{ 0x8A, 0x11, 0xAB, 0xFF, 0x12, 0x34}` it must return the string `"8A:11:AB:FF:12:34"`.
|
170
|
170
|
|
171
|
171
|
Your task in this exercise is to implement the seven functions listed above in the file `ethetnet_packet.cpp`. The headers of some of the functions are provided in the file.
|
172
|
172
|
|