2010-04-29 3 views
8

Kennt jemand eine Möglichkeit, eine Änderung der IP-Adresse in Linux zu erkennen. Angenommen, ich lasse dhcpcd laufen und weist eine neue IP-Adresse zu. Gibt es eine Möglichkeit, eine Benachrichtigung zu erhalten, wenn sich diese ändert? Ich kann D-Bus nicht verwenden, da dies ein eingebetteter ucLinux-Build ist, den es nicht hat.Erkennen einer Änderung der IP-Adresse in Linux

Inotify auf etwas in/proc/net /?

+0

Wie schnell möchten Sie wissen? Ist es lang genug, dass eine Umfrage möglich ist? (Nicht dass ich die Abfrage empfehlen würde, wenn eine korrekte Benachrichtigung verfügbar ist) –

+0

http://StackOverflow.com/Questions/8542253/How-to-get-notified-for-ip-address-changes-automatisch – LtWorf

Antwort

1

Da DHCP-Aktivitäten an syslogd gesendet werden, können Sie eine Named Pipe erstellen, Syslog-Datenverkehr dorthin leiten und den Stream nach Aktualisierungen der IP-Adresse beobachten. Siehe 'man syslogd' und 'man syslog.conf'.

Bearbeiten: Ein anderer Ansatz wäre, inotify zu verwenden, um die DHCP-Leasedatei für die Schnittstelle zu überwachen. Unter Ubuntu 9.10, das sich im Verzeichnis/var/lib/dhcp3 befindet.

+0

Die Lösung denke ich Werde mit intoify monitor/proc/net/route beginnen und dann die SIOCGIFADDR ioctl verwenden, um die Adresse jedes Mal abzufragen, wenn sich die Routing-Tabelle ändert. –

+1

Sie können möglicherweise keine/proc-Dateien mit inotify überwachen./proc ist eigentlich kein Dateisystem, sondern eine Kernel-Schnittstelle. – Snowhare

0

Ich denke, dass Sie dbus verwenden können, um dies auf modernen Linux-Distributionen zu tun. Wenn Ihre Distribution Networkmanager verwendet, finden Sie dieses Dokument für Informationen über seine dbus-Schnittstelle:

http://people.redhat.com/dcbw/NetworkManager/NetworkManager%20DBUS%20API.txt

+0

D-Bus wäre nett, aber das ist ucLinux eingebettet. Tut mir leid, ich hätte das klarstellen sollen. –

12

Der Befehl

ip monitor 

Sie diese Art der Sache zeigen geschieht. Es verwendet einige der netlink API, die ziemlich schwierig und nicht gut dokumentiert ist (zumindest für Menschen zu verstehen). Es ist jedoch in der Lage, vom Kernel verschiedene Ereignisse wie Änderungen der zugewiesenen IPs, Routingtabellen und Verbindungsstatus benachrichtigt zu bekommen (z. B. jemand hat das Netzwerk getrennt).

+1

Das sieht gut aus - sehr gut; Danke ... aber nicht verfügbar auf der BusyBox-Version von ip in ucLinux! –

+0

Also danke, sehr nützlich – pylover

1

Woran ich gedacht habe, war dieses Skript von Cron alle 10 zu laufen oder so Minuten, abhängig von Ihrem Link. Wenn ich dies richtig geschrieben habe, wird es nur aktualisiert, wenn es eine IP-Änderung gibt, so dass keine unnötige Last auf dem Master-Server der Zone erzeugt wird.

#!/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 

Nicht getestet!

0

Wenn Sie einen Router haben, auf dem DD-WRT läuft und die Statusseite verwendet wird, wenn Sie zum Router gehen, können Sie mit einem Skript ... die Statusseite, cat für die IP-Adresse aufrufen und in a schreiben Datei zum Vergleich, lassen Sie eine E-Mail senden, wenn die letzte wget IP-Adresse von dem in der Vergleichsdatei geändert wurde.

Ich bin dd-wrt auf einem Linksys Wrt54g Router und verwenden Sie dieses Skript: Es wgets die Router-Statusseite von 192.168.3.1, verwendet cat auf der Seite (index.html) und greps für die wan IP-Adresse , dann schreibt es in eine Datei (gotip.txt).

Es wird ein Vergleich zwischen der erfassten IP (gotip.txt) und der aktuellen Arbeits-IP (workingip.txt) durchgeführt. Wenn die IP-Adressen unterschiedlich sind, erhalte ich per E-Mail eine E-Mail mit der neuen IP und die neue Arbeits-IP wird in die Datei workingip.txt geschrieben.

Cron ausführen, um diese alle 5 Minuten oder so und ich habe die cron Ausgabe nach/dev zum Schweigen gebracht/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

Dies ist eine alte Frage, aber ich werde für diejenigen beantworten, die von Google kommen wird (wie wie ich). Nachdem ich eine Weile gerungen hatte, fand ich heraus, dass man dafür nicht notwendigerweise eine C-Lösung abfragen oder hacken muss. Für meinen Fall wollte ich die Domain meines Heimservers (dynamische DNS) aktualisieren, wenn sich die IP ändert.

Wenn Sie dhcpcd laufen, haben Sie Glück.dhcpcd wird Hook-Skripte ausführen, wenn etwas passiert. Siehe man dhcpcd-run-hooks(online here). Grundsätzlich möchten Sie Ihre eigenen dhcpcd.enter-hook oder dhcpcd.exit-hook ändern oder erstellen, je nachdem, was Sie mit den Daten des Ereignisses tun möchten.

1

Dies ist ein älterer Thread, aber für den Fall, dass jemand es wie ich finde, schrieb ich etwas, das Netzwerkerkennung/-benachrichtigung in Linux eine Weile zurück (vor allem auf die Unterstützung von VPN-Nutzern), und dank ein paar aufdringliche Freunde es für andere zu verwenden. Es ist jetzt ein Haustier-Projekt und ich halte es aktiv, so dass Feature-Anfragen und Feedback willkommen sind.

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

Verwandte Themen