This shows you the differences between two versions of the page.
|
isrm:laboratoare:v2:01 [2024/06/27 22:44] mbarbulescu [Task 01: Analiza PCAP] |
isrm:laboratoare:v2:01 [2024/06/28 09:48] (current) mbarbulescu [Task 03: Basic plot] |
||
|---|---|---|---|
| Line 113: | Line 113: | ||
| <code bash> | <code bash> | ||
| - | root@isrm-vm:/home/student/isrm# ls *.pcap | + | root@isrm-vm:/home/student/isrm$ ls *.pcap |
| AccessPoint-0-0.pcap Station-1-0.pcap | AccessPoint-0-0.pcap Station-1-0.pcap | ||
| </code> | </code> | ||
| + | |||
| + | <note important> | ||
| + | Dacă vreți să accesați de pe mașina fizică/virtuală din care rulați docker image-ul fișierele din interiorul docker image, acestea sunt montate prin [[https://docs.docker.com/storage/storagedriver/overlayfs-driver/|overlayfs]] și sunt configurate să fie accesibile din folderul: ''~/.isrm2024/merge'' | ||
| + | |||
| + | (presupunând că ați rulat scriptul de build cu parametru numele mașinii ''isrm2024'') | ||
| + | </note> | ||
| Filtrați și afișați doar pachetele TCP. Fără a citi codul simulării și nici descrierea de la începutul sursei, ci doar PCAP-urile, care credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0? | Filtrați și afișați doar pachetele TCP. Fără a citi codul simulării și nici descrierea de la începutul sursei, ci doar PCAP-urile, care credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0? | ||
| Line 139: | Line 145: | ||
| <code bash> | <code bash> | ||
| - | student@isrm-vm:~/ns-3-dev$ tshark -T fields -e frame.time_epoch \ | + | root@isrm-vm:/home/student/isrm$ tshark -T fields -e frame.time_epoch \ |
| -e frame.number -e ip.src \ -r ./AccessPoint-0-0.pcap '(ip.proto == 6) && (ip.src == 10.0.0.1)' > frames.txt | -e frame.number -e ip.src \ -r ./AccessPoint-0-0.pcap '(ip.proto == 6) && (ip.src == 10.0.0.1)' > frames.txt | ||
| </code> | </code> | ||
| Line 176: | Line 182: | ||
| ===== Task 02: Analiza trace-ului ASCII ===== | ===== Task 02: Analiza trace-ului ASCII ===== | ||
| - | Mecanismul de [[https://www.nsnam.org/docs/tutorial/html/tracing.html|tracing din ns-3]] ne permite să logăm și în format ASCII evenimentele. Rulați simularea aferentă laboratorului 3 astfel: | + | Mecanismul de [[https://www.nsnam.org/docs/tutorial/html/tracing.html|tracing din ns-3]] ne permite să logăm și în format ASCII evenimentele. Rulați simularea: |
| <code bash> | <code bash> | ||
| Line 205: | Line 211: | ||
| Apoi urmează o serie de nume de clase din [[https://www.nsnam.org/doxygen/group__attribute.html|sistemul de atribute al ns-3]] (''ns3::Ipv4Header, ns3::TcpHeader'') și cu o listă de trace-uri specifice clasei respective. | Apoi urmează o serie de nume de clase din [[https://www.nsnam.org/doxygen/group__attribute.html|sistemul de atribute al ns-3]] (''ns3::Ipv4Header, ns3::TcpHeader'') și cu o listă de trace-uri specifice clasei respective. | ||
| + | ===== Task 03: Basic plot ===== | ||
| + | Ne propunem să validăm și că funcționează generarea de grafice, lucru pe care îl vom folosi la toate laboratoarele. | ||
| + | |||
| + | Descarcati fișierul de date numit **plotting_data1.csv** ce conține: | ||
| + | <file csv plotting_data1.csv> | ||
| + | # comentarii | ||
| + | # X Y | ||
| + | 1 2 | ||
| + | 2 3 | ||
| + | 3 2 | ||
| + | 4 1 | ||
| + | </file> | ||
| + | |||
| + | Pe baza acestor date, graficul poate fi construit folosind urmatorul template (pe care il puteti folosi si la restul laboratoarelor): | ||
| + | |||
| + | <code python> | ||
| + | import copy | ||
| + | import numpy as np | ||
| + | import matplotlib | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | # Calea absoluta catre fisierul de date din care citim | ||
| + | # TODO - trebuie inlocuita cu calea corecta | ||
| + | DATA_FILE = 'plotting_data1.csv' | ||
| + | columns = ['x', 'y'] | ||
| + | |||
| + | # Citim datele din fisier | ||
| + | # Argumentul delimiter precizeaza care este delimitatorul dintre coloane | ||
| + | # Argumentul skip_header precizeaza cate linii nu vor fi citite pornind cu inceputul fisierului | ||
| + | # Argumentul names este unul foarte util deoarece permite asocierea de nume pentru coloanele din fisier si | ||
| + | # de asemenea duce la un acces foarte usor al datelor in script. In acest exemplu, names va fi egal cu ['x', 'y'] | ||
| + | # ceea ce inseamna ca putem accesa valorile din prima coloana prin sim_data['x']. | ||
| + | # Argumentul dtype setat specifica modul in care vor fi interpretate coloanele (string-urile ca string-uri, float-urile ca float-uri). | ||
| + | # In absenta acestui argument, valorile din coloane vor fi interpretate ca float. | ||
| + | sim_data = np.genfromtxt(DATA_FILE, delimiter=' ', skip_header=2, names=columns, dtype=None) | ||
| + | |||
| + | def plot_data(sim_data): | ||
| + | data = copy.deepcopy(sim_data) | ||
| + | |||
| + | # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite | ||
| + | # Prin figsize se specifica dimensiunea graficului | ||
| + | fig, ax = plt.subplots(figsize=(12,12)) | ||
| + | # Valori stilistice pentru grafic | ||
| + | ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) | ||
| + | # Denumirile axelor Ox si Oy, precum si titlul graficului | ||
| + | plt.xlabel('X values') | ||
| + | plt.ylabel('Y values') | ||
| + | plt.title('A very nice looking plot') | ||
| + | |||
| + | # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului | ||
| + | ax.plot(data['x'], data['y'], label='My plot') | ||
| + | ax.legend() | ||
| + | | ||
| + | plt.savefig("l1t3.png") | ||
| + | |||
| + | if __name__ == '__main__': | ||
| + | plot_data(sim_data) | ||
| + | </code> | ||
| + | Verificați după rulare că în folderul din docker aveți fișierul ''l1t3.png''. De asemenea, pentru că folosim [[https://docs.docker.com/storage/storagedriver/overlayfs-driver/|overlayfs]] puteți accesa de pe mașina fizică/virtuală din care rulați docker-ul din folderul: ''~/.isrm2024/merge/l1t3.png'' presupunând că la build ati folosit ca parametru numele docker image-ului ''isrm2024''. | ||