Differences

This shows you the differences between two versions of the page.

Link to this comparison view

eim:colocvii:colocviu02 [2018/05/17 20:58]
dragos.niculescu [Model de Subiect]
eim:colocvii:colocviu02 [2021/05/30 21:52] (current)
dan_valentin.bina [Observații Generale]
Line 7: Line 7:
 </​HTML>​ </​HTML>​
  
-{{url>​https://​ocw.cs.pub.ro/​courses/​_media/​eim/​colocvii/​colocviu02/​eim2018-tp02-varsim.pdf 90%,800px}}+{{url>​https://​ocw.cs.pub.ro/​courses/​_media/​eim/​colocvii/​colocviu02/​eim-colocviu2-exemplu.pdf 90%,800px}}
  
 <​HTML>​ <​HTML>​
Line 13: Line 13:
 </​HTML>​ </​HTML>​
  
-{{ :​eim:​colocvii:​colocviu02:​eim2018-tp02-varsim.pdf }}+{{ :​eim:​colocvii:​colocviu02:​eim-colocviu2-exemplu.pdf }}
  
 ===== Observații Generale ===== ===== Observații Generale =====
Line 53: Line 53:
 dependencies { dependencies {
   ...   ...
-  ​compile ​group: '​cz.msebera.android',​ name: '​httpclient',​ version: '​4.4.1.2'​+  ​implementation ​group: '​cz.msebera.android',​ name: '​httpclient',​ version: '​4.4.1.2'​
 } }
 </​file>​ </​file>​
Line 67: Line 67:
 dependencies { dependencies {
   ...   ...
-  ​useLibrary ​'​org.apache.http.legacy'​+  ​implementation ​'​org.apache.http.legacy'​
 } }
 </​file>​ </​file>​
Line 79: Line 79:
 dependencies { dependencies {
   ...   ...
-  ​compile ​project (':​jsoup-1.10.2'​)+  ​implementation ​project (':​jsoup-1.10.2'​)
 } }
 </​file>​ </​file>​
Line 99: Line 99:
 ===== Rezolvări ===== ===== Rezolvări =====
  
-Proiectul Android Studio corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului sunt disponibile pe [[https://​github.com/​eim2017/​PracticalTest02|contul de Github al disciplinei]].+Proiectul Android Studio corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului sunt disponibile pe [[https://​github.com/​eim-lab/​PracticalTest02|contul de Github al disciplinei]].
  
 **1.** **a)** Se accesează [[https://​www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. **1.** **a)** Se accesează [[https://​www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//.
Line 127: Line 127:
  
 <​code>​ <​code>​
-student@eim2017:~$ git clone https://​www.github.com/​perfectstudent/​PracticalTest02+student@eim:~$ git clone https://​www.github.com/​perfectstudent/​PracticalTest02
 </​code>​ </​code>​
  
Line 424: Line 424:
   * în situația în care informațiile meteorologice se găsesc în obiectul gestionat de server, sunt preluate local;   * în situația în care informațiile meteorologice se găsesc în obiectul gestionat de server, sunt preluate local;
   * în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță:   * în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță:
-    * se realizează o cerere de tip ''​POST''​ la adresa Internet [[http://​www.wunderground.com/​cgi-bin/​findweather/​getForecast]];​ parametrul care trebuie precizat este ''​query''​ și are valoarea orașului pentru care se dorește să se obțină informațiile;​ acesta se atașează cererii de tip ''​POST'',​ folosind codificarea ''​UTF-8'';​ +    * o cerere de tip ''​GET''​ în care valoarea parametrului este inclusă în cadrul adresei Internet: [[http://api.openweathermap.org/data/2.5/weather?q=Bucharest&​appid=...]]);
-    * alternativ, se poate realiza ​o cerere de tip ''​GET''​ în care valoarea parametrului este inclusă în cadrul adresei Internet: [[https://www.wunderground.com/cgi-bin/findweather/getForecast?query=...]]);+
     * se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; ​     * se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; ​
     * folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html>     * folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html>
-<​script>​ +{ 
-  ​wui.asyncCityPage = true; +  "coord"
-  wui.bootstrapped.API = ""​+    "lon": ​26.11, 
-  wui.api_data = +    "lat": 44.43 
-  ​+  }
-    "response": ​+  "weather": ​[ 
-      "​version":​ "2.0", +    { 
-      "​units":​ "​metric",​ +      "id": ​804
-      "​location":​ { +      "main": "Clouds", 
-        "​name":​ "​Bucuresti",​ +      "description": "overcast clouds", 
-        "​neighborhood":​null,​ +      "icon": "04n"
-        "​city":​ "​Bucuresti",​ +
-        "​state":​ null, +
-        "​state_name":"​Romania",​ +
-        "​country":​ "​RO",​ +
-        "​country_iso3166":​null,​ +
-        "​country_name":"​Romania",​ +
-        "​zip":"​00000",​ +
-        "​magic":"​11"+
-        "wmo":"​15420",​ +
-        "​latitude":44.50000000, +
-        "​longitude":​26.12999916+
-        "elevation":91.00000000,​ +
-        "​l":​ "/​q/​zmw:​00000.11.15420"​ +
-      }, +
-      "date": ​+
- ... +
-      }+
-      "current_observation": ​+
-        ​"source":​ "PWS", +
-        "station": ​+
-          ...  +
-        }, +
-        ​"estimated": null+
-        "date": ​+
-          ... +
-        }, +
-        ​"metar": "AAXX 16161 15420 22997 80502 10201 20109 30072 40180 55008 8807/ 333 55300 0//// 20454",​ +
-        "​condition":"​Overcast",​ +
-        "​temperature":​ 21.5, +
-        "​humidity":​48,​ +
-        "​wind_speed":​6.9,​ +
-        ..., +
-        "​pressure":​ 1018, +
-        ..., +
-      }+
     }     }
-  ​}; +  ​], 
-</​script>​ +  "​base":​ "​stations",​ 
-</​code>​ Se observă faptul că informațiile necesare se regăsesc în cadrul unei etichete de tip ''<​script> ​... </​script>''​ care conține un obiect denumit ''​wui.api_dat''​ exprimat în format JSONÎn acest sensse obține lista tuturor etichetelor de tip ''​script''​ (se folosește metoda ''​getElementsByTag()''​)se preia conținutul acestora (prin intermediul metodei ''​data()''​ din cadrul clasei ''​Element''​) și se verifică dacă se regăsește șirul de caractere ''​wui.api_dat'';​+  "​main":​ { 
 +    "​temp":​ 284.65, 
 +    "​feels_like":​ 283.92, 
 +    "​temp_min":​ 283.15, 
 +    "​temp_max":​ 285.93, 
 +    "​pressure":​ 1016, 
 +    "​humidity":​ 81 
 +  }, 
 +  "​visibility":​ 10000, 
 +  "​wind":​ { 
 +    "​speed":​ 0.5, 
 +    "​deg":​ 310 
 +  }, 
 +  "​clouds":​ { 
 +    "​all":​ 88 
 +  }, 
 +  "​dt":​ 1588887122,​ 
 +  "​sys":​ { 
 +    "​type":​ 1, 
 +    "​id":​ 6911, 
 +    "​country":​ "​RO",​ 
 +    "​sunrise":​ 1588906577,​ 
 +    "​sunset":​ 1588958868 
 +  }, 
 +  "​timezone":​ 10800, 
 +  "​id":​ 683506, 
 +  "​name":​ "​Bucharest",​ 
 +  "​cod":​ 200 
 +
 +</​code> ​
     * se inspectează documentul în format JSON pentru a obține informațiile necesare: se obțin, succesiv, obiectele atașate ca valori pentru cheile ''​response''​ → ''​current_observation''​ și ulterior datele meteorologice,​ regăsite ca valori sub cheile ''​temperature'',​ ''​wind_speed'',​ ''​condition'',​ ''​pressure'',​ ''​humidity'';​     * se inspectează documentul în format JSON pentru a obține informațiile necesare: se obțin, succesiv, obiectele atașate ca valori pentru cheile ''​response''​ → ''​current_observation''​ și ulterior datele meteorologice,​ regăsite ca valori sub cheile ''​temperature'',​ ''​wind_speed'',​ ''​condition'',​ ''​pressure'',​ ''​humidity'';​
     * se construiește un obiect de tipul ''​WeatherForecastInformation''​ folosind informațiile furnizate și se transmite către server pentru ca acesta să fie utilizat ulterior pentru cereri provenite de la alți clienți, vizând același oraș.     * se construiește un obiect de tipul ''​WeatherForecastInformation''​ folosind informațiile furnizate și se transmite către server pentru ca acesta să fie utilizat ulterior pentru cereri provenite de la alți clienți, vizând același oraș.
Line 724: Line 717:
  
 <​code>​ <​code>​
-student@eim2017:~$ nc 192.168.56.101 5000+student@eim:~$ nc 192.168.56.101 5000
 Bucuresti Bucuresti
 all all
Line 737: Line 730:
  
 <​code>​ <​code>​
-C:\Users\Eim2017> telnet 192.168.56.101 5000+C:\Users\Eim> telnet 192.168.56.101 5000
 Bucuresti Bucuresti
 all all
Line 758: Line 751:
  
 <​code>​ <​code>​
-student@eim2017:​~/​PracticalTest02$ git add * +student@eim:​~/​PracticalTest02$ git add * 
-student@eim2017:​~/​PracticalTest02$ git commit -m "​finished tasks for PracticalTest02"​ +student@eim:​~/​PracticalTest02$ git commit -m "​finished tasks for PracticalTest02"​ 
-student@eim2017:​~/​PracticalTest02$ git push origin master+student@eim:​~/​PracticalTest02$ git push origin master
 </​code>​ </​code>​
  
Line 766: Line 759:
  
 <​code>​ <​code>​
-student@eim2017:​~/​PracticalTest02$ git config --global user.name "​Perfect Student"​ +student@eim:​~/​PracticalTest02$ git config --global user.name "​Perfect Student"​ 
-student@eim2017:​~/​PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro+student@eim:​~/​PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro
 </​code>​ </​code>​
 +<​hidden>​
 **6.** Protocolul SIP pornește de la o presupunere optimistă conform căreia atât sursa cât și destinația se găsesc în cadrul aceluiași sistem autonom, astfel încât nu sunt necesare credențiale pentru autentificare. Din acest model, o cerere de tip ''​REGISTER''​ se transmite inițial de către user agent fără aceste informații. În condițiile în care răspunsul furnizat de registration server este //Status: 401 Unauthorized//,​ mesajul este retransmis împreună cu informațiile necesare identificării (SIP Authorization ID, Password). Se poate observa că dimensiunile celor două pachete sunt diferite (mesajul fără credențiale 1095 octeți, mesajul cu credențiale 1249 octeți). În cazul în care informațiile de autentificare sunt valide, răspunsul va fi //Status: 200 OK//. **6.** Protocolul SIP pornește de la o presupunere optimistă conform căreia atât sursa cât și destinația se găsesc în cadrul aceluiași sistem autonom, astfel încât nu sunt necesare credențiale pentru autentificare. Din acest model, o cerere de tip ''​REGISTER''​ se transmite inițial de către user agent fără aceste informații. În condițiile în care răspunsul furnizat de registration server este //Status: 401 Unauthorized//,​ mesajul este retransmis împreună cu informațiile necesare identificării (SIP Authorization ID, Password). Se poate observa că dimensiunile celor două pachete sunt diferite (mesajul fără credențiale 1095 octeți, mesajul cu credențiale 1249 octeți). În cazul în care informațiile de autentificare sunt valide, răspunsul va fi //Status: 200 OK//.
  
 {{ :​eim:​laboratoare:​laborator09:​wireshark01.png?​nolink&​800 }} {{ :​eim:​laboratoare:​laborator09:​wireshark01.png?​nolink&​800 }}
 +</​hidden>​
  
-**7.** Se configurează ''​avahi-daemon''​ (fișierul ''/​etc/​avahi/​services/​chat.service''​) astfel:+**6.** Se configurează ''​avahi-daemon''​ (fișierul ''/​etc/​avahi/​services/​chat.service''​) astfel:
 <code xml> <code xml>
 <?xml version="​1.0"​ standalone='​no'?>​ <?xml version="​1.0"​ standalone='​no'?>​
Line 787: Line 781:
 </​code>​ </​code>​
  
-**8.** Folosind utilitarul din linie de comandă ''​avahi-browse''​ cu parametrii ''​-rca''​ se capturează mesajele advertisment și se identifică interfețele raportate din output.+    ​se restarteaza demonul  
 +<code shell> ​  
 +root@eg106:​~#​ /​etc/​init.d/​avahi-daemon restart 
 +[ ok ] Restarting avahi-daemon (via systemctl): avahi-daemon.service. 
 +root@eg106:​~#​ </​code>​  
 + 
 +**7a.** Folosind utilitarul din linie de comandă ''​avahi-browse''​ cu parametrii ''​-rca''​ se capturează mesajele advertisment și se identifică interfețele raportate din output.
  
 Exemplu de output: Exemplu de output:
Line 846: Line 846:
    txt = []    txt = []
 </​code>​ </​code>​
 +
 +Numele de masina publicat este ''​eg106-2.local'',​ pe interfețele vmnet1, vmnet8, docker0, eno1, etc. IP-urile sunt respectiv: ''​192.168.207.1,​ 172.16.238.1,​ 172.17.0.1, ​ 172.16.4.53'',​ etc. 
 +
 +**7b.** Să se captureze în emulator publicarea serviciului. Ce adresă IPv4 este folosită în advertisement?​ Răspuns: ​
 +
 +<code shell>
 +root@eg106:​~#​ adb shell 
 +root@vbox86p:/​ # tcpdump -ni eth0 'udp port 5353' ​
 +# atenție eth1 în configurația default este NAT-ul către internet, acolo nu este nimeni (din DNS-SD)!
 +... 
 +06:​39:​44.024608 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0*- [0q] 2/​0/​0[|domain]
 +06:​39:​44.207351 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0 [2n][|domain]
 +06:​39:​44.207385 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0 [2n] ANY (QM)? My desktop._myservice._tcp.local. (91)
 +06:​39:​44.458079 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0 [2n][|domain]
 +06:​39:​44.458108 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0 [2n] ANY (QM)? My desktop._myservice._tcp.local. (91)
 +06:​39:​44.708406 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0 [2n][|domain]
 +06:​39:​44.708439 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0 [2n] ANY (QM)? My desktop._myservice._tcp.local. (91)
 +06:​39:​44.909356 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0*- [0q] 6/​0/​0[|domain]
 +06:​39:​44.909381 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0*- [0q] 5/​0/​0[|domain]
 +06:​39:​45.156505 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0*- [0q] 2/​0/​0[|domain]
 +06:​39:​45.156532 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0*- [0q] 1/0/0 (111)
 +06:​39:​45.240427 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0 [2q] PTR (QM)? _ipp._tcp.local.[|domain]
 +06:​39:​45.240458 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0 [2q] PTR (QM)? _ipp._tcp.local. PTR (QM)? _ipps._tcp.local. (45)
 +06:​39:​46.041712 IP 192.168.60.1.5353 > 224.0.0.251.5353:​ 0*- [0q] 6/​0/​0[|domain]
 +06:​39:​46.041740 IP6 fe80::​800:​27ff:​fe00:​4.5353 > ff02::​fb.5353:​ 0*- [0q] 5/​0/​0[|domain]
 +</​code>​
 +
 +Se foloseste adresa ''​192.168.60.1'' ​
 +
eim/colocvii/colocviu02.1526579935.txt.gz · Last modified: 2018/05/17 20:58 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0