2010-04-29 9 views
8

Qualcuno conosce un modo per rilevare una modifica dell'indirizzo IP in Linux. Diciamo che ho dhcpcd in esecuzione e assegna un nuovo indirizzo IP, c'è un modo in cui posso ricevere una notifica quando cambia? Non posso usare D-Bus, perché si tratta di una build ucLinux incorporata che non ce l'ha.Rilevamento di una modifica dell'indirizzo IP in Linux

inotify su qualcosa in/proc/net /?

+0

Quanto velocemente vorresti sapere? È abbastanza lungo che una sorta di sondaggio è accettabile? (non che io raccomanderei il polling se è disponibile una notifica adeguata) –

+0

http://stackoverflow.com/questions/8542253/how-to-get-notified-for-ip-address-changes-automatically – LtWorf

risposta

1

Poiché l'attività DHCP viene inviata a syslogd, è possibile creare una pipe denominata, indirizzarvi il traffico syslog e guardare il flusso per gli aggiornamenti degli indirizzi IP. Vedi 'man syslogd' e 'man syslog.conf'.

Modifica: un altro approccio consiste nell'utilizzare inotify per monitorare il file di lease DHCP per l'interfaccia. Sotto Ubuntu 9.10 che si trova nella directory/var/lib/dhcp3.

+0

La soluzione I think I Andremo con inotify monitor/proc/net/route, e poi usare l'ioctl SIOCGIFADDR per interrogare l'indirizzo ogni volta che cambia la tabella di routing. –

+1

Probabilmente non è possibile monitorare/proc file usando inotify./proc non è "in realtà" un file system ma piuttosto un'interfaccia del kernel. – Snowhare

12

Il comando

ip monitor 

vi mostrerà questo genere di cose succede. Utilizza alcune API netlink che sono piuttosto complicate e non ben documentate (almeno per gli umani da capire). Tuttavia, è in grado di ricevere notifiche dal kernel di vari eventi, come cambiamenti di IP assegnati, tabelle di routing e stato del collegamento (ad esempio qualcuno scollegato dalla rete)

+1

Sembra buono - molto buono; grazie ... ma non disponibile nella versione BusyBox di ip in ucLinux! –

+0

Quindi grazie, molto utile – pylover

1

Quello che ho pensato è stato eseguire questo script da cron ogni 10 o così minuti, a seconda del tuo link. Se ho scritto bene, è nsupdates solo quando c'è una modifica IP, quindi nessun carico eccessivo è creater sul server principale della zona.

#!/bin/bash 

OLD_IP=`cat ip.txt` 

NEW_IP=`/sbin/ifconfig | awk -F "[: ]+'{ print $4}'` #adapted from something I got from the internets. 

if [ $NEW_IP != OLD_IP ]; then 
    nsupdate <commands> #it seems like the keys need to be in the same directory from where nsupdate was called 
fi 

echo $NEW_IP > ip.txt 

exit 0 #not sure if this is necessary 

Non testato!

0

Se un router esegue DD-WRT e ha la pagina di stato in uso quando si accede al router, è possibile, con uno script ... wget la pagina di stato, cat per l'indirizzo IP e scriverlo in un file per il confronto, inviare un'e-mail quando l'ultimo indirizzo IP di wget è cambiato rispetto a ciò che si trova nel file di confronto.

Sto eseguendo dd-wrt su un router linkys wrt54g e utilizzo questo script: E 'in grado di salvare la pagina di stato del router da 192.168.3.1, utilizza cat sulla pagina (index.html) e greps per l'indirizzo ip pallido , quindi lo scrive in un file (gotip.txt).

Viene effettuato un confronto tra l'ip catturato (gotip.txt) e l'ip corrente di lavoro (workingip.txt). Se gli indirizzi IP sono diversi, ricevo un'email inviata per posta del nuovo IP e il nuovo IP funzionante è scritto nel file workingip.txt.

Cron eseguire questo ogni 5 minuti o giù di lì e non ho l'uscita cron tacere a/dev/null

#!/bin/bash 

getip=$(wget http://192.168.3.1/) 
cat index.html | grep "wan_ipaddr" > gotip.txt 

gotip=$(cat gotip.txt) 
compare=$(cat workingip.txt) 

if [[ "$compare" != "$gotip" ]] 
    then 
    EMAIL="[email protected]" 
    EMAILMESSAGE="/home/pi/ipmessage.txt" 
    echo "ip address is now $gotip" >> $EMAILMESSAGE 
    /usr/sbin/sendmail -t "$EMAIL" < $EMAILMESSAGE 
    rm ipmessage.txt 
    cp gotip.txt workingip.txt 
    rm index.html 

else 
echo "done" 
rm index.html 
fi 
13

Questa è una vecchia questione, ma io risponderò per chi arriverà da Google (come ad come me). Dopo aver lottato per un po ', ho scoperto che non è necessario necessariamente eseguire il polling o hackerare una soluzione C per questo. Per il mio caso, volevo aggiornare il dominio del mio server domestico (dynamic dns) quando l'IP cambia.

Se si esegue dhcpcd, si è fortunati.dhcpcd eseguirà script di hook quando succede qualcosa. Vedi man dhcpcd-run-hooks(online here). Fondamentalmente vorrai modificare o creare il tuo dhcpcd.enter-hook o dhcpcd.exit-hook a seconda di cosa vuoi fare con i dati forniti dall'evento.

1

Questo è un thread più vecchio, ma nel caso qualcuno lo trovi come me, ho scritto qualcosa che fa il rilevamento/notifica di cambio rete in Linux un po 'indietro (principalmente mirato ad aiutare gli utenti VPN), e grazie ad alcuni amici invadenti che ho messo per gli altri da usare. Ora è un progetto per animali domestici e lo sto attivamente mantenendo, quindi le richieste di funzionalità e il feedback sono ben accetti.

http://code.google.com/p/ipcheck/source/browse/ipcheck.sh

Problemi correlati