Jaki byłby najłatwiejszy sposób znalezienia skryptu, jeśli mój adres IP się zmienił?
Podstawowe informacje:
Mam standardowe połączenie z modemem kablowym, a mój ISP przypisuje mi dynamiczny adres IP. Zmienia się co jakiś czas, czas dzierżawy DHCP wydaje się nieregularny.
Zasadniczo robię własną dynamiczną usługę DNS i mogę aktualizować rekordy DNS wskazujące na mój serwer domowy jednym kliknięciem. Pozostaje tylko wykryć zmianę adresu IP, aby w pełni zautomatyzować proces.
Teraz jest kilka stron, które mogą zwrócić Twój adres IP, i mogę użyć zadania cron wget
jedna z tych stron i grep
adres IP z niego ... Ale wydaje się przesadny pod względem wykorzystania procesora / przepustowości, i to nie jest zbyt KISS.
Czy brakuje mi prostego i eleganckiego sposobu odzyskania mojego publicznego adresu IP i sprawdzenia, czy się zmienił?
Dodatkowe informacje: mój modem / router to tania cegła, nie robi w tym względzie nic interesującego. Mój serwer działa z Centos 6.
źródło
Możesz wysłać zapytanie do dowolnej witryny, która wyświetla Twoje IP dla tego zadania. Za pomocą checkip.dyndns.com , ponieważ to tekst.
Przykład:
źródło
Dzisiaj miałem to samo pytanie i nie byłem zadowolony z odpowiedzi, które zobaczyłem tutaj lub w Google, więc napisałem Skrypt PowerShell, aby wysłać mi powiadomienie Slack przy każdej zmianie adresu IP .
Jeśli wolisz otrzymywać e-mail, możesz kliknąć linki w skrypcie, aby zobaczyć inną wersję, która obsługuje wiadomości e-mail programu Outlook.
Mam nadzieję, że to pomoże komuś i zdobędzie głos. :-)
Zapisz następujący tekst w pliku .ps1. Zmodyfikuj go odpowiednio za pomocą własnego URL-a Slack Webhook. Zapisać. Kliknij prawym przyciskiem myszy plik, aby „Uruchom z PowerShell”.
Możesz też zaplanować, aby działał codziennie lub często.
Aby uruchomić Harmonogram zadań:
Musiałem uruchomić PowerShell jako administrator, a następnie uruchomić
Get-ExecutionPolicy
, który następnie powiedział mi, że moja obecna ExecutionPolicy jest „ograniczona”.Potem pobiegłem
Set-ExecutionPolicy RemoteSigned
(jak pokazano tutaj, ale denerwuję: https://stackoverflow.com/a/26955050/470749 ).Następnie z podstawowego wiersza polecenia systemu Windows próbowałem uruchomić następujące polecenie kilka razy:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"
(raz, aby zapisać adres IP, a drugi, aby sprawdzić, czy się zmienił).(Dopóki to nie zadziała, nie przejmuj się używaniem Harmonogramu zadań).
Potem zaplanowałem zadanie
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
jak program i-ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1
jak argumenty.źródło
Poprzednie odpowiedzi wykluczające implementację PS, właściwie nie mówią, czy adres IP uległ zmianie. (Chcę kochać PowerShell. Ryan wykonał dobrą robotę, identyfikując, dlaczego nie: uprawnienia do wykonywania zabezpieczeń są uciążliwe).
Analizowanie adresu IP nie jest konieczne, o ile jakiekolwiek dodatkowe wyjście nie zmieni się, gdy adres IP nie ulegnie zmianie. Na przykład checkip.dyndns.com zwraca coś w rodzaju bieżącego adresu IP: ddd.ddd.ddd.ddd. Wystarczy więc po prostu porównać całe wyjście.
Także jeśli używasz curl, możesz ukryć postęp używając flagi -s. Ponieważ jest zapisywany na stderr, nie zanieczyszcza standardowego wyjścia.
Oto prosty skrypt .cmd, który używa curl do zapisywania danych wyjściowych. Następnie używa FC do porównania go z poprzednim wyjściem, jeśli istnieje. Nie muszę ustawiać opcji FC dla Unicode, rozróżniania wielkości liter itp., Ponieważ wyjście powinno być dopasowaniem binarnym, gdy IP nie ulegnie zmianie. Unix ma cmp zamiast FC.
Oczywiście CurrentIp.txt LastIp.txt można zmienić, np. Przedrostek „% TMP%” Ten skrypt powinien działać z Harmonogramem zadań, z niewielkimi zmianami.
źródło
W odpowiedzi na OP: „Czy brakuje mi prostego i eleganckiego sposobu odzyskania mojego publicznego adresu IP i sprawdzenia, czy się zmienił?”
Naprawdę prostą odpowiedzią jest nie. Po prostu okresowo aktualizuj swój adres IP.
Wydaje się marnotrawstwem, ale „inteligentniejsze” rozwiązania są po prostu bardziej złożone i mniej niezawodne, bez oszczędzania procesora, przepustowości itp. Wysyłanie 1500 bajtów lub mniej (pakiet) raz na godzinę jest bardzo tanie. Cały rok pochłonie 365 * 24 * 1 500 = 13 megabajtów lub około 3 minuty strzelca na Netflix.
Koszt procesora / przepustowości związany z uzyskiwaniem zewnętrznego IP i sporadycznie wysyłaniem nowego IP jest prawdopodobnie wyższy niż okresowe publikowanie IP. Od lat publikuję moje IP na duckdns bez problemu. Oczywiście, jeśli zaczniesz robić to 1 / sekundę, twoja usługa domeny może to rozgryźć i denerwować. Podobnie każda usługa, której używasz do wyszukiwania ip, nie będzie szczęśliwa, jeśli to zrobisz.
Ostatnia myśl, pytanie, które zadajesz, jest częścią problemu, o którym wspomniałeś. Wyzwalaczem odświeżania dynamicznych DN może być sytuacja, w której nazwa domeny nie zostanie rozstrzygnięta na serwerze. Możesz użyć polecenia ping, ale jeśli twój stary adres IP zostanie ponownie użyty, nowy właściciel dzierżawy ip może odpowiedzieć na ping.
Mając to na uwadze, możesz okresowo próbować pobrać mały plik podpisu / magii z serwera. Naprawdę może to być dowolny plik statyczny, który mówi, że znalazłeś swój serwer, nawet twoja strona domowa działałaby, ale niezwykła nazwa byłaby znacznie lepsza niż default.html.
Jeśli d / l nie powiedzie się, zaktualizuj swój adres IP, wyczyść pamięć podręczną DNS i spróbuj ponownie. Aktualizacja może potrwać kilka minut, w zależności od usługi DNS. Takie podejście eliminuje zależność od innej zewnętrznej witryny ip i faktycznie testuje to, co naprawdę chcesz wiedzieć: czy inni mogą dotrzeć do mojej witryny?
źródło
używam
curl ifconfig.me
, ale nie jest to coś, czego próbowałem na platformach innych niż Debian.źródło