-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.html
306 lines (161 loc) · 40 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>README</title>
<link rel="stylesheet" href="https://stackedit.io/res-min/themes/base.css" />
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
</head>
<body><div class="container"><h1 id="tin">TIN</h1>
<p>Celem zadania jest implementacja serwera, umożliwiającego wykonywanie mapowań połączeń pomiędzy ruterami. Zachowanie algorytmu traceroutingu zgodne jest z działaniem programu tracert ze środowiska MS Windows - program wysyła komunikaty ICMP ECHO_REQUEST z kolejnymi wartościami pola TTL i oczekuje komunikatów ICMP TIME_EXCEEDED. Zlecenie wykonania zadania oraz odbiór wyników wykorzystuje połączenie z wykorzystaniem protokołu HTTP i notacji/składni JSON. Program będzie zrealizowany w środowisku Linuks.</p>
<h2 id="uruchamianie-programu">Uruchamianie programu</h2>
<p>Program będzie uruchamiany w środowisku Linuks za pomocą przykładowej instrukcji: <b>./traceroutemapper [PLIK]</b>, gdzie argumenty między nawiasami kwadratowymi są opcjonalne. PLIK to ścieżka (jeśli podamy samą nazwę program sproboje znaleźć ten plik w folderze w ktorym znajduje sie wykonywany program), do miejsca gdzie znajduje się plik konfiguracyjny. W przypadku braku argumentu PLIK domyślnie wczytywane są dane konfiguracyjne wpisane w projekcie.</p>
<h2 id="plik-konfiguracyjny-domyślne-dane-w-kodzie">Plik konfiguracyjny (domyślne dane w kodzie)</h2>
<p>port_number:8080 <br>
ip_address:127.0.0.1 <br>
max_ttl:20 <br>
max_packets_per_ttl:8 <br>
freq:3 <br>
timeout:20 <br>
repo_path: <br>
size_limit:100000</p>
<h2 id="podział-na-moduły">Podział na moduły</h2>
<h4 id="moduł-1-kontakt-poprzez-protokół-http-za-pomocą-jsonów">Moduł 1: Kontakt poprzez protokół HTTP za pomocą JSON’ów:</h4>
<p>Odbiera prośby spoza serwera oraz zwraca dane.</p>
<h4 id="moduł-2-tracer">Moduł 2: Tracer:</h4>
<p>Na podstawie żądań uzyskanych z <b>Modułu 3.</b> buduje pakiety i na ich bazie wykonuje zadanie traceroutingu.</p>
<h4 id="moduł-3-centrum-kontroli-danych">Moduł 3: Centrum kontroli danych:</h4>
<p>Obsługuje dwie kolejki żądań: od <b> Modułu 1.</b> i <b> Modułu 2.</b> (może również żądać wykonywania zadań). Na ich podstawie dokonuje parsowania danych do formy rozumianej przez konkretne moduły i przesyłania ich do bazy lub wyciągania z bazy w celu dalszej obróbki i zwrócenia żądanych danych.</p>
<div class="sequence-diagram"><svg height="723" version="1.1" width="860.3671875" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="overflow: hidden; position: relative; left: -0.5px; top: -0.203125px;"><desc style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Created with Raphaël 2.1.2</desc><defs style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><marker id="raphael-marker-endblock55-obj57" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj60" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj63" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj66" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj69" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj72" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj77" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj80" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj83" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj86" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj89" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj92" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj97" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj100" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker><marker id="raphael-marker-endblock55-obj103" markerHeight="5" markerWidth="5" orient="auto" refX="2.5" refY="2.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#raphael-marker-block" transform="rotate(180 2.5 2.5) scale(1,1)" stroke-width="1.0000" fill="#000" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></use></marker></defs><rect x="10" y="20" width="55.140625" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="19.984375" y="30" width="35.140625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="37.5703125" y="39.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Świat</tspan></text><rect x="10" y="664" width="55.140625" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="19.984375" y="674" width="35.140625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="37.5703125" y="683.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Świat</tspan></text><path fill="none" stroke="#000000" d="M37.5703125,59L37.5703125,664" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="190.65625" y="20" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="200.640625" y="30" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="225.5859375" y="39.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 1</tspan></text><rect x="190.65625" y="664" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="200.640625" y="674" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="225.5859375" y="683.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 1</tspan></text><path fill="none" stroke="#000000" d="M225.5859375,59L225.5859375,664" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="384.46875" y="20" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="394.453125" y="30" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="419.3984375" y="39.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 3</tspan></text><rect x="384.46875" y="664" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="394.453125" y="674" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="419.3984375" y="683.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 3</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,59L419.3984375,664" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="697.0078125" y="20" width="43.5" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="707" y="30" width="23.5" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="718.7578125" y="39.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Plik</tspan></text><rect x="697.0078125" y="664" width="43.5" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="707" y="674" width="23.5" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="718.7578125" y="683.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Plik</tspan></text><path fill="none" stroke="#000000" d="M718.7578125,59L718.7578125,664" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="760.5078125" y="20" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="770.5" y="30" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="795.4375" y="39.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 2</tspan></text><rect x="760.5078125" y="664" width="69.859375" height="39" rx="0" ry="0" fill="none" stroke="#000000" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><rect x="770.5" y="674" width="49.859375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="795.4375" y="683.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Moduł 2</tspan></text><path fill="none" stroke="#000000" d="M795.4375,59L795.4375,664" stroke-width="2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="47.5625" y="74.5" width="168.015625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="131.578125" y="84" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">JSON(prośba o traceroute)</tspan></text><path fill="none" stroke="#000000" d="M37.5703125,98C37.5703125,98,190.74004289600998,98,220.58121595656075,98" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj57)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="88.46875" y="113.5" width="86.203125" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="131.578125" y="123" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">JSON(nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M225.5859375,137C225.5859375,137,72.41620710399002,137,42.575034043439246,137" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj60)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="240.5625" y="152.5" width="163.828125" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="322.4921875" y="162" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Object(adresy IP + nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M225.5859375,176C225.5859375,176,383.99109284952283,176,414.38817588290294,176" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj63)" stroke-dasharray="6,2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="500.609375" y="191.5" width="136.90625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="569.078125" y="201" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Create(Name: nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,215C419.3984375,215,674.6192086301744,215,713.7497370163437,215" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj66)" stroke-dasharray="6,2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="525.5" y="230.5" width="163.828125" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="607.41796875" y="240" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Object(adresy IP + nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,254C419.3984375,254,745.9542251029052,254,790.4410731210744,254" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj69)" stroke-dasharray="6,2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="500.421875" y="269.5" width="213.96875" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="607.41796875" y="279" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Object(Wynik tracerouta + nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M795.4375,293C795.4375,293,468.8817123970948,293,424.3948643789256,293" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj72)" stroke-dasharray="6,2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="444.375" y="313" width="122.890625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="505.8359375" y="322.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Parsowanie danych</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,308L439.3984375,308" stroke-width="2" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><path fill="none" stroke="#000000" d="M439.3984375,308L439.3984375,342" stroke-width="2" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><path fill="none" stroke="#000000" d="M439.3984375,342C439.3984375,342,430.3175506591797,342,424.3936908841133,342" stroke-width="2" stroke-dasharray="0" marker-end="url(#raphael-marker-endblock55-obj77)" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="429.390625" y="347.5" width="279.359375" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="569.078125" y="357" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Save(Name: nr. zad; Data: dane z tracerouta)</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,371C419.3984375,371,674.6192086301744,371,713.7497370163437,371" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj80)" stroke-dasharray="6,2" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="88.46875" y="386.5" width="86.203125" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="131.578125" y="396" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">JSON(nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M37.5703125,410C37.5703125,410,190.74004289600998,410,220.58121595656075,410" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj83)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="276.03125" y="425.5" width="92.90625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="322.4921875" y="435" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Object(nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M225.5859375,449C225.5859375,449,383.99109284952283,449,414.38817588290294,449" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj86)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="501.875" y="464.5" width="134.390625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="569.078125" y="474" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Open(Nazwa: nr. zad)</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,488C419.3984375,488,674.6192086301744,488,713.7497370163437,488" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj89)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="466.921875" y="503.5" width="204.296875" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="569.078125" y="513" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">GetData(Data:dane z tracerouta)</tspan></text><path fill="none" stroke="#000000" d="M718.7578125,527C718.7578125,527,463.5370413698256,527,424.4065129836563,527" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj92)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="444.375" y="547" width="122.890625" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="505.8359375" y="556.5" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Parsowanie danych</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,542L439.3984375,542" stroke-width="2" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><path fill="none" stroke="#000000" d="M439.3984375,542L439.3984375,576" stroke-width="2" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><path fill="none" stroke="#000000" d="M439.3984375,576C439.3984375,576,430.3175506591797,576,424.3936908841133,576" stroke-width="2" stroke-dasharray="0" marker-end="url(#raphael-marker-endblock55-obj97)" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="235.578125" y="581.5" width="173.8125" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="322.4921875" y="591" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Object("dane sparsowane")</tspan></text><path fill="none" stroke="#000000" d="M419.3984375,605C419.3984375,605,260.99328215047717,605,230.59619911709706,605" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj100)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path><rect x="93.921875" y="620.5" width="75.296875" height="19" rx="0" ry="0" fill="#ffffff" stroke="none" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></rect><text x="131.578125" y="630" text-anchor="middle" font-family="Andale Mono, monospace" font-size="16px" stroke="none" fill="#000000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-family: 'Andale Mono', monospace; font-size: 16px;"><tspan dy="5.5" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">JSON(dane)</tspan></text><path fill="none" stroke="#000000" d="M225.5859375,644C225.5859375,644,72.41620710399002,644,42.575034043439246,644" stroke-width="2" marker-end="url(#raphael-marker-endblock55-obj103)" stroke-dasharray="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg></div>
<h2 id="struktury-danych">Struktury danych</h2>
<h4 id="json">JSON:</h4>
<p>Żądanie wykonania tracerouta(nr 1.):</p>
<pre class="prettyprint"><code class=" hljs r">{
<span class="hljs-string">"addresses"</span>: [
{
<span class="hljs-string">"address"</span>: <span class="hljs-string">"ip"</span>
},
{<span class="hljs-keyword">...</span>}]
}</code></pre>
<p>Zwrotka z numerem zadania(nr. 2):</p>
<pre class="prettyprint"><code class=" hljs json">{
"<span class="hljs-attribute">task</span>": <span class="hljs-value">nr
</span>}</code></pre>
<p>Zapytanie o dane z numeru zadania(nr 3.):</p>
<pre class="prettyprint"><code class=" hljs r">{
<span class="hljs-string">"tasks"</span>:[
{
<span class="hljs-string">"task"</span>: nr
},
{<span class="hljs-keyword">...</span>}]
}</code></pre>
<p>Dane z zadania(nr. 4):</p>
<pre class="prettyprint"><code class=" hljs r">{
<span class="hljs-string">"tasks"</span>:[
{
<span class="hljs-string">"task"</span>: nr,
<span class="hljs-string">"addresses"</span>:[
{
<span class="hljs-string">"traceroute"</span>: [
{
<span class="hljs-string">"address"</span>: <span class="hljs-string">"ip"</span>
},
{<span class="hljs-keyword">...</span>}]
},
{<span class="hljs-keyword">...</span>}]
},
{<span class="hljs-keyword">...</span>}
]
}</code></pre>
<h4 id="system-plików">System plików</h4>
<p>Zadania:</p>
<pre class="prettyprint"><code class=" hljs r">Nazwa: nr zadania
Treść: ip; ip; ip; ip; ip;\n ip; ip; ip; \n ip; ip; ip; ip; \n <span class="hljs-keyword">...</span></code></pre>
<h2 id="szczegółowy-opis-działania-modułów">Szczegółowy opis działania modułów</h2>
<h3 id="moduł-1">Moduł 1</h3>
<p>Moduł 1 odbiera JSON’y, przesyłane od kilenta za pomocą protokołu HTTP(POST). Następnie w zależności od danego żądania będzie wykonywał jedno z dwóch zadań. W przypadku błędnej struktury lub zbyt dużego rozmiaru JSON’a serwer zwraca błąd 400 BAD REQUEST z informacją typu JSON o powodzie błędu.</p>
<h4 id="dotraceroute">doTraceroute</h4>
<p>Moduł odbiera JSON’a z danymi do tracerouta (nr. 1), przekształca go do obiektu, nadaje unikalny numer zadania (który zwraca również w postaci JSON’a), a następnie umieszcza obiekt w kolejce oczekujących.</p>
<h4 id="getdata">getData</h4>
<p>Moduł odbiera JSON’a z numerami zadań (nr. 3). Wywołuje metodę Modułu 3. o dane o zadanym numerze. Jeśli w zwrocie dostaje dane, to parsuje je do JSON’a którego zwraca. Jeśli nie, zwraca ‘404 NOT FOUND’.</p>
<p>Moduł 1 działa na “jednym” samoklonującym się wątku, który w sytuacji odebrania żądania tworzy swojego klona, a sam zajmuje się wykonaniem zadanego zadania.</p>
<h4 id="parametry-dotyczące-modułu-1">Parametry dotyczące Modułu 1:</h4>
<p>Parametry przechowywane są w standardowym tekstowym pliku konfiguracyjnym ConfigFile.conf - jeden parametr odpowiadający jednej linii pliku:</p>
<p>port_number - numer portu, na którym nasłuchuje serwer</p>
<p>ip_address - adres IP, na którym nasłuchuje serwer</p>
<h3 id="moduł-2">Moduł 2</h3>
<p>Moduł nr 2 wykonuje właściwą operację traceroute pakietów. Podzielony jest na cztery zasadnicze elementy: wątek zarządcy, generator pakietów (działający w wątku wysyłającym), wątek wysyłający pakiety oraz wątek odbierający pakiety. Wykorzystuje protokół ICMP - internetowy protokół komunikatów kontrolnych. <br>
Moduł wysyła komunikaty ICMP ECHO_REQUEST (znane np. z programu ping) z kolejnymi wartościami pola TTL i oczekuje komunikatów TIME_EXCEEDED (przekroczony TTL) oraz ECHO_REPLY (pakiet dotarł do celu, koniec trasy).</p>
<h4 id="generator-pakietów">Generator pakietów:</h4>
<p>Ze względu na stosowanie protokołu ICMP zastosowany musi być tzw. “raw socket”, czyli gniazda umożliwiające wysyłkę i odbiór pakietów IP bez informacji warstwy transportu. Zastosowanie tego typu gniazd wymagana ręcznego tworzenia pakietów do wysłania, odpowiedzialny za to będzie obiekt klasy Generator pakietów. Tworzy on pakiety IP o zadanym Adresie docelowym oraz TTL (Time-To-Live), w którym zawarty będzie pakiet protokołu ICMP o typie komunikatu ECHO_REQUEST i określonych wartościach pól Sequence i Identifier. Identifier to całkowitoliczbowy identyfikator konkretnej śledzonej trasy, a Sequence to TTL pakietu.</p>
<h4 id="budowa-pakietu-icmp-echo">Budowa pakietu ICMP Echo:</h4>
<p>Nagłówek protokołu IP będzie budowany automatycznie, wykorzystując flagę IP_HDRINCL z API raw socket. <br>
Nagłówek ICMP oraz dane będą budowane ręcznie w następujący sposób: <br>
- Typ - typ wysyłanego komunikatu ICMP w naszym przypadku 08 - Echo request (1 oktet) <br>
- Kod - podtyp wiadomości, naśladując MS Windows, program wpisuje kod 00 (1 oktet) <br>
- Suma kontrolna - wyliczana na podstawie nagłówka pakietu ICMP oraz danych (2 oktety) <br>
- Identyfikator - reprezentujący numer zadania, używany do identyfikacji odpowiadających pakietów (2 oktety) <br>
- Numer sekwencji - reprezentujący TTL, jak identyfikator używany do identyfikacji odpowiadających pakietów (2 oktety)</p>
<p>Dane: 64 oktety zer.</p>
<h4 id="wątek-zarządcy">Wątek zarządcy</h4>
<p>Wątek zarządcy przyjmuje z kolejki wejściowej zadania do wykonania umieszczone tam przez Moduł 1. Następnie powołuje do życia wątek wysyłający, wątek odbierający i czeka na koniec ich pracy, wywołując następnie metodę zapisu Modułu 3, która zapisze wyznaczoną trasę do pliku.</p>
<h4 id="wątek-wysyłający">Wątek wysyłający</h4>
<p>Generuje za pomocą Generatora pakiety do wysłania, tworzy gniazdo i wysyła pakiety. Przy tworzeniu gniazda (korzystać z niego będzie również wątek odbierający) ustawia odpowiedni filtr, który ogranicza odbiór niepożądanych pakietów, np. ECHO_REQUEST.</p>
<h4 id="wątek-odbierający">Wątek odbierający</h4>
<p>Zastosowanie ICMP wraz z “raw socket” wymusza utworzenie jednego wątku odbierającego przez brak rozróżnienia portów. Jego zadaniem jest odbieranie wszystkich pakietów ICMP i ich interpretacja (możemy np. otrzymać pakiet zupełnie niezwiązany z zadaniem lub zdezaktualizowany).</p>
<h4 id="komunikacja-z-modułem-1">Komunikacja z Modułem 1</h4>
<p>Kolejka std::queue zabezpieczona dodatkowo semaforem, przechowująca struktury z adresami do traceroutingu. Dzięki semaforowi i funkcji sem_wait(), wątek zarządcy zawiesza się na pustej kolejce i pobiera z niej nowy element dopiero, gdy taki zostanie do niej wstawiony.</p>
<h4 id="komunikacja-z-modułem-3">Komunikacja z Modułem 3</h4>
<p>Komunikacja z Modułem 3 odbywa się w prosty sposób - wywoływana jest po prostu jego metoda zapisu rezultatu działań do pliku.</p>
<h4 id="synchronizacja-pomiędzy-wątkami-odbierającym-i-wysyłającym">Synchronizacja pomiędzy wątkami odbierającym i wysyłającym</h4>
<p>Sygnał SIGUSR1 to polecenie “kontynuuj wysyłanie pakietów”, wydawane wątkowi wysyłającemu przez wątek odbierający po odebraniu pakietu zidentyfikowanego jako odpowiedź na pakiet wysłany pobrany z kolejki. <br>
Wątek wysyłający odbiera sygnał poprzez funkcję pselect() z odpowiednią maską sygnałów. Funkcja ta przerywa się przy wystąpieniu jednego z niezamaskowanych sygnałów.</p>
<h4 id="warunki-śmierci-wątków">Warunki śmierci wątków</h4>
<ol>
<li>Wątek odbierający - wykonanie całej trasy.</li>
<li>Wątek odbierający - brak jakichkolwiek pakietów odebranych przez wątek odbierający przez czas określony w parametrach konfiguracyjnych. Gniazdo filtruje pakiety, więc próby wykonania operacji ping na naszym adresie nie będą powodować nieśmiertelności wątku.</li>
<li>Wątek wysyłający - przekroczenie TTL.</li>
<li>Wątek wysyłający - przekroczenie czasu oczekiwania na sygnał od wątku odbierającego.</li>
<li>Wątek wysyłający - śmierć wątku odbierającego.</li>
</ol>
<h4 id="algorytm-pojedynczej-operacji-traceroute-inicjowanej-przez-wątek-zarządcy-po-pobraniu-zadania">Algorytm pojedynczej operacji traceroute inicjowanej przez wątek zarządcy po pobraniu zadania:</h4>
<ol>
<li><p>Wątek zarządcy zapisuje dane dotyczące zadania w odpowiednich polach obiektu.</p></li>
<li><p>n = 1.</p></li>
<li><p>Wygeneruj za pomocą generatora pakiet o TTL = n, Identifier = numer zadania, Sequence = n, a następnie wyślij je.</p></li>
<li><p>Czekaj na sygnał od wątku odbierającego (funkcja pselect() o określonej wartości czasu aktywności timeout). <br>
Jeśli mamy kontynuować wysyłanie pakietów, n += 1 i wróć do punktu 4. <br>
Jeśli w czasie wyznaczonym przez parametr timeout nie otrzymano sygnału, wyślij kolejny pakiet o tym samym TTL i dekrementuj licznik możliwych powtórzeń max_packets_per_ttl dla danego TTL. <br>
Jeśli wyczerpano limit powtórzeń dla danego TTL, sprawdź, czy wątek odbierający żyje - jeśli tak, poczekaj dodatkowy czas na sygnał. Jeśli nie, zakończ pracę wątku wysyłającego.</p></li>
<li><p>Po zakończeniu traceroutingu wątek odbierający wykonuje metodę Modułu nr 3 przekazując wyznaczoną trasę lub jej fragment (struktura składająca się z nagłówka oraz listy adresów).</p></li>
</ol>
<h4 id="parametry-dotyczące-modułu-2">Parametry dotyczące Modułu 2:</h4>
<p>Parametry przechowywane są w pliku konfiguracyjnym programu razem z resztą parametrów dotyczących działania aplikacji.</p>
<p>max_ttl - domyślna wartość maksymalnego czasu życia pakietu.</p>
<p>max_packets_per_ttl - domyślna liczba pakietów wysyłanych do danego adresu z określoną wartościa TTL. Ze względu na brak gwarancji dostarczenia.</p>
<p>freq - częstotliwość wysyłania pakietów. Część zapór ogniowych może wykryć dużą liczba pakietów ICMP i zablokować dalszy ruch.</p>
<p>timeout - maksymalny czas oczekiwania na odpowiedź.</p>
<h3 id="moduł-3">Moduł 3</h3>
<p>Moduł trzy obsługuje dostęp do systemu plikow.</p>
<h4 id="interakcja-z-modułem-1">Interakcja z Modułem 1:</h4>
<ol>
<li>Odbiór żądania danych wynikowych: <br>
a. Brak gotowych. <br>
b. Sparsowanie danych i przesłanie do Modułu 1.</li>
</ol>
<h4 id="interakcja-z-modułem-1-1">Interakcja z Modułem 1:</h4>
<ol>
<li>Odebranie danych do zapisania: <br>
a. Stworzenie pliku w wersji roboczej(gdy nie wszystkie dane odebrane) - ‘taskNr’+’r’+’.txt’ <br>
b. Zmiana nazwy pliku z wersji roboczej na wersję gotową do odbioru - ‘taskNr’+’.txt’</li>
</ol>
<h4 id="interakcja-z-systemem-plików">Interakcja z systemem plików:</h4>
<ol>
<li>Dodanie nowego zadania (utwórz plik z dopiskiem ze niegotowy).</li>
<li>Dodanie danych z zadania (otworzenie, zapis).</li>
<li>Wyciągnięcie informacji o stanie zadania: <br>
a. Nieskończone. <br>
b. Gotowe - parsowanie danych.</li>
</ol></div></body>
</html>