Spesso può capitare che alcune macchine collegate in rete ethernet vadano in conflitto perché hanno lo stesso indirizzo IP. La maggior parte delle volte questo inconveniente non è un problema, soprattutto nelle macchine windows. Quando due computer vanno in conflitto di ip viene notificato all’utente che sulla rete che c’è un computer con lo stesso indirizzo ip e si provvede eventualmente al cambio di ip.
Il problema però incomincia ad essere più consistente se le macchine in questione sono degli apparecchi real time, che scambiano in continuazione informazioni con altri sistemi. Risulta, in questo caso, molto importante cercare di evitare conflitti o quanto meno capire con cosa sta andando in conflitto e prendere le dovute contromisure.
In particolare per lavoro mi interessava intercettare i conflitti di indirizzi ip sulla rete, perché notavo strani down sulle apparecchiature che duravano solo pochi secondi. In modo tale da poter rapportare il tutto al gestore della rete.
Mi sono messo quindi al lavoro per sviluppare questo semplice programmino che, data la lista dei dispositivi che si intende monitorare, è in grado di produrre un log con tutte le informazioni riguardanti i conflitti di ip.
Il programma si basa sull’ascolto di pacchetti arp. Più precisamente è sensibile alle arp gratuitus. Esse non sono altro che speciali pacchetti arp. Il destinatario chiede ai computer delle rete di risolvere il suo stesso indirizzo ip. Questa richiesta, che può sembrare sciocca, in realtà serve proprio a capire se c’è un altro computer sulla rete con il suo stesso indirizzo ip. Infatti se non c’è nessun host con lo stesso indirizzo ip allora nessuna risposta gli sarà consegnata.
Questa richiesta viene solitamente effettuata dai dispositivi prima di entrare in rete.
Secondo le specifiche del protocollo arp solo le richieste sono in broadcast mentre le risposte sono in unicast. Pertanto gli unici pacchetti che ha senso intercettare sono proprio le richieste.
Per ogni pacchetto intercettato, se si tratta di una arp gratuita, il programma lo analizza e controlla se nella lista che gli abbiamo fornito c’è una voce con lo stesso indirizzo ip, ma con mac diverso. Ciò significa che un’altra macchina, differente a quella a cui abbiamo assegnato l’indirizzo ip, sta tentando di connettersi alla rete. Ecco rilevato il conflitto di indirizzi ip.
Ovviamente tutto ciò è utile solo se sulla rete avete dispositivi configurati con indirizzi ip statici.
Il programma è stato sviluppato utilizzando le librerie SharpPCap.
Per scaricare il codice del programma cliccare qui. Considerate che è molto grezzo J.