2000px-Cisco_logo.svg

Uno sguardo a CDP

Ho recentemente ricercato soluzioni per reperire informazioni sulla topologia di una rete e tra le varie tecnologie che ho analizzato mi sono soffermato sulle possibilità offerte dal protocollo CDP di Cisco.

CDP è un protocollo proprietario Cisco che lavora a livello 2. Ogni dispositivo di rete conforme a questo protocollo (ossia quasi tutti i dispositivi Cisco) invia a tempo (di base 60 secondi) pacchetti conformi a questo protocollo ad un indirizzo di multicast definito. Tutti gli altri apparati nel medesimo dominio di broadcast raccolgono questi pacchetto/annuncio e memorizzano le informazioni ivi contenute in una memoria cache (cdp cache).

Le informazioni indicano versione di IOS, ruolo, porte, hostname, e altro ancora, costruendo per ciascun dispositivo una conoscenza su quale altro apparato ha nelle vicinanze (neighbours).

La cache è interrogabile via comandi IOS (show cdp…) oppure remotamente via SNMP.

Per costruire una topologia della rete (che vada anche oltre l’analisi di livello 2) occorre quindi interrogare un qualche oggetto (noto) capace di CDP e da questo ricorsivamente tutti gli oggetti confinanti rilevabili (non noti a priori). In questo modo una volta rilevato un router potremo anche superare la barriera del rilevamento a livello 2 (tipico di un nmap, ad esempio). [Cfr Rif. 1 pag 4]

Per eseguire queste interrogazioni da remoto occorre disporre di un altro protocollo, lo SNMP.

In particolare per interrogare un dispositivo Cisco con CDP attivo occorre compilare i seguenti MIBs:

  1. SNMPv2-SMI
  2. SNMPv2-TC
  3. SNMPv2-CONF
  4. SNMPv2-MIB
  5. CISCO-SMI
  6. IANAifType-MIB
  7. IF-MIB
  8. CISCO-TC
  9. INET-ADDRESS-MIB
  10. SNMP-FRAMEWORK-MIB
  11. RMON-MIB
  12. CISCO-VTP-MIB
  13. RFC1155-SMI
  14. RFC-1212
  15. SNMPv2-TC-v1
  16. CISCO-CDP-MIB

Disponibili sul sito Cisco.

Nello specifico potremmo interrogare i seguenti oggetti:

  • cdpGlobal
  • cdpInterface
  • cdpCache

Pur potendo eseguire il tutto a mano (o in maniera batch) mediante il comando snmpwalk (o altro strumento di navigazione tra rami SNMP) ho cercato una soluzione integrabile in una interfaccia web.

Così ho cercato e trovato un framework in PHP molto interessante che offre una soluzione per interrogare ricorsivamente dispositivi CDP (oltre a tutta un’altra serie di capacità che meritano di essere approfondite).

Si tratta del Framework OpenSolutions/OSS_SNMP. E’ estremamente estensibile e è già compatibile con tecnologie Cisco, HP, Foundry/Brocade, Asterisk, Extreme, MRV.

Richiede PHP >5.4.

Senza entrare in dettagli vi fornisco un programma demo che utilizza tale framework (è necessario che tutti i dispositivi di rete rispondano in SNMPv2 per la stessa community) .

Fornendo a linea di comando (PHP-CLI) l’indirizzo di un dispositivi noto interrogabile (switch, router, ecc) e la community restituisce (ovvero stampa a console) un array con la topologia individuata.

#! /usr/bin/php

<?php
// This is an example script for OSS_SNMP Cisco CDP MIBs
if( count( $argv ) != 3 )
{
echo "Missing argument\n";
echo "USAGE: <hostname/IP Address> <community>\n";

exit( 1 );
}

require_once( dirname( __FILE__ ) . '/../OSS_SNMP/SNMP.php' );

$router = new \OSS_SNMP\SNMP( $argv[1], $argv[2] );

// Neighbours del route dato
print_r( $router->useCisco_CDP()->neighbours(true) );

// Interroga ricorsivamente i router periferici
print_r( $router->useCisco_CDP()->crawl() );

echo "\n\n";
exit( 0 );

 

Vedremo in un prossimo articolo come consentire ad un server Linux di diventare un oggetto di rete che si annuncia via CDP e sia pertanto visibile come oggetto confinante ai dispositivi Cisco.

 

Riferimenti

1 “Cisco Discovery Protocol Configuration Guide, Cisco IOS Release 15M&T” 2014 (cdp-15-mt-book.pdf)

IMG_2710.JPG

Condivisione multi utente per la libreria iTunes e altro ancora (parte 2)

Continuiamo l’analisi di iTunes per raggiungere il nostro obiettivo di condivisione.

Ripartiamo con alcune caratteristiche “fisiche” della libreria iTunes.

La libreria è composta di un file “.itl” e un insieme ordinato di cartelle.
Lo schema della cartella della libreria è il seguente:

  • Album Artwork
  • iTunes Library.xml
  • iTunes Library Extras.itdb
  • iTunes Library Genius.itdb
  • iTunes Library.itl
  • iTunes Media
  • Previous iTunes Libraries

In particolare la cartella iTunes Media contiene le seguenti cartelle (molte create dinamicamente all’aggiunta in libreria dei media per cui sono predisposte, così come verranno rimosse quando dalla libreria verrà eliminata l’ultima istanza di in certo media):

  • Automatically Add to iTunes.localized
  • Books
  • Music
  • Home Videos
  • iTunes U
  • Mobile Applications
  • Podcasts

Se la vostra libreria è vecchia come la mia, ha probabilmente ereditato la struttura gerarchica precedente: potete liberamente trasferire le cartelle nella posizione corretta (troverete probabilmente Books, Podcast e Home Videos in una cartella iTunes Music).

Mentre le finalità di ciascuna cartella sono abbastanza ovvie, meno noto è l’uso della cartella “Automatically Add to iTunes.localized”.

La cartella “Automatically Add to iTunes.localized” serve ad aggiungere alla libreria (all’avvio di iTunes) gli oggetti ivi eventualmente contenuti: ha due difetti: accetta solo file di media del tipo gestito  (no alias, no playlist in formato xml, testo, m3u, ecc) e copia l’oggetto nel ramo di iTunes Media anche se opzione consolidamento non è attiva. Questo impedisce a questa cartella di essere usata come luogo di scambio (o migrazione) tra librerie da sincronizzare.

ITunes consente di esportare la libreria in formato xml: è una operazione da menu, e si chiama appunto “Esporta Libreria”. Come sottolineato dalla documentazione Apple questa esportazione non è completa; aggiungiamo noi quanto non detto: il file non contempla ad esempio le app mobile, ma per noi è sufficiente riguardi la playlist Musica e le playlist utente derivanti.export

L’importazione sarebbe un mistero se non si tenesse in considerazione quanto abbiamo sottolineato in precedenza e quanto è osservabile interrogando iTunes via AppleScript: la Musica nella libreria è una playlist (particolare, ma pur sempre una playlist). Quindi la funzione “Importa Playlist” è la nostra funzione di importazione della libreria di musica. Per quanto accennato la funzione importerà anche tutte le playlist utente esportate col precedente metodo.import

Non considerate questa esportazione/importazione un sistema di backup completo per la vostra libreria: abbiamo già detto che non contiene tutte le informazioni.

Eppure Apple stessa la considera utile per un disaster recovery della vostra libreria: perché ?

La nascita stessa di una libreria in iTunes fonda le sue ragioni nella necessità di preservare quelle informazioni che non possono risiedere nel formato file del media (è ancora vero per alcuni formati). Tutto quanto è parte del formato file è recuperabile aggiungendo nuovamente il file alla libreria, ma il resto delle informazioni aggiunte grazie alla capacità della libreria non lo è: queste informazioni sono oggetto di esportazione nel formato xml della funzione Esporta Libreria, ecco perché è utile ancora oggi a recuperare una libreria corrotta.

Noi sfrutteremo questa funzione con ben altro scopo.


Quindi, prima di iniziare, affidatevi ad una copia aggiornata della vostra libreria in Time Machine, o (se proprio non potete) almeno affidatevi ad una copia su altro percorso del file Library.itl.

Ci leggiamo quando siete pronti !

IMG_2710.JPG

Condivisione multi utente per la libreria iTunes e altro ancora (parte 1)

Torniamo a parlare di iTunes.

Uno degli aspetti più trascurati in molti software è la possibilità di condividere il proprio archivio tra gli utenti del sistema quando questo archivio abbia una naturale vocazione alla condivisione, anche e non solo per la necessità di tenere sotto controllo il peso degli oggetti di archivio che possono ripetersi tra più utenti.
Forse questa tendenza a trascurare la multi-utenza è dovuta alla ridotta necessità di questa in un mercato dominato da computer portatili utilizzati da un solo proprietario (personal computer, dunque). Il predominare poi dei dispositivi mobile (per loro natura “personal”) ha ulteriormente allontanato la multi-utenza tra le priorità degli sviluppatori software.

Peccano di mancanza di strumenti per la multi-utenza iTunes come gli altri software della famiglia i* (tutto il pacchetto iLife, per intenderci).

Ma stiamo parlando di OSX, un sistema che a differenza del MacOS nasce multiutente, e questa caratteristica ha una naturale collocazione nell’uso domestico e familiare di un iMac, ove ciascun membro può avere un profilo proprio ma che (per naturale appartenenza al medesimo gruppo umano) condividerà molto con gli altri utenti (pensiamo solo ai video o le foto delle gite familiari).

Eppure tutti questi programmi ignorano la loro possibile collocazione in ambito multiutente, lasciando a noi l’onere di individuare una soluzione.

Certo una qualche soluzione a volte è fornita dal supporto Apple (vedi https://support.apple.com/it-it/HT204488), ma come si può leggere non tutto è agevole, e nemmeno tutto è esplicitato.
Focalizzandoci su iTunes (dovremmo affrontare analoghe questioni anche per iPhoto o iMovie) vedremo di trovare alcune soluzioni più “complete”.
iTunes nasce in epoca MacOS ed era dedicato alla sola riproduzione audio. Si è evoluto gradualmente: video, podcast e app mobile sono arrivare col tempo e ben dopo la migrazione a OSX. Librerie ereditate da un’epoca pre iOS (come nel caso della mia) contengono i file multimediali in una cartella iTunes Music. Abbastanza significativo, no?
Gli aggiornamenti dell’applicativo hanno modificato la base dati, ma non la struttura di directory della mia libreria.
Ma il tempo è passato, e la struttura prevista dalle nuove versioni prevede ora tutta un’altra gerarchia, come si può osservare in una libreria creata ex-novo con una nuova versione (vedi procedura https://support.apple.com/it-it/HT201596).

In questa serie di articoli affronteremo principalmente il problema della condivisione della libreria iTunes a vari livelli, ma forniremo anche alcune esperienze sul significato di alcune componenti e sulle possibili configurazioni della libreria, nonché qualche suggerimento sparso. Sia ben chiaro: la “Condivisione in famiglia” non ha nulla a che vedere con il problema affrontato: questa condivisione è via rete locale, quindi l’iPod di vostra moglie non potrà essere sincronizzato con i brani che voi avete acquistato sullo store, pertanto non potrà sentirli durante la sua sessione di palestra (a meno che non abbiate la palestra in casa).
Purtroppo quello che vorremmo raggiungere, ossia la a piena automazione di tutte le procedure, non è ottenibile (come evidente dal documento del supporto Apple https://support.apple.com/it-it/HT204488) anche e non solo in quanto iTunes (come altri software) può aprire librerie differenti solo al suo avvio (vedi procedura https://support.apple.com/it-it/HT201596) e non è capace di fare questo nemmeno via Apple Script (esistono delle possibilità alterando un file di configurazione attraverso il comando defaults, ma non è una scelta condivisibile: troppo suscettibile di variazioni con gli aggiornamenti software). Comunque e una possibilità che completerebbe l’automazione cercata.
Cercheremo comunque di avvicinarci offrendo delle soluzioni di automazione che almeno supportino i processi eventualmente necessari a raggiungere lo scopo principale di realizzare una condivisione multiutente.

Chiariamo subito: una totale condivisione della libreria è possibile in un modo semplice ed immediato ma non utile. Si può infatti completamente condividere una libreria ponendola in area condivisa (Shared folder.localized) tra più utenti e dando i giusti permessi (fatto questo abbastanza ovvio).
Questa però non è (dicevamo) una soluzione utile, in quanto la libreria è contenitore di tutti i media gestibili con iTunes e ciascun utente vorrebbe una qualche autonomia di configurazione, lasciando che solo quanto è realmente condivisibile lo sia mentre il resto possa restare autonomo e privato. Se consideriamo che il file “.itl” gestisce il parco musica, così come le app mobile, libri e playlist e altro ancora è di tutta evidenza come ciascun utente voglia poter mantenere una certa autonomia di alcuni di questi media.

Cercheremo di mostrare come consentire una condivisione completa di musica e al contempo una piena indipendenza di app o quanto altro.
Come si evince da documenti Apple, si possono avere due librerie distinte che condividono gli stessi media, ma non si ha un modo per sincronizzarle.

Questo in quanto le due librerie hanno file “.itl” indipendenti: in questi è presente l’insieme delle informazioni che costituiscono la libreria, e non esistono strumenti di esportazione o importazione parziali.

Cercheremo di superare questo ostacolo. Inoltre daremo una soluzione alla individualità di gestione di altre risorse come le app mobile (la frattura tra versioni di iOS e dispositivi di vecchia generazione impone di avere un parco software non aggiornatissimo in una libreria indipendente diciamo “legacy”).

Iniziamo dunque con una panoramica degli strumenti disponibili, ma questo lo faremo in un altro articolo: ci siamo dilungati troppo.