Was ist mit einem Skript am einfachsten zu finden, wenn sich meine IP-Adresse geändert hat?
Hintergrundinformation:
Ich habe eine Standardverbindung für ein Heimkabelmodem und mein ISP weist mir eine dynamische IP zu. Es ändert sich von Zeit zu Zeit, die DHCP-Lease-Zeiten scheinen unregelmäßig.
Grundsätzlich mache ich meine eigene dynamische DNS-Sache und kann die DNS-Einträge, die auf meinen Heimserver verweisen, mit einem Klick aktualisieren. Das einzige, was noch übrig bleibt, ist, eine IP-Änderung zu erkennen, damit ich den Prozess vollständig automatisieren kann.
Jetzt gibt es hier mehrere Websites, die Ihre IP-Adresse zurückgeben können, und ich könnte einen Cron-Job für wget
eine dieser Seiten und grep
die IP-Adresse von dort verwenden ... Aber es scheint in Bezug auf die CPU- / Bandbreitennutzung übertrieben zu sein, und es ist nicht sehr KUSS.
Fehlt mir eine einfache und elegante Möglichkeit, meine öffentliche IP-Adresse abzurufen und zu überprüfen, ob sie sich geändert hat?
Extra Info: Mein Modem / Router ist ein billiger Baustein, es macht in dieser Hinsicht nichts sehr Interessantes. Mein Server läuft mit Centos 6.
quelle
Sie können jede Website abfragen, auf der Ihre IP für diese Aufgabe angezeigt wird. Verwenden Sie checkip.dyndns.com , da es nur text.on ist.
Beispiel:
quelle
Ich hatte heute dieselbe Frage und war mit den Antworten, die ich hier oder bei Google gesehen habe, nicht zufrieden. Deshalb habe ich ein PowerShell-Skript geschrieben, um mir eine Slack-Benachrichtigung zu senden, wenn sich meine IP-Adresse ändert .
Wenn Sie eine E-Mail erhalten möchten, können Sie auf die Links im Skript klicken, um eine andere Version anzuzeigen, die Outlook-E-Mails unterstützt.
Ich hoffe das hilft jemandem und verdient eine Stimme. :-)
Speichern Sie den folgenden Text in einer .ps1-Datei. Bearbeiten Sie es entsprechend mit Ihrer eigenen Slack-Webhook-URL. Speichern. Klicken Sie mit der rechten Maustaste auf die Datei, um "Mit PowerShell ausführen".
Oder Sie können festlegen, dass es täglich oder wie oft ausgeführt wird.
So funktioniert der Taskplaner:
Ich musste PowerShell als Administrator ausführen und dann ausführen
Get-ExecutionPolicy
, was mir dann mitteilte, dass meine aktuelle ExecutionPolicy "eingeschränkt" war.Dann bin ich gelaufen
Set-ExecutionPolicy RemoteSigned
(wie hier gezeigt, aber es macht mich nervös: https://stackoverflow.com/a/26955050/470749 ).Dann habe ich an einer einfachen Windows-Eingabeaufforderung ein paar Mal versucht, den folgenden Befehl auszuführen:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"
(einmal, um die IP zu speichern, und ein zweites Mal, um zu überprüfen, ob sie sich geändert hat).(Bis das funktioniert, versuchen Sie nicht, den Taskplaner zu verwenden.)
Dann habe ich eine Aufgabe mit
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
als Programm und-ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1
als Argumente geplant.quelle
Die vorherigen Antworten ohne die PS-Implementierung sagen Ihnen nicht, ob sich die IP geändert hat. (Ich möchte PowerShell lieben. Ryan hat gut herausgefunden, warum ich das nicht tue: Ausführungssicherheitsberechtigungen sind störend).
Das Parsen der IP ist nicht erforderlich, solange sich keine zusätzliche Ausgabe ändert, wenn sich die IP nicht geändert hat. Zum Beispiel gibt checkip.dyndns.com so etwas wie die aktuelle IP-Adresse zurück: ddd.ddd.ddd.ddd. Es reicht also aus, einfach die gesamte Ausgabe zu vergleichen.
Auch wenn Sie Curl verwenden, möchten Sie möglicherweise den Fortschritt mit dem Flag -s ausblenden. Da es in stderr geschrieben ist, verschmutzt es stdout nicht.
Hier ist also ein einfaches .cmd-Skript, das Curl verwendet, um die Ausgabe zu speichern. Anschließend wird FC verwendet, um es mit der vorherigen Ausgabe zu vergleichen, falls vorhanden. Ich muss keine FC-Optionen für Unicode, Groß- und Kleinschreibung usw. festlegen, da die Ausgabe eine binäre Übereinstimmung sein sollte, wenn sich die IP nicht geändert hat. Unix hat cmp anstelle von FC.
Offensichtlich kann CurrentIp.txt LastIp.txt entsprechend geändert werden, z. B. mit dem Präfix "% TMP% \". Dieses Skript sollte mit geringfügigen Änderungen über den Taskplaner funktionieren.
quelle
Antwort auf OP: "Fehlt mir eine einfache und elegante Möglichkeit, meine öffentliche IP-Adresse abzurufen und zu überprüfen, ob sie sich geändert hat?"
Eine wirklich einfache Antwort ist nicht. Aktualisieren Sie einfach regelmäßig Ihre IP.
Es scheint verschwenderisch, aber "intelligentere" Lösungen sind nur komplexer und weniger zuverlässig, ohne CPU, Bandbreite usw. zu sparen. Das Senden von 1500 Bytes oder weniger (ein Paket) einmal pro Stunde ist sehr billig. Ein ganzes Jahr verbraucht 365 * 24 * 1.500 = 13 Meg Bytes oder ungefähr 3 Minuten des Rifleman auf Netflix.
Die CPU- / Bandbreitenkosten für das Abrufen Ihrer externen IP-Adresse und das gelegentliche Posten Ihrer neuen IP-Adresse sind höchstwahrscheinlich höher als nur das periodische redundante Posten Ihrer IP-Adresse. Ich poste meine IP seit Jahren stündlich jede Stunde auf duckdns, ohne Probleme. Wenn Sie dies 1 / Sekunde tun, kann Ihr Domain-Service dies natürlich herausfinden und sich ärgern. Ebenso wird jeder Dienst, den Sie zum Nachschlagen Ihrer IP verwenden, nicht glücklich sein, wenn Sie dies tun.
Ein letzter Gedanke, die Frage, die Sie stellen, ist ein Teil des Problems, das Sie erwähnen. Der Auslöser für die Aktualisierung Ihrer dynamischen DNS kann sein, wenn Ihr Domain-Name nicht auf Ihrem Server aufgelöst wird. Sie könnten Ping verwenden, aber wenn Ihre alte IP-Adresse wiederverwendet wird, reagiert der neue IP-Leasingnehmer möglicherweise auf Ping.
In diesem Sinne können Sie regelmäßig versuchen, eine kleine Signatur- / Magic-Datei von Ihrem Server herunterzuladen. Dies könnte wirklich jede statische Datei sein, die Ihnen sagt, dass Sie Ihren Server gefunden haben, sogar Ihre Homepage würde funktionieren, aber ein ungewöhnlicher Name wäre viel besser als default.html.
Wenn das D / L fehlschlägt, aktualisieren Sie Ihre IP, leeren Sie Ihren DNS-Cache und versuchen Sie es erneut. Abhängig von Ihrem DNS-Dienst kann es einige Minuten dauern, bis das Update wirksam wird. Dieser Ansatz beseitigt die Abhängigkeit von einer anderen externen IP-Site und testet tatsächlich, was Sie wirklich wissen möchten: Können andere meine Site erreichen?
quelle
Als alternative Option, die Ihnen helfen könnte, habe ich ein Python-Skript geschrieben, das zur Überwachung auf Änderungen der externen IP-Adresse entwickelt wurde. Ich benutze es unter Linux, aber da es Python ist, sollte es unter Windows gut funktionieren, nachdem die entsprechende Python-Umgebung eingerichtet wurde. Derzeit wird die "aktuelle" externe IP-Adresse in einer Datei gespeichert. Beim Ausführen wird eine neue IP-Adresse abgerufen und mit der alten verglichen. Es ist beabsichtigt, Ihnen eine E-Mail zu senden, wenn eine Änderung festgestellt wird.
Es kann als Cronjob (Linux) oder geplante Aufgabe (Windows) ausgeführt werden und wird nicht als eigenständiger Hintergrunddämon ausgeführt.
Hier ist der Link zum Github-Repository: https://github.com/begleysm/ipwatch
Hoffentlich hilft es!
quelle
Ich benutze
curl ifconfig.me
, aber es ist nichts, was ich auf anderen Plattformen als Debian versucht habe.quelle