reti e dintorni 2_new

Upload: rgaeta

Post on 07-Apr-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Reti e Dintorni 2_new

    1/19

    Reti e dintorniEadem mutata resurgo

    Aprile - Giugno 2008 N 2

  • 8/6/2019 Reti e Dintorni 2_new

    2/19

    2

    2008 Reti & Dintorni

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU

    Free Documentation License, Version 1.1 or any later version published by the Free Software

    Foundation;

    Number 2

    April 2008

    2008 Reti & Dintorni

    E' garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini

    della GNU Free Documentation License, Versione 1.1 o ogni versione successiva pubblicata dalla Free

    Software Foundation;

    Numero 2

    Aprile 2008

  • 8/6/2019 Reti e Dintorni 2_new

    3/19

    3

    INDICEINDICEEDITORIALE ...................................................................................................................................................... ......... .......4

    Programmazione Bash ................................................................................................................................................... ...4VIRTUAL SWITCHING SYSTEM ................................................................................................................... ......... ........5

    Hardware supportato .........................................................................................................................................................5Ridondanza ...................................................................................................................................................................... .5Multichassis EtherChannels (MEC) ................................................................................................................................ .6Descrizione dei possibili guasti del MEC e relative soluzioni ..................................................................................... ....6Dual-Active Detection ................................................................................................................................................... ...7

    Configurazione del Virtual Switching System (VSS) ....................................................................................................... ...8Assegnazione del Virtual Switch Domain e numerazione dei due switch ............................................................... ........8Configurazione del VSL ................................................................................................................................................ ...8Conversione dei due switch a Virtual Switch Mode ................................................................................................ ........8Configurazione del Enhanced PAgP Dual-Active Detection .......................................................................................... .9Configurazione del BFD ...................................................................................................................................................9

    TRACEROUTE DI LIVELLO 2 ........................................................................................................................................10INTRODUZIONE ................................................................................................................................................ ........ ..10

    ALGORITMO ...................................................................................................................................................... ........ ..10PROGRAMMA l2traceroute.sh ....................................................................................................................... ........ ......11

  • 8/6/2019 Reti e Dintorni 2_new

    4/19

    4

    EDITORIALEEDITORIALE

    Programmazione Bash

    In questo numero, abbiamo sviluppato un programma bash che permette iltraceroute di livello 2. Lo studio del programma pu permettere di approfondirealcune nozioni base della programmazione bash. Anche se non vengono spiegati isingoli comandi, e si ci concentra sull'algoritmo in generale, per fornire le basi aiveri programmatori, di riscrivere il tutto in un'altro linguaggio.Il traceroute di livello 2, un programma che nel passato ho sempre cercato e maitrovato. Su internet esiste un programma (l2trace) basato su php, che per perfunzionare devi conoscere le password degli apparati di rete. Io cercavo unqualcosa che si basasse soltanto su snmp e cdp, non trovandolo stato sviluppato,anche se in una versione ancora non completamente definitiva.L'altro articolo introduce la nuova funzionalit Cisco per i 6500, il VSS (VirtualSwitching System), che permette di superare le problematiche dovute a domini di

    spanning-tree troppo estesi.La filosofia della rivista basata sulla libera collaborazione dei lettori, e per lastesura degli articoli si rispettino le seguenti regole:

    - non sono ammessi articoli che riportino informazioni private, come nomidi clienti, indirizzi IP effettivi di una rete utilizzata da un cliente,configurazioni con password (in chiaro o criptate) utilizzateeffettivamente in una rete reale;

    - gli articoli devono essere scritti tramite Microsoft Word o Open OfficeWord, utilizzando come font Times New Roman con dimensione 10. Iltesto inoltre deve avere una formattazione di tipo giustificata e su duecolonne;

    - se possibile, si cerchi di dividere il testo in almeno due parti: la primaparte dovrebbe trattare largomento nella sua veste pi generale, mentre la

    seconda parte deve essere dedicata agli esempi particolari e specifici;- non sono ammessi articoli che trattino esattamente gli stessi argomentitrattati in numeri precedenti, ma nel caso si deve fare riferimentoallarticolo precedente e trattare solo gli eventuali approfondimenti nontrattati in precedenza;

    - la rivista inviata ai lettori che collaborano almeno con un articolo,pubblicato sulla rivista, in un anno;

    - la pubblicazione di unarticolo deciso in base allimportanzadellargomento trattato e alla qualit della descrizione;

    Roberto [email protected]

    mailto:[email protected]:[email protected]
  • 8/6/2019 Reti e Dintorni 2_new

    5/19

    5

    VIRTUAL SWITCHING SYSTEMR. Gaeta

    La Cisco nel quarto trimestre del 2007, ha rilasciato un nuovo modello di Supervisor per i 65XX, denominata 720-10GVSS1 (VS-S720-10G-3C/XL), la quale pu essere utilizzata o come una Supervisor tradizionale (tipo Sup720) o tramitela funzionalit di Virtual Switching System (VSS) [Le due modalit sono mutuamente esclusive]. Il VSS introduce in

    Cisco, ci che da anni gi presente su apparati di alto livello 3Com (con la funzionalit proprietaria XRN), e suapparati di alto livello Nortel (con la funzionalit MLT). Ognuna di queste funzionalit sono di tipo proprietario, e nonesiste attualmente uno standard che permetta linteroperabilit fra apparati di costruttori diversi.Il VSS configurato su una coppia di 65XX (con la 720-10G VSS), e connessi tra di loro almeno con due interfacce a 10Gb/s configurate come Virtual Switch Link (VSL), permette di combinare i due apparati 65XX, ognuno composto da Mslots, in un singolo apparato virtuale, il Virtual Core Switch, composto da 2M slots. Uno dei vantaggi pi importanti diquesta funzionalit, la possibilit di configurare laggregazione di canale (GigaEtherChannel) sui due uplink di unoswitch di distribuzione verso il Virtual Core Switch. In figura 1 viene mostrato un confronto tra un tradizionale centrostella ridondato, che utilizza lo spanning tree, e lutilizzo del sistema di Virtual Switching. Nel caso del VSS non sonopi presenti loop fra il centro stella e gli switch di distribuzione.

    Figure 1 Confronto fra larchitettura tradizionale (con Spanning Tree) e larchitettura di rete con la funzionalit

    VSS 1440

    Hardware supportato

    La funzionalit VSS supportata solo dalla supervisor VS-720-10G-3C o VS-720-10G-3CXL. La funzionalit diVirtual Switching Link (VSL) supportata soltanto dalle interfacce a 10Gb/s presenti sulla VS-720-10G o sul moduloWS-X6708-10GE. La banda minima raccomandata per la creazione di un VSL di 20 Gb/s. La banda massimapossibile per un VSL di 80 Gb/s.Il VSS supporta moduli switching con la CFC, DFC3C o DFC3XL e non supporta moduli switching conDFC3A/3B/3BXL.La funzionalit VSS supporta attualmente solo moduli switching della serie 67xx (con la CFC, DFC3C o DFC3XL),qualsiasi altro modulo non supportato rimane in stato di non alimentazione elettrica (powered off).

    Attualmente unici altri moduli supportati sono i NAM.La Cisco prevede in futuro di ampliare la compatibilit della funzionalit VSS, con altri moduli di servizio.

    Ridondanza

    A confronto della ridondanza di un singolo apparato 6500, dotato di due supervisor, un apparato virtuale ha le seguentiimportanti differenze:

    La supervisor attiva e quella in standby sono collocate in chassis differenti e usano il VSL per lo scambio delleinformazioni;

    La supervisor attiva controlla ambedue i chassis del VSS; La supervisor attiva gestisce i processi di controllo di livello 2 e 3 e gestisce i moduli presenti in ambedue i

    chassis; Ambedue le supervisor gestiscono la trasmissione del traffico dati (infatti lapparato VSS pu arrivare a gestire

    un massimo di 1440 Gb/s di traffico dati);1. Se la supervisor attiva si guasta, la supervisor in standby assume il ruolo di attiva;

    1 Altra denominazione usata da Cisco VSS 1440

  • 8/6/2019 Reti e Dintorni 2_new

    6/19

    6

    Sono due le tipologie di ridondanza fra la supervisor attiva e quella di standby:1. Stateful Switchover (SSO). Con questa modalit le due supervisor sono completamente sincronizzate,

    e nel caso di switchover la perdita di traffico dati ridotta al minimo:1. Un sistema VSS opera tramite SSO se e solo se sono contemporaneamente soddisfatti i

    seguenti requisiti:1. Le due supervisor operano con la stessa versione di firmware;

    2. La configurazione relativa al VSL identica su ambedue gli chassis;3. La modalit PFC la medesima su ambedue gli chassis;2. Processor Redundancy (RPR). Con questa modalit la supervisor standby solo parzialmente

    inizializzata, e i moduli switching presenti nello chassis della standby sono in modalit powered off.In caso di switchover, la supervisor standby completa la sua inizializzazione e alimenta i moduliswitching. In questa situazione il traffico dati ha uninterruzione di almeno due minuti:

    1. Un sistema VSS opera tramite RPR se almeno uno dei seguenti punti soddisfatto:1. Le due supervisor non operano con la stessa versione di firmware;2. La configurazione relativa al VSL non identica su ambedue gli chassis;3. La modalit PFC non la medesima;

    Se un singolo link fisico che appartiene al VSL, presenta un guasto, il VSL continua a funzionare con irimanenti links appartenenti al VSL;

    Se soltanto la funzionalit di VSL si guasta, e la supervisor attiva ancora funzionante, allora abbiamo che

    ambedue le supervisor diventano attive, e si devono attivare le funzionalit di Dual ActiveDetection (funzionalit descritta in seguito) che permette di risolvere questa problematica;

    Multichassis EtherChannels (MEC)

    Il Multichassis EtherChannels (MEC) sostanzialmente un EtherChannel con links provenienti da unapparato (switch,router o server) che si attestano su ambedue gli chassis di un VSS.Dal punto di vista di un VSS il MEC un EtrherChannel con delle funzionalit aggiuntive. Infatti il VSS, tramite ilMEC bilancia il carico in modo indipendente, cercando ove possibile di utilizzare il meno possibile il VSL per iltrasferimento dei dati. Un VSS supporta fino ad un massimo di 128 MECs. anche possibile connettere due o pi VSS tramite MEC come rappresentato in figura:

    Figure 2 Rappresentazione di collegamenti tra pi VSS tramite MEC

    Descrizione dei possibili guasti del MEC e relative soluzioni

    Guasto su tutti i links attestati sullo chassis attivo:o Se tutti i links attestati sullo chassis attivo si guastano, il MEC diventa un normale

    EtherChannel operativo sullo chassis standby. Il traffico dati che arriva sullo chassis attivo, eche deve arrivare allapparato connesso tramite il MEC, in questa situazione, deve attraversareil link VSL. I protocolli di controllo continuano ad operare sulla supervisor attiva;

    Guasto su tutti i links attivi sullo chassis standby:o Se tutti i links attestati sullo chassis standby si guastano, il MEC diventa un normale

    EtherChannel operativo sullo chassis attivo. Il traffico dati che arriva sullo chassis standby, e

    che deve arrivare allapparato connesso tramite il MEC, in questa situazione, deve attraversareil link VSL. I protocolli di controllo continuano ad operare sulla supervisor attiva; Guasto di tutti i links del MEC:

    o Perdita di connessione totale verso il VSS.

  • 8/6/2019 Reti e Dintorni 2_new

    7/19

    7

    Dual-Active Detection

    Lo scenario detto Dual-Active, si presenta in caso di completo guasto del VSL, ma con la supervisor attiva ancorafunzionale. In questo caso ambedue le supervisor diventano attive. Avremmo dunque due apparati che hanno gli stessiindirizzi IP, stesso Bridge ID, ecc. e ci pu creare problemi sulla rete. Per evitare ci il VSS deve rilevare lo scenario

    di Dual-Active e procedere a unazione di recovery.Il VSS supporta due metodi per il rilevamento dello scenario Dual-Active. Ambedue i metodi possono essere attivicontemporaneamente. I due metodi sono:

    Rilevamento tramite Enhanced PagP : Il PAgP un protocollo proprietario Cisco per il controllo di unEtherChannel. In modalit VSS il PAgP include un nuovo campo TLV il quale contiene lID dellochassis attivo. Inoltre per il rilevamento necessario che lapparato connesso tramite MEC al VSSabbia un firmware che possa interpretare correttamente questo nuovo campo. Gli apparati attualmentesono: 6500 con supervisor 720 o supervisor 32 che operano con il firmware IOS 12.2(33)SXH oversioni successive. Quando lo chassis standby rileva un perdita completa del VSL, esso diventa attivoe immediatamente invia pacchetti PAgP allo switch connesso tramite il MEC. Il pacchetto ha il nuovoID della nuova supervisor attiva. Ma in uno scenario Dual-Active laltra supervisor e anchessa rimastaattiva. Lo switch connesso tramite MEC al VSS interpreta ed invia linformazione ad ambedue gliapparati. Lo chassis che era precedetemente attivo rileva questa informazione e inizia a mettere in

    shutdown tutte le interfacce non-VSL (con leventuale eccezione di interfacce configurate manualmenteper escluderle dalloperazione di shutdown). In questo modo uno degli apparati praticamente isolatodalla rete, e si pone in attesa che il link VSL riprenda a funzionare. Quando entrambi gli chassisrilevano che il VSL di nuovo operativo, il precedente chassis attivo diventa lo standby;

    Figure 3 Rappresentazione grafica del rilevamento del Dual-Active tramite Enhanced PAgP

    Rilevamento tramite IP BFD : Il secondo metodo usa il protocollo BFD (Bidirectional ForwardingDetection), il quale deve essere implementato tramite uno o pi link punto-punto di livello 3 tra i dueapparati che formano il VSS. Se il VSL si guasta entrambi gli chassis creano dei neighbors BFD, eprovano a stabilire unadiacenza. Se loriginale chassis attivo riceve unadiacenza, allora siamo in unDual-Active scenario, e dunque inizia a mettere in shutdown tutte le interfacce non-VSL (conleventuale eccezione di interfacce configurate manualmente per escluderle dalloperazione dishutdown). In questo modo uno degli apparati praticamente isolato dalla rete, e si pone in attesa che illink VSL riprenda a funzionare. Quando entrambi gli chassis rilevano che il VSL di nuovo operativo,il precedente chassis attivo diventa lo standby;

    Figure 4 Rappresentazione grafica del rilevamento del Dual-Active tramite IP BFD

  • 8/6/2019 Reti e Dintorni 2_new

    8/19

    8

    Configurazione del Virtual Switching System (VSS)

    Assegnazione del Virtual Switch Domain e numerazione dei due switch

    Il Virtual Switch Domain (VSD) un numero compreso fra 1 e 255 ed esso deve essere univoco per ogni VSS in tutta

    la rete. Con il VSD si deve configurare anche il numero che deve essere assegnato allo switch. Segue esempio:Switch 1

    Switch-1(config)# switch virtual domain 100Switch-1(config-vs-domain)#switch 1 [Allo switch viene assegnato il n 1]Switch-1(config-vs-domain)# switch 1 priority 120[Allo switch viene assegnata la priorit 120. Essendo maggiore del valore di default 100questo switch assumer il ruolo attivo]Switch-1(config-vs-domain)# exit

    Switch 2Switch-2(config)# switch virtual domain 100Switch-2(config-vs-domain)# switch 2 [Allo switch viene assegnato il n 2]Switch-2(config-vs-domain)# exit

    Configurazione del VSL

    La funzionalit VSL viene configurata allinterno di un port-channel. Ci si assicuri che il port-channel sia utilizzatoesclusivamente per la funzionalit VSL, per evitare che il VSS vada in RPR. Segue esempio di creazione di un linkVSL tramite le due interfacce 10Gb/s presenti sulle due supervisor:Switch 1

    Switch-1(config)# interface port-channel 10Switch-1(config-if)# switch virtual link 1 [Assegna il virtual link allo switch 1]Switch-1(config-if)# no shutdownSwitch-1(config-if)# exitSwitch-1(config)# interface range tenGigabitEthernet 5/4 - 5Switch-1(config-if)# channel-group 10 mode onSwitch-1(config-if)# no shutdown

    Switch 2Switch-2(config)#

    interface port-channel 20Switch-2(config-if)# switch virtual link 2 [Assegna il virtual link allo switch 2]Switch-2(config-if)# no shutdownSwitch-2(config-if)# exitSwitch-2(config)# interface range tenGigabitEthernet 5/4 - 5Switch-2(config-if)# channel-group 20 mode onSwitch-2(config-if)# no shutdown

    Conversione dei due switch a Virtual Switch Mode

    Le supervisor, di default non hanno di default la funzionalit di Virtual Switch ed dunque necessaria una conversionea questa nuova modalit. Loperazione comporter il restart di ambedue gli apparati. Dopo la conversione lanumerazione delle interfacce sar modificata in switch/modulo/porta. Segue esempio:

    Switch 1

    Switch-1# switch convert mode virtual

    Switch 2

    Switch-2# switch convert mode virtual

    Il VSS per operare in modo corretto necessita, per la prima volta che viene creato, di effettuare il seguente comandosulla supervisor attiva:Switch 1

    Switch-1# switch accept mode virtual

  • 8/6/2019 Reti e Dintorni 2_new

    9/19

    9

    Configurazione del Enhanced PAgP Dual-Active Detection

    Se lEnhanced PAgP abilitato sul MEC configurato fra il VSS e unapparato ad esso attestato, il VSS pu usarelEnhanced PAgP per rilevare lo stato di Dual-Active. Per abilitare la funzionalit si veda il seguente esempio dove sisuppone che il MEC utilizzi il port-channel 20:

    Router(config)#interface port-channel 20Router(config-if)# shutdown

    Router(config-if)# exitRouter(config)# switch virtual domain 100Router(config-vs-domain)# dual-active detection pagpRouter(config-vs-domain)# dual-active detection pagp trust channel-group 20Router(config-vs-domain)# exitRouter(config)# interface port-channel 20Router(config-if)# no shutdownRouter(config-if)# exit

    Configurazione del BFD

    Per configurare il BFD le interfacce devono essere di tipo routed. La particolarit del link BFD e che i due peer del linkpunto-punto non devono appartenere alla stessa subnet. Segue esempio:

    Router (config)# interface gigabitethernet 1/9/48Router (config-if)# no switchportRouter (config-if)# ip address 169.254.10.10 255.255.255.0Router (config-if)#bfd interval 100 min_rx 100 multiplier 50Router (config-if)# no shutdownRouter (config-if)# exitRouter (config)# interface gigabitethernet 2/1/48Router (config-if)# no switchportRouter (config-if)# ip address 169.254.20.20 255.255.255.0Router (config-if)#bfd interval 100 min_rx 100 multiplier 50Router (config-if)# no shutdownRouter (config-if)# exitRouter (config)# switch virtual domain 100Router (config-vs-domain)# dual-active detection bfdRouter (config-vs-domain)#dual-active pair interface g 1/9/48 interface g 2/1/48 bfd

  • 8/6/2019 Reti e Dintorni 2_new

    10/19

    10

    TRACEROUTE DI LIVELLO 2R. Gaeta

    INTRODUZIONE

    Penso che qualsiasi persona, che lavori nellambito delle reti, abbia almeno una volta nella sua vita effettuato un

    traceroute di livello 3, il quale permette di visualizzare gli indirizzi IP dei routers attraversati. Nel mondo Microsoftesiste il comando tracert, che permette un ben misero numero di opzioni. Nel mondo linux abbiamo diverse scelte:traceroute, tcptraceroute, tctrace, itrace, paratrace, e ogni comando ha molte opzioni interessanti (per esempiotcptraceroute permette il tracerouting utilizzando porte TCP a scelta).Dunque, mentre per il livello 3 abbiamo molte scelte, per il traceroute di livello 2, non abbiamo praticamente nulla. Laragione principale dipende proprio dallo standard del Transparent Bridging, che non prevede un equivalente delcampo TTL a livello 2, e quindi si deve cercare di ottenere linformazioni volute in un altro modo.Prima di tutto dichiariamo lobiettivo minimo che un programma di traceroute di livello 2, che da adesso denominiamol2traceroute deve ottenere:

    al comando l2traceroute devono essere dati al massimo 3 parametri:o indirizzo ip di destinazione;o interfaccia di uscita del vostro pc;o la community snmp read only;

    deve fornire almeno:o I nomi e gli indirizzi ip di management, di tutti gli switch attraversati, da un pacchetto inviato dal

    vostro pc allindirizzo ip di destinazione;o La vlan di appartenenza;o I nomi di tutte le interfacce attraversate;

    Per ottenere queste informazioni sono necessari i seguenti prerequisiti:

    Tutti gli switch siano Cisco, con il CDP abilitato; Gli apparati di rete, abbiano attivo il server snmp, e che la community read only sia uguale per tutti; Che il PC da voi utilizzato sia autorizzato ad accedere alle informazioni snmp;

    ALGORITMO

    Le informazioni a disposizioni del programma sono:1. Indirizzo IP sorgente del PC che lancia il programma l2traceroute;

    a) L'indirizzo ip sorgente pu per esempio essere ottenuto tramite il seguente comando bash: ip_pc=`ifconfig $device | awk 'BEGIN { FS=":" } $1 ~/inet addr/ {print $2}' | awk'BEGIN { FS=" " } {print $1}'` dove nella variabile $device deve essere messo il nome dell'interfaccia interessata (per esempio eth0).

    2. Netmask del PC sorgente che lancia il programma l2traceroute;a) La netmask pu essere ottenuta tramite il seguente comando bash: netmask_pc=`ifconfig $device | awk 'BEGIN { FS=":" } $1 ~/inet addr/ {print $4}'` dove nella variabile

    $device deve essere messo il nome dell'interfaccia interessata (per esempio eth0).

    3. Da queste due informazioni si calcola immediatamente la subnet di appartenenza del PC sorgente che lancia ilprogramma l2traceroute;

    a) La subnet di appartenenza pu essere ottenuta tramite il seguente comando bash: net_pc=`ipcalc $ip_pc $netmask_pc -b -n | awk ' $1 ~/Network:/ {print $2}'` si noti l'utilizzo delprogramma ipcalc.

    4. La destinazione cercata in realt il mac- address del PC di destinazione, e possiamo avere due possibilit: la

    prima che il PC di destinazione utilizzi lo stack TCP/IP (situazione fra le pi comuni) e quindi possa esserepingato, la seconda che non utilizzi lo stack TCP/IP (per esempio IPX), e quindi conosciamo direttamenteil mac-address tramite analisi di protocollo, allora abbiamo:a) Indirizzo IP destinazione, fornito come parametro al programma, allora il PC viene pingato (o tramite il

    consueto ping o tramite un arp request nel caso un firewall intermedio blocchi l'ICMP: Una volta contattato il PC di destinazione possiamo ottenere il suo mac-address dalla tabella arp del

    PC sorgente; Si pu usare il seguente comando: mac_ip_dest=`arp -a $ip_dest | awk '{print $4}'` la variabile ip_dest l'indirizzo ip di destinazione.

    Inoltre si deve controllare se l'indirizzo IP di destinazione appartenga alla stessa subnet del PCsorgente. Nel caso non sia cos il programma si deve interrompere;

    b) Se viene fornito direttamente il mac-address abbiamo gi ottenuto il mac-address di destinazione;5. Dato che per ipotesi tutti gli switch della rete utlizzano il CDP, il PC di destinazione deve poter elaborare il

    pacchetto CDP che gli viene inviato, per ottenere le seguenti informazioni: nome e indirizzo ip dello switch e

    porta e vlan alla quale si connessi;a) Possiamo ottenere questa informazione tramite il programma cdpr. Per esmpio con il comando: sudo cdpr -t 65 -d $device | awk ' BEGIN { FS=":"} $1 ~/value/ {print $2}' | head

    --lines=1 | cut --complement -c 1-2 ottengo il nome dello switch. Nella variabile $device deve essere messo il nome dell'interfaccia interessata (per esempio eth0).

  • 8/6/2019 Reti e Dintorni 2_new

    11/19

    11

    6. A questo punto il mac-address del PC di destinazione deve essere trasformato in decimale perch verrutilizzato nella ricerca dei risultati ottenuti tramite la richiesta snmpwalk (sulla vlan interessata) della seguenteMIB: 1.3.6.1.2.1.17.4.3.1.2da essa si ottiene una serie di righe come queste:BRIDGE-MIB mib-2.17.4.3.1.2.0.28.35.13.63.101 11BRIDGE-MIB mib-2.17.4.3.1.2.0.208.89.8.101.231 19::

    In rosso abbiamo i mac-address (in decimale!!) conosciuti dall'apparato e in verde i valori indice associati, chesaranno utilizzati per la prossima ricerca;a) Si usi il comando: per trasformare il mac-address in decimale si possono usare I seguenti comandi:

    for idx in `seq 1 3 16`do

    idx1=$(($idx+1))axz[$idx]=`echo $mac_ip_dest | cut -c $idx-$idx1`let axz[$idx]=0x${axz[$idx]}

    donemac_address_decimal_pointed=`echo ".${axz[1]}.${axz[4]}.${axz[7]}.${axz[10]}.${axz[13]}.${axz[16]}"`

    b) Ottenuto il mac-address in decimale ora deve usato per la ricerca dell'indice associato tramite il seguente comando: id_mib=`snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec$addr_sw 1.3.6.1.2.1.17.4.3.1.2 | awk ' BEGIN { FS="="} \$1 ~/$mib_y/ {print $2}' | awk ' BEGIN { FS=":"} {print $2}' | cut --complement -c 1` dove la variabile $snmp_ro la community snmp read only fornita come parametro, la variabile $vlan_sw_dec l'id della vlan trovata tramite il cdp (e quindi tramite il programma cdpr), la variabile$addr_sw l'indirizzo ip dello switch, e la variabile $mib_y data da: mib_y=`echo "mib-2.17.4.3.1.2"$mac_address_decimal_pointed`

    7. Ora tramite un'ulteriore richiesta snmpwalk per la mib: 1.3.6.1.2.1.17.1.4.1.2 otteniamo la variabile id_portuno dei valori pi importanti per le prossime ricerche.a) Il comando id_port=`snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec $addr_sw 1.3.6.1.2.1.17.1.4.1.2 | awk ' BEGIN { FS=":"} $1 ~/$id_int/ {print $2}' | cut --complement -c

    1` dove la variabile $snmp_ro la community snmp read only fornita come parametro, la variabile $vlan_sw_dec l'id della vlan trovata tramite il cdp (e quindi tramite ilprogramma cdpr), la variabile $addr_sw l'indirizzo ip dello switch e la variabile $id_int data da: id_int=`echo "mib-2.17.1.4.1.2."$id_mib" = INTEGER"`

    8. Adesso il valore ottenuto dell'id_port rappresenta la chiave di volta per ottenere tutte le informazioni piimportanti. Ora per ottenere la porta dello switch associata al mac-address destinazione (che definiamo comeout_port) si user una richiesta snmpwalk per la mib: 1.3.6.1.2.1.31.1.1.1.1a ) Si usi il comando: out_port=`snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec $addr_sw 1.3.6.1.2.1.31.1.1.1.1 | awk ' BEGIN { FS=":"} $1 ~/ifName. $id_port / {print $2}' | cut

    --complement -c 1` dove stato evidenziato in rosso l'utilizzo della variabile $id_port.

    9. Adesso che abbiamo trovato la porta di uscita del pacchetto inviato dal PC sorgente si devono utilizzare le mibproprietarie cisco per il cdp. Per ottenere l'informazione di quale sia la porta remota connessa allo switchtramite la porta locale out_port, alla quale state facendo la richiesta snmp, si deve fare una richiestasnmpbulkwalk per la mib: 1.3.6.1.4.1.9.9.23.1.2.1.1.7a ) Si usi il comando:port_remot=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.7 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$id_port_remote_name'/

    {print $2}' | cut --complement -c 1-2 | awk ' BEGIN { FS="\""} {print $1}'` dove la variabile $id_port_remote_name dato da: id_port_remote_name=`echo "enterprises.9.9.23.1.2.1.1.7."$id_port"."`

    10. Ora sempre tramite le mib per il cdp troviamo il nome dello switch connesso, tramite la mib:1.3.6.1.4.1.9.9.23.1.2.1.1.6

    11. Ed infine troviamo l'indirizzo IP dello switch connesso, sempre tramite le mib per il cdp. Mib:

    1.3.6.1.4.1.9.9.23.1.2.1.1.412. A questo punto avendo ottenuto l'indirizzo del prossimo switch, ricominciamo il ciclo dal punto 8, facendo larichiesta al nuovo indirizzo ip del nuovo switch.

    evidente che il ciclo si deve fermare quando effettivamente abbiamo raggiunto la porta alla quale effettivamenteconnesso il PC. chiaro che la trasposizione di questo algoritmo in un programma (nel nostro caso bash) deve tenere conto di moltialtri particolari che sono per essenziali per la stabilit del programma. La versione che qui viene presentata laversione 0.1 e deve considerarsi una versione non definitiva, ma funzionante nella maggiore parte dei casi.

    PROGRAMMA l2traceroute.sh

    #! /bin/bash

    # Programma l2traceroute versione 0.1 Marzo 2008 Autore: Roberto Gaeta"######################################################################################################### Questa funzione permette di killare i processi anche nel caso che lo stesso processo sia presente con pi di uno Id di processo.# Prima della chiamata devono essere forniti i seguenti parametri d'ingresso:# Parametro in 1: $PROCESSOkill_function (){pidof $PROCESSO > kill_canc.textfor i_kill in `cat kill_canc.text`dokill ${i_kill}

    donerm kill_canc.textreturn}#########################################################################

    ###### Trasformazione MAC ADDRESS ESADECIMALE in DECIMALE puntatomac_address_trans_ex_dec (){for idx in `seq 1 3 16`doidx1=$(($idx+1))axz[$idx]=`echo $mac_ip_dest | cut -c $idx-$idx1`let axz[$idx]=0x${axz[$idx]}

    done

  • 8/6/2019 Reti e Dintorni 2_new

    12/19

    12

    mac_address_decimal_pointed=`echo ".${axz[1]}.${axz[4]}.${axz[7]}.${axz[10]}.${axz[13]}.${axz[16]}"`return}

    ### Funzione SNMP parametri ########struttura_x_snmp (){mac_address_trans_ex_decmib_y=`echo "mib-2.17.4.3.1.2"$mac_address_decimal_pointed`

    if [ -f tempscript.sh ]then

    rm tempscript.shfiecho "#! /bin/bash" >> tempscript.shecho "snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec $addr_sw 1.3.6.1.2.1.17.4.3.1.2 | awk ' BEGIN { FS=\"=\"} \$1 ~/$mib_y/ {print \$2}' | awk ' BEGIN { FS=\":\"} {print \$2}' | cut --complement -c 1" >> tempscript.shsleep 0.1id_mib="null10"id_mib1="null20"OLDIFS=$IFS# IFS="@# "until [ $id_mib = $id_mib1 ]doid_mib=`. tempscript.sh 2>/dev/null`flagflag=`echo $id_mib | wc -l`if [ $flagflag -gt 1 ]then

    id_mib="null10"fi

    sleep 1id_mib1=`. tempscript.sh 2>/dev/null`flagflag=`echo $id_mib1 | wc -l`if [ $flagflag -gt 1 ]then

    id_mib1="null20"fisleep 1done# IFS=$OLDIFSid_int=`echo "mib-2.17.1.4.1.2."$id_mib" = INTEGER"`

    if [ -f tempscript.sh ]then

    rm tempscript.shfiecho "#! /bin/bash" >> tempscript.shecho "snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec $addr_sw 1.3.6.1.2.1.17.1.4.1.2 | awk ' BEGIN { FS=\":\"} \$1 ~/$id_int/ {print \$2}' | cut --complement -c 1" >> tempscript.shsleep 0.1id_port="null10"id_port1="null20"

    OLDIFS=$IFS# IFS="@# "until [ $id_port = $id_port1 ]doid_port=`. tempscript.sh 2>/dev/null`flagflag=`echo $id_port | wc -l`if [ $flagflag -gt 1 ]then

    id_port="null10"fisleep 1id_port1=`. tempscript.sh 2>/dev/null`flagflag=`echo $id_port1 | wc -l`if [ $flagflag -gt 1 ]then

    id_port1="null20"fisleep 1done# IFS=$OLDIFS

    return}

    function_out_port (){if [ -f tempscript.sh ]then

    rm tempscript.shfiecho "#! /bin/bash" >> tempscript.shecho " snmpwalk -v2c -Os -c $snmp_ro@$vlan_sw_dec $addr_sw 1.3.6.1.2.1.31.1.1.1.1 | awk ' BEGIN { FS=\":\"} \$1 ~/ifName.$id_port / {print \$2}' | cut --complement -c 1" >> tempscript.shsleep 0.1out_port="null10"out_port1="null20"# OLDIFS=$IFS# IFS="@# "until [ $out_port = $out_port1 ]doout_port=`. tempscript.sh 2>/dev/null`flagflag=`echo $out_port | wc -l`if [ $flagflag -gt 1 ]

    thenout_port="null10"

    fisleep 1out_port1=`. tempscript.sh 2>/dev/null`flagflag=`echo $out_port1 | wc -l`

  • 8/6/2019 Reti e Dintorni 2_new

    13/19

    13

    if [ $flagflag -gt 1 ]then

    out_port1="null20"fisleep 1done}

    function_port_name (){id_port_name=`echo "enterprises.9.9.23.1.2.1.1.6."$id_port"."`

    name_sw="null10"name_sw1="null20"OLDIFS=$IFS# IFS="@# "until [ $name_sw = $name_sw1 ]doname_sw=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.6 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$id_port_name'/ {print $2}' | cut --complement -c 1-2 | awk ' BEGIN { FS="\""} {print $1}'`flagflag=`echo $name_sw | wc -l`if [ $flagflag -gt 1 ]then

    name_sw="null10"fisleep 1name_sw1=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.6 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$id_port_name'/ {print $2}' | cut --complement -c 1-2 | awk ' BEGIN { FS="\""} {print $1}'`flagflag=`echo $name_sw1 | wc -l`if [ $flagflag -gt 1 ]then

    name_sw1="null20"fisleep 1

    done}

    function_port_remote_name (){id_port_remote_name=`echo "enterprises.9.9.23.1.2.1.1.7."$id_port"."`port_remot="null10"port_remot1="null20"OLDIFS=$IFSIFS="@"until [ $port_remot = $port_remot1 ]doport_remot=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.7 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$id_port_remote_name'/ {print $2}' | cut --complement -c 1-2 | awk ' BEGIN { FS="\""}{print $1}'`flagflag=`echo $port_remot | wc -l`if [ $flagflag -gt 1 ]then

    port_remot="null10"fisleep 1port_remot1=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.7 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$id_port_remote_name'/ {print $2}' | cut --complement -c 1-2 | awk ' BEGIN { FS="\""}

    {print $1}'`flagflag=`echo $port_remot1 | wc -l`if [ $flagflag -gt 1 ]then

    port_remot1="null20"fisleep 1doneIFS=$OLDIFS}

    function_addr_sw (){addr_sw_name=`echo "enterprises.9.9.23.1.2.1.1.4."$id_port"."vtu8="null10"vtu9="null20"OLDIFS=$IFSIFS="@"until [ $vtu8 = $vtu9 ]do

    vtu8=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.4 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$addr_sw_name'/ {print $2}' | cut --complement -c 1`flagflag=`echo $vtu8 | wc -l`if [ $flagflag -gt 1 ]then

    vtu8="null10"fisleep 1vtu9=`snmpbulkwalk -v2c -Os -c $snmp_ro $addr_sw 1.3.6.1.4.1.9.9.23.1.2.1.1.4 2>/dev/null | awk ' BEGIN { FS=":"} $1 ~/'$addr_sw_name'/ {print $2}' | cut --complement -c 1`flagflag=`echo $vtu9 | wc -l`if [ $flagflag -gt 1 ]then

    vtu9="null20"fisleep 1doneIFS=$OLDIFS

    addr_sw=`echo "${vtu8}"`

    ad_1=`echo $addr_sw | cut -c 1-2`ad_2=`echo $addr_sw | cut -c 4-5`ad_3=`echo $addr_sw | cut -c 7-8`

    ad_4=`echo $addr_sw | cut -c 10-11`

    let ad_1=0x$ad_1let ad_2=0x$ad_2let ad_3=0x$ad_3let ad_4=0x$ad_4

  • 8/6/2019 Reti e Dintorni 2_new

    14/19

    14

    addr_sw=`echo "$ad_1"."$ad_2"."$ad_3"."$ad_4"`}

    # Funzione per l'aiuto di utilizzo del comando #print_help (){cd $HOMEecho "Programma $0 versione 0.1 Marzo 2008 Autore: Roberto Gaeta"echo ""

    echo "Uso: $0 "echo "Possibili opzioni:"echo "--------------------------------------------------------------------"echo "-d: ip di destinazione (esclusivo rispetto all'opzione -m)."echo "-i: interfaccia utilizzata. Esempio: eth0"echo "-s: community snmp read only"echo "-m: mac-address di destinazione (esclusivo rispetto all'opzione -d)."echo "--------------------------------------------------------------------"echo ""echo " Alcuni esempi:"echo ""echo " sudo bash l2trace.sh -d 10.4.2.1 -i eth0 -s public"echo ""echo " sudo bash l2trace.sh -i eth0 -s public -m 00:0B:BF:A2:18:0A"

    return}##################################################

    ####################################################################################################

    ###### INIZIO DEL PROGRAMMA ########################################################################################################################### clear### SE NON VIENE INTRODOTTA NESSUNA OPZIONE IL PROGRAMMA ESCE E STAMPA L'HELP ###########if [ $# -eq 0 ]then

    print_helpexit 1

    fi#########################################################################################

    #### INIZIALIZZAZIONE PARAMETRI OPZIONALI #################ip_dest="null"device="null"snmp_ro="null"mac_dest="null"flag_ip_dest="no"flag_mac_dest="no"###########################################################

    #### IMMISSIONE DEI PARAMETRI ############################while getopts d:i:s:m: optdocase "$opt" in

    d) ip_dest="$OPTARG";;i) device="$OPTARG";;s) snmp_ro="$OPTARG";;m) mac_dest="$OPTARG";;*) print_help; exit 1;;

    esacdoneif [ $ip_dest != "null" ]then

    flag_ip_dest="ok"elif [ $mac_dest != "null" ]then

    flag_mac_dest="ok"fi############################################################

    ##### CONTROLLO CHE I PARAMETRI IMMESSI RISPETTINO LE REGOLE ########if [ $device = "null" ] || [ $snmp_ro = "null" ] || [ $ip_dest = "null" ] && [ $mac_dest = "null" ] || [ $ip_dest != "null" ] && [ $mac_dest != "null" ]# if [ $device = "null" ] || [ $snmp_ro = "null" ] || [ $ip_dest = "null" ]then

    echo "Manca un'opzione, o hai messo contemporaneamente l'indirizzo ip e il mac di destinazione."echo ""echo ""print_helpexit 1

    fi####################################################################

    ##########################################################################################

    ######################################################################################################### SI RICAVANO L'INDIRIZZO IP DELL'INTERFACCIA DEL PC SORGENTE, LA NETMASK E IL DEFAULT GATEWAY###### E SI CALCOLA LA RETE DI APPARTENENZA #####################################################################################################################################################ip_pc=`ifconfig $device | awk 'BEGIN { FS=":" } $1 ~/inet addr/ {print $2}' | awk 'BEGIN { FS=" " } {print $1}'`netmask_pc=`ifconfig $device | awk 'BEGIN { FS=":" } $1 ~/inet addr/ {print $4}'

    dg_pc=`ip route | awk ' BEGIN { FS=" "} $5 ~/'$device'/ {print $3}'`net_pc=`ipcalc $ip_pc $netmask_pc -b -n | awk ' $1 ~/Network:/ {print $2}'`#############################################################################################

    ########## SE STATO INTRODOTTO L'IP DI DESTINAZIONE SI CALCOLA L'APPARENTE RETE DI APPARTENENZA ###

  • 8/6/2019 Reti e Dintorni 2_new

    15/19

    15

    if [ $flag_ip_dest = "ok" ]thennet_dest=`ipcalc $ip_dest $netmask_pc -b -n | awk ' $1 ~/Network:/ {print $2}'`nome_ipdestinazione=`nslookup $ip_dest | grep name | awk '{print $4}'`fi#####################################################################################################

    ############################################################################################################# ESEGUE UN CONFRONTO FRA LA RETE DI APPARTENENZA DEL PC SORGENTE CON LA RETE APPARENTE######## DELL'IP DI DESTINAZIONE. SE SONO UGUALI TROVA IL MAC ADDRESS DALLA TABELLA ARP DEL PC######## NEL CASO NON SIANO UGUALI, IL TRACEROUTE DI LIVELLO 2 NON PU ESSERE EFFETTUATO.

    ######## INVECE SE STATO IMMESSO IL MAC ADDRESS DI DESTINAZIONE, VIENE USATO QUESTO PARAMETRO#####################################################################################################if [ $flag_ip_dest = "ok" ]thenif [ "$net_pc" = "$net_dest" ]then

    # echo "L'indirizzo ip di destinazione nella stessa subnet"if ! arping -I $device -c 3 $ip_dest > /dev/nullthenecho "Indirizzo ip $ip_dest non pingabile!"exit 1

    fimac_ip_dest=`arp -a $ip_dest | awk '{print $4}'`mac_ip_dest=`echo $mac_ip_dest | tr ":" " " `if [ "$mac_ip_dest" = '' ]thenecho "Il MAC ADDRESS non stato trovato!"exit 1

    fielse

    # echo "L'indirizzo ip di destinazione non nella stessa subnet"

    if ! ping -c 3 $ip_dest > /dev/nullthenecho "Indirizzo ip $ip_dest non pingabile!"exit 1

    fimac_ip_dest=`arp -a $dg_pc | awk '{print $4}'`mac_ip_dest=`echo $mac_ip_dest | tr ":" " " `echo "Indirizzo IP di destinazione non nella stessa subnet!"exit 1

    fielif [ $flag_mac_dest = "ok" ]thenmac_ip_dest=$mac_destmac_ip_dest=`echo $mac_ip_dest | tr ":" " " `net_dest="Non calcolabile"ip_dest="Sconosciuto"nome_ipdestinazione="Sconosciuto"

    fi#####################################################################################################

    ##### STAMPA A SCHERMO I VARI PARAMETRI ################## sfondo_blu

    echo ""echo "---------------------------------------------------------------------"echo "---------------------------------------------------------------------"echo "Indirizzo IP sorgente = $ip_pc"echo "Subnet mask IP sorgente = $netmask_pc"echo "Default Gateway del PC sorgente = $dg_pc"echo "Rete di appartenenza del PC sorgente = $net_pc"echo "Mac address di destinazione = $mac_ip_dest"echo "IP di destinazione = $ip_dest"echo "Nome DNS dell'IP di destinazione = $nome_ipdestinazione"echo "Rete apparente dell'indirizzo IP di destinazione = $net_dest"echo "---------------------------------------------------------------------"echo "---------------------------------------------------------------------"echo ""# testo_normaleecho ""echo ""echo ""############################################################

    ########## MESSAGGIO DI ATTESA DEL PACCHETTO CDP ################################################

    # testo_invertitoecho "In attesa del pacchetto cdp... . tempo massimo circa 60 s"# testo_normale#################################################################################################

    ####### ATTIVAZIONE DEL COMANDO CDPR PER OTTENERE INFORMAZIONI DAL PACCHETTO CDP ###################sudo cdpr -t 65 -d $device | awk ' BEGIN { FS=":"} $1 ~/value/ {print $2}' | head --lines=1 | cut --complement -c 1-2 > name.txt &sudo cdpr -t 65 -d $device | awk ' BEGIN { FS=":"} $1 ~/value/ {print $2}' | tail --lines=2 | head --lines=1 | cut --complement -c 1-2 > addr.txt &sudo cdpr -t 65 -d $device | awk ' BEGIN { FS=":"} $1 ~/value/ {print $2}' | tail --lines=1 | cut --complement -c 1-2 > port.txt &sudo cdpr -t 65 -v -d $device | awk ' BEGIN { FS=":"} $1 ~/value/ {print $2}' | tail --lines=2 | head - -lines=1 | cut --complement -c 1-2 | cut --complement -c 3 > vlan.txt &sudo cdpr -t 61 -d $device > /dev/null #### QUESTA LINEA FORNISCE LA GIUSTA ATTESA TEMPORALE ########################################################################################################

    ####### TEST PER VERIFICARE CHE IL COMANDO CDPR ABBIA RICEVUTO IL PACCHETTO CDP #################if [ ! "$?" -eq 0 ]then

    # testo_rossoecho ""echo "ATTENZIONE IL CDP NON ABILITATO SU QUESTA PORTA DELLO SWITCH!!!"echo ""echo "IL PROGRAMMA NON PU PROSEGUIRE"##### SONO ELIMINATE TUTTE I COMANDI CDPR IN BACKGROUND ############

    PROCESSO='cdpr'kill_function##################################################################### testo_normaleexit 1

    fi

  • 8/6/2019 Reti e Dintorni 2_new

    16/19

    16

    ############################################################################################

    ###### INTRODUZIONE DI UN RITARDO TEMPORALE ###################sleep 1###############################################################

    ##### ASSEGNAZIONE DEI PARAMETRI TROVATI CON IL CDP ########################name_sw=`more name.txt`addr_sw=`more addr.txt`

    port_loc_sw=`more port.txt`vlan_sw_hex=`more vlan.txt` #### LA VLAN VIENE FORNITA IN ESADECIMALE ###################################################################################

    ####### TRASFORMAZIONE DEL NUMERO ESADECIMALE DELLA VLAN IN DECIMALE ##########let "vlan_sw_dec=0x$vlan_sw_hex"###############################################################################

    # clear

    ####### PRIMA PARTE DELLA MAPPA TOPOLOGICA ######################## testo_bluecho "----------------------------------"# testo_normaleecho " $ip_pc"# testo_bluecho "----------------------------------"# testo_normale# testo_azzurro

    echo " | $device"echo " |"echo " | $port_loc_sw (vlan = $vlan_sw_dec)"# testo_bluecho "----------------------------------"# testo_normaleecho " $name_sw ( $addr_sw )"# testo_bluecho "----------------------------------"# testo_normale###################################################################

    ######################## INIZIO STRUTTURA X #########################################################struttura_x_snmp########################################### FINE STRUTTURA X #######################################

    ####################################### inizializzazione #######################################function_port_name##### PROVA PROVA PROVA ##########name_sw001="null30"

    name_sw002="null40"#################################### IFS=$OLDIFS#################################################################################################

    name_sep=`echo $name_sw | cut -c 1-3`

    ############################inizio loop #########################################################until [ -z ${name_sw} ] || [ $name_sw001 = $name_sw002 ]do

    ########## INIZIA A ######################function_out_port############ FINISCE A ####################

    ############ INIZIA B #####################function_port_remote_name############ FINISCE B ####################

    ############ INIZIA D #####################function_port_namename_sw001=$name_sw# IFS=$OLDIFS

    name_sep=`echo $name_sw | cut -c 1-3`# echo $name_sep

    function_addr_sw

    ############## FINISCE D #####################

    ############## INIZIA C ####################### testo_azzurroecho " | $out_port (vlan = $vlan_sw_dec)"echo " |"# testo_normale############# FINISCE C ######################

    ############## INIZIA E #######################

    # testo_azzurroecho " | $port_remot (vlan = $vlan_sw_dec)"# testo_bluecho "----------------------------------"# testo_normaleecho " $name_sw ( $addr_sw )"

  • 8/6/2019 Reti e Dintorni 2_new

    17/19

    17

    # testo_bluecho "----------------------------------"# testo_normale############## FINISCE E #######################

    ######################## INIZIO STRUTTURA X #########################################################struttura_x_snmp########################################### FINE STRUTTURA X #######################################

    function_port_namename_sw002=$name_sw

    name_sep=`echo $name_sw | cut -c 1-3`

    done

    ####################################### fine loop ############################################

    ########## INIZIA A ######################function_out_port############ FINISCE A ####################

    ############## INIZIA C ####################### testo_azzurroecho " | $out_port (vlan = $vlan_sw_dec)"echo " |"# testo_normale############# FINISCE C ######################

    # testo_azzurroecho " | "

    # testo_bluecho "----------------------------------"# testo_normaleecho " $ip_dest ( MAC = $mac_ip_dest )"echo " $nome_ipdestinazione"# testo_bluecho "----------------------------------"# testo_normale

    exit 0

    Il programma pu essere utilizzato in due modi:

    Fornendo l'indirizzo ip di destinazione, l'interfaccia utilizzata del pc sorgente e la community read only: peresempio: sudo l2traceroute.sh -d 10.4.2.1 -i eth0 -spublic otteniamo il seguente risultato:

    ------------------------------------------------------------------------------------------------------------------------------------------Indirizzo IP sorgente = 10.4.2.151Subnet mask IP sorgente = 255.255.0.0Default Gateway del PC sorgente = 10.4.0.1Rete di appartenenza del PC sorgente = 10.4.0.0/16Mac address di destinazione = 00 1B 78 C0 43 32IP di destinazione = 10.4.2.1Nome DNS dell'IP di destinazione = pc-pippo.bingo.itRete apparente dell'indirizzo IP di destinazione = 10.4.0.0/16------------------------------------------------------------------------------------------------------------------------------------------

    In attesa del pacchetto cdp.... tempo massimo circa 60 s----------------------------------

    10.4.2.151----------------------------------

    | eth0|| FastEthernet1/0/23 (vlan = 5)

    ----------------------------------117X-SW-CED-208 ( 172.19.41.8 )

    ----------------------------------| Gi1/0/1 (vlan = 5)|

    | GigabitEthernet9/7 (vlan = 5)----------------------------------

    CED-RR-CED-6513 ( 172.19.0.42 )----------------------------------

    IP sorgente

    Porta di connessione e

    vlan del PC sorgente

  • 8/6/2019 Reti e Dintorni 2_new

    18/19

    18

    | Gi7/1 (vlan = 5)|| GigabitEthernet6/4 (vlan = 5)

    ----------------------------------CED-SW-CED-6509 ( 10.1.250.2 )

    ----------------------------------| Gi4/2 (vlan = 5)|

    | GigabitEthernet1/1 (vlan = 5)----------------------------------

    CED-SW2-CED-4506 ( 172.19.0.141 )----------------------------------

    | Gi2/1 (vlan = 5)|| GigabitEthernet1/0/1 (vlan = 5)

    ----------------------------------117X-SW2-CED-201 ( 172.19.41.81 )

    ----------------------------------| Fa1/0/15 (vlan = 5)|| Port 1 (vlan = 5)

    ----------------------------------SEP00192F7F27DD ( 172.17.0.148 )

    ----------------------------------

    | (vlan = 5)||

    ----------------------------------10.4.2.1 ( MAC = 00 1B 78 C0 43 32 )pc-pippo.bingo.it

    ----------------------------------

    Oppure fornendo l'interfaccia del PC sorgente, la community snmp read only e il mac-address per esempio: sudo l2traceroute.sh -i eth0 -spublic -m 00:1C:C4:66:B1:2Aotteniamo il seguente risultato:

    ------------------------------------------------------------------------------------------------------------------------------------------Indirizzo IP sorgente = 10.4.2.151

    Subnet mask IP sorgente = 255.255.0.0Default Gateway del PC sorgente = 10.4.0.1Rete di appartenenza del PC sorgente = 10.4.0.0/16Mac address di destinazione = 00 1C C4 66 B1 2AIP di destinazione = SconosciutoNome DNS dell'IP di destinazione = SconosciutoRete apparente dell'indirizzo IP di destinazione = Non calcolabile------------------------------------------------------------------------------------------------------------------------------------------

    In attesa del pacchetto cdp.... tempo massimo circa 60 s----------------------------------

    10.4.2.151----------------------------------

    | eth0|| FastEthernet1/0/23 (vlan = 5)

    ----------------------------------117X-SW-CED-208 ( 172.19.41.8 )

    ----------------------------------| Gi1/0/1 (vlan = 5)|| GigabitEthernet9/7 (vlan = 5)

    ----------------------------------CED-RR-CED-6513 ( 172.19.0.42 )

    ----------------------------------| Gi7/1 (vlan = 5)|| GigabitEthernet6/4 (vlan = 5)

    ----------------------------------

    CED-SW-CED-6509 ( 10.1.250.2 )----------------------------------

    | Gi3/1 (vlan = 5)|

    Telefono IP

    Destinazione

  • 8/6/2019 Reti e Dintorni 2_new

    19/19

    19

    | GigabitEthernet7/1 (vlan = 5)----------------------------------

    B1-RR-B1-6513 ( 172.19.0.82 )----------------------------------

    | Gi9/5 (vlan = 5)|| GigabitEthernet0/1 (vlan = 5)

    ----------------------------------

    B7-SW-B1-205 ( 172.19.81.5 )----------------------------------

    | Fa0/3 (vlan = 5)||

    ----------------------------------Sconosciuto ( MAC = 00 1C C4 66 B1 2A )Sconosciuto

    ----------------------------------

    Il programma presenta ancora alcuni bachi che saranno risolti nelle prossime versioni, per esempio se l'indirizzo ip didestinazione non un PC ma un apparato di rete con CDP e SNMP abilitato, il programma si blocca in un loop.