Come passivamente monitorare l'accesso alla rete utilizzando Perl, SNMP, e SQL


Ha oltre 20 switch Ethernet attraverso le reti? Hanno viaggiato per oltre 5 router IP? Non avete idea di chi si è connessi a bordo della vostra rete? Ho una media di rete a una università privata. Ho preso un paio di trucchi nel corso degli anni, e mi piace condividere alcune idee con voi. Spero di rendere la vita più facile per la fine di questo articolo.

Ricevo la telefonata occasionale chiedendo se posso trovare dove questo indirizzo MAC è. O forse si tratta di una denuncia abuso di fuori del luogo di un indirizzo IP specifico a un certo punto nel tempo. Hai paura di quella chiamata? Non vedo l'ora. Ho un piano. Sono pronto. Ti faccio vedere come lo faccio.




I lettori di questo tutorial deve avere alcune informazioni

  • scrivere script Perl
  • creazione e SQL tabelle di interrogazione
  • interrogare le apparecchiature di rete con SNMP
  • amministrazione del router

Protocol Address Resolution

Non so nulla di particolare rete. Questo è un bene per le reti di computer: ci sono 1001 modi per risolvere eventuali problemi. Il modo più comune che ho incontrato aggregazione e distribuzione di reti di accesso è l'approccio a tre livelli mostrato nella barra laterale.

Se un percorso di rete per accedere a bordo o fare riferimento al percorso di base, le reti IP devono passare dal livello 2 al livello 3 in qualche parte. E quando lo fanno, non è un router che registra l'indirizzo MAC a cui l'indirizzo IP per consegnare pacchetti attraverso l'ultimo hop alla destinazione. Ogni dispositivo Ethernet ha un linguaggio tavolo IP ARP, ed i router sono diversi.

L'indirizzo MAC identifica una scheda di rete in un segmento locale. Ma cosa succede se si sta tracciando un indirizzo IP? Mentre il dispositivo che si sta cercando è in linea, quindi è quasi finita. Login al router con l'indirizzo IP della sottorete, mostra la tabella ARP, e non l'indirizzo MAC. Niente di nuovo qui.

Ma che dire di vedere chi era che la proprietà intellettuale 36 ore fa? Sei settimane fa? Sei mesi fa? La maggior parte delle voci ARP timeout dopo 5 minuti. Alcuni router richiedono più tempo, ma mai più di un paio di ore. Se si vuole la ricerca storica, è necessario prendere in considerazione la commissione del ARP per la memorizzazione persistente. Parla Perl, giusto? Andiamo e ottenere il pacchetto CPAN DBD :: SQLite. (È già DBI, sicuramente!) Durante l'installazione del pezzo, continuate a leggere. Tornando alla installazione di SQL un po 'più tardi.

Ora dobbiamo capire ... come raccogliere la tabella ARP del router ... e come trasferire queste informazioni a un database. Non è così difficile! Passando.

Red 101: ARP spiegato

Simple Network Management Protocol

SNMP è all'altezza del suo nome? "Semplice"? Io dico di sì. E 'solo un motore di database che risponde alle domande. I tavoli sono costituiti da file di chiavi e valori. Entrambi i nomi delle tabelle e le password all'interno di tabelle sono stringhe decimali o numerici separati OID.

Il dado abbiamo lasciato ecco una tabella chiamata ipNetToMediaPhyAddress. Questo è il nome SNMP per la tabella ARP. Il tuo OID è 1.3.6.1.2.1.4.22.1.2. (Cercare una parser MIB per aiutare a capire la ricerca-nome OID.)

Prima di andare troppo lontano, assicurarsi di avere accesso SNMP al router. Se è stato installato l'utility SNMP, selezionare il router e questa domanda:

snmpgetnext -c pubblico 10.10.10.1 1.3.6.1.2.1.4.22.1.2

Otterrete indietro la prima riga della tabella ARP del router. Ho detto questo:

IP-MIB :: ipNetToMediaPhysAddress.3.10.129.44.1 = STRING: 00: 11: 88: 05: 5F: secondo

Suona come il passo successivo è quello di portare le query Perl SNMP. Facciamo testa indietro per CPAN e questa volta, installare Net :: SNMP. Inizializzare l'oggetto con il nome host SNMP e le credenziali appropriate. Poi controllare l'immagine sull'etichetta destra Setting ... Subito dopo l'esecuzione di questo script, ottengo i risultati nei risultati ... Il formato della risposta è un po '"diverso questa volta. La chiave è numerico, e il valore è stampato in notazione esadecimale, senza separatori. Nessun problema, ci arriveremo alcune espressioni regolari di frusta in forma (vedi funzione hex_to_mac sotto).

Passeggiando tavolo SNMP

Senza entrare nei dettagli di SNMP, è necessario sapere che ogni snmp_get_next restituisce la risposta alla domanda di cui sopra, così come un indicatore chiave per la prossima visita. Vedere ciclo Esempio Perl ... per un pezzo di Perl che alimenta il seguente pulsante nella query.

SQL, i dati coltellino svizzero

Creare una tabella per rappresentare lo spazio IP. Il mio posto di lavoro ha una classe B, il che significa che è possibile catturare tutti i nostri ARP righe spazio 64K. (Meno, perché non siamo pienamente abituati, ma sto divagando.) Individuare la barra laterale intitolata Creare una tabella ... ho impostato di default iniziale come gli indirizzi IP di carica inizializzare il tavolo ...

La scena è pronta. Tutti gli strumenti sono seduti di fronte a noi. Non resta che mettere tutto insieme.

  • Chiedi la tabella arp.
  • Risultati record nel database.
  • Mettere il tutto in un programma e ripetuto a intervalli regolari.

Prima di inserire una riga nel database, catturando un handle di istruzione come valore di ritorno della funzione di preparare il vostro articolo DBI. Vedere screencap per una query di inserimento suggerito. Poi, come di eseguire iterazioni su il risultato SNMP, spingere nella tabella di chiamare la funzione da eseguire nel contesto del giudizio, come mostrato nella seguente screencap.

Con Linux o Mac OS, è stato integrato cron per configurare un sistema di un'operazione pianificata. Non ho provato a mettere in discussione via SNMP Perl su Windows, per non parlare di metterlo in un programma ... quindi devo molto da offrire lì. Lasciando da parte per Windows, per ora, di nuovo al manager crontab, impostare lo script da eseguire sul router querier ogni n minuti, dove n rappresenta la configurazione del router ARP timeout.

Timestamp IP MAC 2014/02/20 23:41 192.168.1.101 f0: ab: 13: 29: f3: 2c 2014/02/21 00:11 192.168.8.11 di: annuncio: essere: ef: ca: Fe Dati di esempio per la tabella ARPCache DB Tabella

ARP cache

L'obiettivo finale è quello di interrogare le tabelle ARP di tutti i router per il cliente e poi mantenere questi record sufficienti per aiutare con il tempo di ricerca. Se l'organizzazione non ha ancora definito i criteri di conservazione, è sufficiente scegliere un numero: 30 giorni? 6 mesi? Ad un certo punto si esaurisce lo spazio su disco e DBMS prestazioni, in modo da non avere troppo pazzo.

SQL ha più trucchi abbiamo tempo per discutere in questo tutorial. Lascio come esercizio per il lettore di capire come ottimizzare le operazioni del database di là di questo esempio introduttivo. Alcune cose da considerare:

  • lo schema riportato in questo esempio ha una "più recentemente visto" MAC IP
  • perché potrebbe bloccare tutte le coppie MAC/IP uninflated vostro database?
  • che tipo di ottimizzazioni sono possibili utilizzando la vista matematico cidr?
  • Come normalizzare router indirizzi MAC su più piattaforme?
  • potrebbe applicare una simile idea di catturare le tabelle ponte per MAC-fisico-port?

Spero di avere la vostra curiosità con questo raggio attraverso l'idea di consulenza e cache tabelle ARP. Fammi sentire da voi nella sezione commenti e farò del mio meglio per rispondere a tutte le domande che avete.

(0)
(0)

Commenti - 0

Non ci sono commenti

Aggiungi un commento

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caratteri rimanenti: 3000
captcha