tags: SK, p1
---
# Sieci komputerowe tracerouting
## OPIS ZADANIA - w pdf'ie
**PIERWSZA CZĘŚĆ** <span style="color:green">**DONE**</span>
1. Wysłać 3 pakiety ICMP echo request z ustalonym TTL.
* jeden za drugim, bez czekania na odpowiedź
* stworzyć gniazdo
* stworzyć pakiet do wysłania
* zmienić opcje TTL socket'a
* wysłać pakiet
**DRUGA CZĘŚĆ** :rocket:
1. Odebrać z gniazda odpowiedzi na te pakiety.
* nie czekać na ich nadejście dłużej niż sekundę.
2. Jeśli wszystkie 3 odpowiedzi przyjdą szybciej niż po sekundzie, należy od razu przejść do kolejnego punktu.
3. Ewentualne odpowiedzi na pakiety z poprzednich iteracji (czyli tych iteracji, w których wysyłaliśmy pakiety z mniejszymi martościami TTL) zignorować.
* JAK WYSKOROBAĆ POTRZEBNE INFORMACJE Z PAKIETU:
* ip_addr **DONE**
* ttl **???**
**TRZECIA CZĘŚĆ**
1. Wyświetlić adres IP routera, od którego nadejdą komunikaty i średni czas odpowiedzi w milisekundach.
* W przypadku braku odpowiedzi od jakiegokolwiek routera należy wyświetlić *.
* W przypadku odpowiedzi od więcej niż jednego routera należy wyświetlić wszystkie odpowiadające.
* W przypadku nieotrzymania trzech odpowiedzi w ustalonym czasie zamiast średniego czasu odpowiedzi należy wyświetlić ???
2. Po iteracji, w której otrzymamy odpowiedź od docelowego komputera, należy przestać zwiększać *TTL* i zakończyć program.
[**<span style="color:gray">PYTANIA</span>**]
* czym jest *TTL*?
* *TTL* - czas życia pakietu, *TTL* definiuje jak długo wysłany pakiet danych może krążyć w sieci przechodząc od jednego routera do drugiego.
* jak wypełnić pola struktury *icmp* ???
## MATERIAŁY
* slajdy z wykładu:
* https://skos.ii.uni.wroc.pl/pluginfile.php/55929/mod_resource/content/2/lec2.pdf
* ping stack:
* https://stackoverflow.com/questions/9688899/sending-icmp-packets-in-a-c-program
* github examples:
* https://gist.github.com/leonid-ed/909a883c114eb58ed49f
* how to receve stack:
* https://stackoverflow.com/questions/13543554/how-to-receive-icmp-request-in-c-with-raw-sockets