Sei sulla pagina 1di 19

Reti e dintorni

Eadem mutata resurgo

Aprile - Giugno 2008

N 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

INDICE
EDITORIALE......................................................................................................................................................................4 Programmazione Bash......................................................................................................................................................4 VIRTUAL SWITCHING SYSTEM....................................................................................................................................5 Hardware supportato.........................................................................................................................................................5 Ridondanza.......................................................................................................................................................................5 Multichassis EtherChannels (MEC).................................................................................................................................6 Descrizione dei possibili guasti del MEC e relative soluzioni.........................................................................................6 Dual-Active Detection......................................................................................................................................................7 Configurazione del Virtual Switching System (VSS)..........................................................................................................8 Assegnazione del Virtual Switch Domain e numerazione dei due switch.......................................................................8 Configurazione del VSL...................................................................................................................................................8 Conversione dei due switch a Virtual Switch Mode........................................................................................................8 Configurazione del Enhanced PAgP Dual-Active Detection...........................................................................................9 Configurazione del BFD...................................................................................................................................................9 TRACEROUTE DI LIVELLO 2........................................................................................................................................10 INTRODUZIONE..........................................................................................................................................................10 ALGORITMO................................................................................................................................................................10 PROGRAMMA l2traceroute.sh.....................................................................................................................................11

EDITORIALE
Programmazione Bash In questo numero, abbiamo sviluppato un programma bash che permette il traceroute di livello 2. Lo studio del programma pu permettere di approfondire alcune nozioni base della programmazione bash. Anche se non vengono spiegati i singoli comandi, e si ci concentra sull'algoritmo in generale, per fornire le basi ai veri programmatori, di riscrivere il tutto in un'altro linguaggio. Il traceroute di livello 2, un programma che nel passato ho sempre cercato e mai trovato. Su internet esiste un programma (l2trace) basato su php, che per per funzionare devi conoscere le password degli apparati di rete. Io cercavo un qualcosa 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 (Virtual Switching 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 la stesura degli articoli si rispettino le seguenti regole: - non sono ammessi articoli che riportino informazioni private, come nomi di clienti, indirizzi IP effettivi di una rete utilizzata da un cliente, configurazioni con password (in chiaro o criptate) utilizzate effettivamente in una rete reale; - gli articoli devono essere scritti tramite Microsoft Word o Open Office Word, utilizzando come font Times New Roman con dimensione 10. Il testo inoltre deve avere una formattazione di tipo giustificata e su due colonne; - se possibile, si cerchi di dividere il testo in almeno due parti: la prima parte 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 argomenti trattati in numeri precedenti, ma nel caso si deve fare riferimento allarticolo precedente e trattare solo gli eventuali approfondimenti non trattati 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 allimportanza dellargomento trattato e alla qualit della descrizione; Roberto Gaeta roberto.gaeta@eu.didata.com

VIRTUAL SWITCHING SYSTEM


R. Gaeta La Cisco nel quarto trimestre del 2007, ha rilasciato un nuovo modello di Supervisor per i 65XX, denominata 720-10G VSS1 (VS-S720-10G-3C/XL), la quale pu essere utilizzata o come una Supervisor tradizionale (tipo Sup720) o tramite la 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 su apparati di alto livello Nortel (con la funzionalit MLT). Ognuna di queste funzionalit sono di tipo proprietario, e non esiste 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 10 Gb/s configurate come Virtual Switch Link (VSL), permette di combinare i due apparati 65XX, ognuno composto da M slots, in un singolo apparato virtuale, il Virtual Core Switch, composto da 2M slots. Uno dei vantaggi pi importanti di questa funzionalit, la possibilit di configurare laggregazione di canale (GigaEtherChannel) sui due uplink di uno switch di distribuzione verso il Virtual Core Switch. In figura 1 viene mostrato un confronto tra un tradizionale centro stella ridondato, che utilizza lo spanning tree, e lutilizzo del sistema di Virtual Switching. Nel caso del VSS non sono pi 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 di Virtual Switching Link (VSL) supportata soltanto dalle interfacce a 10Gb/s presenti sulla VS-720-10G o sul modulo WS-X6708-10GE. La banda minima raccomandata per la creazione di un VSL di 20 Gb/s. La banda massima possibile per un VSL di 80 Gb/s. Il VSS supporta moduli switching con la CFC, DFC3C o DFC3XL e non supporta moduli switching con DFC3A/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 seguenti importanti differenze: La supervisor attiva e quella in standby sono collocate in chassis differenti e usano il VSL per lo scambio delle informazioni; 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

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 moduli switching. 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 i rimanenti 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 Active Detection (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 il MEC bilancia il carico in modo indipendente, cercando ove possibile di utilizzare il meno possibile il VSL per il trasferimento 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, e che deve arrivare allapparato connesso tramite il MEC, in questa situazione, deve attraversare il 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 attraversare il 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.

Dual-Active Detection Lo scenario detto Dual-Active, si presenta in caso di completo guasto del VSL, ma con la supervisor attiva ancora funzionale. In questo caso ambedue le supervisor diventano attive. Avremmo dunque due apparati che hanno gli stessi indirizzi 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 attivi contemporaneamente. I due metodi sono: Rilevamento tramite Enhanced PagP: Il PAgP un protocollo proprietario Cisco per il controllo di un EtherChannel. In modalit VSS il PAgP include un nuovo campo TLV il quale contiene lID dello chassis attivo. Inoltre per il rilevamento necessario che lapparato connesso tramite MEC al VSS abbia un firmware che possa interpretare correttamente questo nuovo campo. Gli apparati attualmente sono: 6500 con supervisor 720 o supervisor 32 che operano con il firmware IOS 12.2(33)SXH o versioni successive. Quando lo chassis standby rileva un perdita completa del VSL, esso diventa attivo e immediatamente invia pacchetti PAgP allo switch connesso tramite il MEC. Il pacchetto ha il nuovo ID della nuova supervisor attiva. Ma in uno scenario Dual-Active laltra supervisor e anchessa rimasta attiva. Lo switch connesso tramite MEC al VSS interpreta ed invia linformazione ad ambedue gli apparati. 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 manualmente per escluderle dalloperazione di shutdown). In questo modo uno degli apparati praticamente isolato dalla rete, e si pone in attesa che il link VSL riprenda a funzionare. Quando entrambi gli chassis rilevano 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 Forwarding Detection), il quale deve essere implementato tramite uno o pi link punto-punto di livello 3 tra i due apparati che formano il VSS. Se il VSL si guasta entrambi gli chassis creano dei neighbors BFD, e provano a stabilire unadiacenza. Se loriginale chassis attivo riceve unadiacenza, allora siamo in un Dual-Active scenario, e dunque inizia a mettere in shutdown tutte le interfacce non-VSL (con leventuale eccezione di interfacce configurate manualmente per escluderle dalloperazione di shutdown). In questo modo uno degli apparati praticamente isolato dalla rete, e si pone in attesa che il link 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

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 100 Switch-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 100 questo switch assumer il ruolo attivo] Switch-1(config-vs-domain)# exit

Switch 2

Switch-2(config)# switch virtual domain 100 Switch-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 utilizzato esclusivamente per la funzionalit VSL, per evitare che il VSS vada in RPR. Segue esempio di creazione di un link VSL tramite le due interfacce 10Gb/s presenti sulle due supervisor: Switch 1
Switch-1(config)# interface port-channel 10 Switch-1(config-if)# switch virtual link 1 [Assegna il virtual link allo switch 1] Switch-1(config-if)# no shutdown Switch-1(config-if)# exit Switch-1(config)# interface range tenGigabitEthernet 5/4 - 5 Switch-1(config-if)# channel-group 10 mode on Switch-1(config-if)# no shutdown

Switch 2
Switch-2(config)# interface port-channel 20 Switch-2(config-if)# switch virtual link 2 [Assegna il virtual link allo switch 2] Switch-2(config-if)# no shutdown Switch-2(config-if)# exit Switch-2(config)# interface range tenGigabitEthernet 5/4 - 5 Switch-2(config-if)# channel-group 20 mode on Switch-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 conversione a questa nuova modalit. Loperazione comporter il restart di ambedue gli apparati. Dopo la conversione la numerazione 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 comando sulla supervisor attiva: Switch 1
Switch-1# switch accept mode virtual

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 usare lEnhanced PAgP per rilevare lo stato di Dual-Active. Per abilitare la funzionalit si veda il seguente esempio dove si suppone che il MEC utilizzi il port-channel 20:
Router(config)# interface port-channel 20 Router(config-if)# shutdown Router(config-if)# exit Router(config)# switch virtual domain 100 Router(config-vs-domain)# dual-active detection pagp Router(config-vs-domain)# dual-active detection pagp trust channel-group 20 Router(config-vs-domain)# exit Router(config)# interface port-channel 20 Router(config-if)# no shutdown Router(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 link punto-punto non devono appartenere alla stessa subnet. Segue esempio:
Router Router Router Router Router Router Router Router Router Router Router Router Router Router Router (config)# interface gigabitethernet 1/9/48 (config-if)# no switchport (config-if)# ip address 169.254.10.10 255.255.255.0 (config-if)# bfd interval 100 min_rx 100 multiplier 50 (config-if)# no shutdown (config-if)# exit (config)# interface gigabitethernet 2/1/48 (config-if)# no switchport (config-if)# ip address 169.254.20.20 255.255.255.0 (config-if)# bfd interval 100 min_rx 100 multiplier 50 (config-if)# no shutdown (config-if)# exit (config)# switch virtual domain 100 (config-vs-domain)# dual-active detection bfd (config-vs-domain)# dual-active pair interface g 1/9/48 interface g 2/1/48 bfd

10

TRACEROUTE DI LIVELLO 2
R. 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 Microsoft esiste 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 esempio tcptraceroute 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. La ragione principale dipende proprio dallo standard del Transparent Bridging, che non prevede un equivalente del campo 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 denominiamo l2traceroute 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). 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).

2. Netmask del PC sorgente che lancia il programma l2traceroute;


a)

3. Da queste due informazioni si calcola immediatamente la subnet di appartenenza del PC sorgente che lancia il programma 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 del programma 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 essere pingato, la seconda che non utilizzi lo stack TCP/IP (per esempio IPX), e quindi conosciamo direttamente il 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 PC sorgente. 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).

11 6. A questo punto il mac-address del PC di destinazione deve essere trasformato in decimale perch verr utilizzato nella ricerca dei risultati ottenuti tramite la richiesta snmpwalk (sulla vlan interessata) della seguente MIB: 1.3.6.1.2.1.17.4.3.1.2 da essa si ottiene una serie di righe come queste:
BRIDGE-MIB BRIDGE-MIB : : mib-2.17.4.3.1.2.0.28.35.13.63.101 11 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, che saranno 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]} done mac_address_decimal_pointed=`echo ".${axz[1]}.${axz[4]}.${axz[7]}.${axz[10]}.${axz[13]}.${axz[16]}"` 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`

b)

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_port uno 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 il programma 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 pi importanti. Ora per ottenere la porta dello switch associata al mac-address destinazione (che definiamo come out_port) si user una richiesta snmpwalk per la mib: 1.3.6.1.2.1.31.1.1.1.1
a) 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 mib proprietarie cisco per il cdp. Per ottenere l'informazione di quale sia la porta remota connessa allo switch tramite la porta locale out_port, alla quale state facendo la richiesta snmp, si deve fare una richiesta snmpbulkwalk per la mib: 1.3.6.1.4.1.9.9.23.1.2.1.1.7
a) 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.4 12. A questo punto avendo ottenuto l'indirizzo del prossimo switch, ricominciamo il ciclo dal punto 8, facendo la richiesta al nuovo indirizzo ip del nuovo switch. evidente che il ciclo si deve fermare quando effettivamente abbiamo raggiunto la porta alla quale effettivamente connesso il PC. chiaro che la trasposizione di questo algoritmo in un programma (nel nostro caso bash) deve tenere conto di molti altri particolari che sono per essenziali per la stabilit del programma. La versione che qui viene presentata la versione 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: $PROCESSO kill_function () { pidof $PROCESSO > kill_canc.text for i_kill in `cat kill_canc.text` do kill ${i_kill} done rm kill_canc.text return } ######################################################################### ###### Trasformazione MAC ADDRESS ESADECIMALE in DECIMALE puntato mac_address_trans_ex_dec () { 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]} done

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_dec mib_y=`echo "mib-2.17.4.3.1.2"$mac_address_decimal_pointed` if [ -f tempscript.sh ] then rm tempscript.sh fi echo "#! /bin/bash" >> tempscript.sh echo "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.sh sleep 0.1 id_mib="null10" id_mib1="null20" OLDIFS=$IFS # IFS="@ #" until [ $id_mib = $id_mib1 ] do id_mib=`. tempscript.sh 2>/dev/null` flagflag=`echo $id_mib | wc -l` if [ $flagflag -gt 1 ] then id_mib="null10" fi sleep 1 id_mib1=`. tempscript.sh 2>/dev/null` flagflag=`echo $id_mib1 | wc -l` if [ $flagflag -gt 1 ] then id_mib1="null20" fi sleep 1 done # IFS=$OLDIFS id_int=`echo "mib-2.17.1.4.1.2."$id_mib" = INTEGER"` if [ -f tempscript.sh ] then rm tempscript.sh fi echo "#! /bin/bash" >> tempscript.sh echo "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.sh sleep 0.1 id_port="null10" id_port1="null20" OLDIFS=$IFS # IFS="@ #" until [ $id_port = $id_port1 ] do id_port=`. tempscript.sh 2>/dev/null` flagflag=`echo $id_port | wc -l` if [ $flagflag -gt 1 ] then id_port="null10" fi sleep 1 id_port1=`. tempscript.sh 2>/dev/null` flagflag=`echo $id_port1 | wc -l` if [ $flagflag -gt 1 ] then id_port1="null20" fi sleep 1 done # IFS=$OLDIFS return } function_out_port () { if [ -f tempscript.sh ] then rm tempscript.sh fi echo "#! /bin/bash" >> tempscript.sh echo " 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.sh sleep 0.1 out_port="null10" out_port1="null20" # OLDIFS=$IFS # IFS="@ #" until [ $out_port = $out_port1 ] do out_port=`. tempscript.sh 2>/dev/null` flagflag=`echo $out_port | wc -l` if [ $flagflag -gt 1 ] then out_port="null10" fi sleep 1 out_port1=`. tempscript.sh 2>/dev/null` flagflag=`echo $out_port1 | wc -l`

13
if [ $flagflag -gt 1 ] then out_port1="null20" fi sleep 1 done } 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 ] do name_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" fi sleep 1 name_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" fi sleep 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=$IFS IFS="@ " until [ $port_remot = $port_remot1 ] do 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}'` flagflag=`echo $port_remot | wc -l` if [ $flagflag -gt 1 ] then port_remot="null10" fi sleep 1 port_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" fi sleep 1 done IFS=$OLDIFS } function_addr_sw () { addr_sw_name=`echo "enterprises.9.9.23.1.2.1.1.4."$id_port"."` vtu8="null10" vtu9="null20" OLDIFS=$IFS IFS="@ " 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" fi sleep 1 vtu9=`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" fi sleep 1 done IFS=$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_1 let ad_2=0x$ad_2 let ad_3=0x$ad_3 let ad_4=0x$ad_4

14

addr_sw=`echo "$ad_1"."$ad_2"."$ad_3"."$ad_4"` } # Funzione per l'aiuto di utilizzo del comando # print_help () { cd $HOME echo "Programma $0 versione 0.1 Marzo 2008 Autore: Roberto Gaeta" echo "" echo "Uso: $0 <opzione>" 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_help exit 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: opt do case "$opt" in d) ip_dest="$OPTARG";; i) device="$OPTARG";; s) snmp_ro="$OPTARG";; m) mac_dest="$OPTARG";; *) print_help; exit 1;; esac done if [ $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_help exit 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 ###

15
if [ $flag_ip_dest = "ok" ] then net_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" ] then if [ "$net_pc" = "$net_dest" ] then # echo "L'indirizzo ip di destinazione nella stessa subnet" if ! arping -I $device -c 3 $ip_dest > /dev/null then echo "Indirizzo ip $ip_dest non pingabile!" exit 1 fi mac_ip_dest=`arp -a $ip_dest | awk '{print $4}'` mac_ip_dest=`echo $mac_ip_dest | tr ":" " " ` if [ "$mac_ip_dest" = '<incomplete>' ] then echo "Il MAC ADDRESS non stato trovato!" exit 1 fi else # echo "L'indirizzo ip di destinazione non nella stessa subnet" if ! ping -c 3 $ip_dest > /dev/null then echo "Indirizzo ip $ip_dest non pingabile!" exit 1 fi mac_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 fi elif [ $flag_mac_dest = "ok" ] then mac_ip_dest=$mac_dest mac_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_normale echo "" echo "" echo "" ############################################################ ########## MESSAGGIO DI ATTESA DEL PACCHETTO CDP ################################################ # testo_invertito echo "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_rosso echo "" 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_normale exit 1 fi

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_blu echo "----------------------------------" # testo_normale echo " $ip_pc" # testo_blu echo "----------------------------------" # testo_normale # testo_azzurro echo " | $device" echo " |" echo " | $port_loc_sw (vlan = $vlan_sw_dec)" # testo_blu echo "----------------------------------" # testo_normale echo " $name_sw ( $addr_sw )" # testo_blu echo "----------------------------------" # 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_name name_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_azzurro echo " | $out_port (vlan = $vlan_sw_dec)" echo " |" # testo_normale ############# FINISCE C ###################### ############## INIZIA E ####################### # testo_azzurro echo " | $port_remot (vlan = $vlan_sw_dec)" # testo_blu echo "----------------------------------" # testo_normale echo " $name_sw ( $addr_sw )"

17
# testo_blu echo "----------------------------------" # testo_normale ############## FINISCE E ####################### ######################## INIZIO STRUTTURA X ######################################################### struttura_x_snmp ########################################### FINE STRUTTURA X ####################################### function_port_name name_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_azzurro echo " | $out_port (vlan = $vlan_sw_dec)" echo " |" # testo_normale ############# FINISCE C ###################### # testo_azzurro echo " | " # testo_blu echo "----------------------------------" # testo_normale echo " $ip_dest ( MAC = $mac_ip_dest )" echo " $nome_ipdestinazione" # testo_blu echo "----------------------------------" # 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: per esempio: sudo l2traceroute.sh -d 10.4.2.1 -i eth0 -s public otteniamo il seguente risultato:
----------------------------------------------------------------------------------------------------------------------------------------Indirizzo IP sorgente = 10.4.2.151 Subnet mask IP sorgente = 255.255.0.0 Default Gateway del PC sorgente = 10.4.0.1 Rete di appartenenza del PC sorgente = 10.4.0.0/16 Mac address di destinazione = 00 1B 78 C0 43 32 IP di destinazione = 10.4.2.1 Nome DNS dell'IP di destinazione = pc-pippo.bingo.it Rete 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

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 ----------------------------------

Telefono IP

Destinazione

Oppure fornendo l'interfaccia del PC sorgente, la community snmp read only e il mac-address per esempio: sudo l2traceroute.sh -i eth0 -s public -m 00:1C:C4:66:B1:2A otteniamo il seguente risultato:
----------------------------------------------------------------------------------------------------------------------------------------Indirizzo IP sorgente = 10.4.2.151 Subnet mask IP sorgente = 255.255.0.0 Default Gateway del PC sorgente = 10.4.0.1 Rete di appartenenza del PC sorgente = 10.4.0.0/16 Mac address di destinazione = 00 1C C4 66 B1 2A IP di destinazione = Sconosciuto Nome DNS dell'IP di destinazione = Sconosciuto Rete 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) |

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 di destinazione non un PC ma un apparato di rete con CDP e SNMP abilitato, il programma si blocca in un loop.

Potrebbero piacerti anche