Что было бы проще всего найти с помощью скрипта, если мой IP-адрес изменился?
Справочная информация:
У меня есть стандартный домашний кабельный модем, и мой провайдер назначает мне динамический IP. Время от времени оно меняется, время аренды DHCP кажется нерегулярным.
По сути, я делаю свой собственный динамический DNS и могу обновлять записи DNS, указывающие на мой домашний сервер, одним щелчком мыши. Осталось только обнаружить изменение IP-адреса, чтобы я мог полностью автоматизировать процесс.
Теперь есть несколько веб-сайтов, которые могут вернуть ваш IP-адрес, и я мог бы использовать задание cron для wget
одной из этих страниц и grep
IP-адрес с нее ... Но это кажется излишним с точки зрения использования ЦП / пропускной способности, и это не очень ПОЦЕЛУЙ.
Я пропускаю какой-то простой и элегантный способ получить свой публичный IP и проверить, изменился ли он?
Дополнительная информация: мой модем / роутер - дешевый кирпич, в этом отношении он не очень интересен. Мой сервер работает с Centos 6.
источник
Вы можете запросить любой веб-сайт, который отображает ваш IP для этой задачи. Используя checkip.dyndns.com , так как он это text.only.
Пример:
источник
У меня был тот же вопрос сегодня, и я не был удовлетворен ответами, которые видел здесь или в Google, поэтому я написал сценарий PowerShell, чтобы отправлять мне уведомление Slack при каждом изменении моего IP-адреса .
Если вы предпочитаете получать электронную почту, вы можете щелкнуть ссылки в сценарии, чтобы посмотреть другую версию, поддерживающую электронную почту Outlook.
Надеюсь, это кому-нибудь поможет и заслужит голос. :-)
Сохраните следующий текст в файл .ps1. Отредактируйте его соответствующим образом с вашим собственным URL-адресом Slack. Сохранить. Щелкните правой кнопкой мыши файл, чтобы «Запустить с PowerShell».
Или вы можете запланировать его запуск ежедневно или как часто.
Чтобы заставить работать планировщик заданий:
Я должен был запустить PowerShell от имени администратора, а затем запустить
Get-ExecutionPolicy
, который сказал мне, что моя текущая ExecutionPolicy была «Ограничена».Затем я побежал
Set-ExecutionPolicy RemoteSigned
(как показано здесь, но это заставляет меня нервничать: https://stackoverflow.com/a/26955050/470749 ).Затем из обычной командной строки Windows я попытался
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"
выполнить следующую команду пару раз: (один раз, чтобы сохранить IP-адрес, и второй раз, чтобы проверить, изменился ли он).(До тех пор, пока вы не добьетесь этого, не пытайтесь использовать планировщик задач.)
Затем я запланировал задание
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
в качестве программы и-ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1
аргументов.источник
Предыдущие ответы, исключая реализацию PS, на самом деле не говорят вам, изменился ли IP. (Я хочу любить PowerShell. Райан хорошо определил причину, по которой я этого не делаю: разрешения безопасности выполнения являются неприятностью).
Синтаксический анализ IP не требуется, если любой дополнительный вывод не изменяется, тогда как IP-адрес не изменился. Например, checkip.dyndns.com возвращает что-то вроде текущего IP-адреса: ddd.ddd.ddd.ddd. Таким образом, достаточно просто сравнить весь вывод.
Также, если вы используете curl, вы можете скрыть прогресс, используя флаг -s. Поскольку он написан на stderr, он не загрязняет стандартный вывод.
Итак, вот простой скрипт .cmd, который использует curl для сохранения вывода. Затем он использует FC для сравнения с предыдущим выводом, если таковой имеется. Мне не нужно устанавливать параметры FC для Unicode, чувствительности к регистру и т. Д., Поскольку выходные данные должны быть двоичными, если IP-адрес не изменился. У Unix есть cmp вместо FC.
Очевидно, что CurrentIp.txt LastIp.txt можно изменить, чтобы он подходил, например, префикс с «% TMP% \». Этот скрипт должен работать из планировщика задач с небольшими изменениями.
источник
В ответ на OP: «Я упускаю какой-то простой и элегантный способ получить мой публичный IP и проверить, изменился ли он?»
Действительно простой ответ - нет. Просто периодически обновляйте свой IP.
Это кажется расточительным, но «умные» решения просто более сложные и менее надежные, без экономии ресурсов процессора, пропускной способности и т. Д. Отправка 1500 байт или меньше (пакет) один раз в час очень дешева. Весь год будет потреблять 365 * 24 * 1500 = 13 мегабайт или около 3 минут стрелка на Netflix.
Стоимость процессора / полосы пропускания для получения вашего внешнего ip и периодической публикации нового ip, скорее всего, выше, чем просто избыточная периодическая публикация вашего ip. Я публиковал свой ip на duckdns каждый час в течение многих лет, без проблем. Очевидно, что если вы начнете делать это 1 / секунду, ваша доменная служба может понять это и разозлиться. Точно так же любой сервис, который вы используете для поиска своего ip, не будет счастлив, если вы сделаете это.
Еще одна мысль: вопрос, который вы задаете, является частью проблемы, которую вы упоминаете. Триггер для обновления вашего динамического DNS может быть, когда ваше доменное имя не разрешается на ваш сервер. Вы можете использовать ping, но если ваш старый IP-адрес будет повторно использован, новый владелец IP-аренды вполне может ответить на ping.
Имея это в виду, вы можете периодически пытаться загрузить небольшой файл подписи / магии с вашего сервера. На самом деле это может быть любой статический файл, который сообщает вам, что вы нашли свой сервер, даже ваша домашняя веб-страница будет работать, но необычное имя будет намного лучше, чем default.html.
Если произойдет сбой d / l, обновите свой IP, очистите кэш DNS и попробуйте снова. Обновление может занять несколько минут, в зависимости от службы DNS. Этот подход устраняет зависимость от какого-либо другого внешнего ip-сайта и фактически проверяет то, что вы действительно хотите знать: могут ли другие попасть на мой сайт?
источник
В качестве альтернативы, которая может вам помочь, я написал скрипт на python, предназначенный для отслеживания изменений внешних IP-адресов. Я использую его под Linux, но так как это python, он должен нормально работать в Windows после настройки соответствующей среды Python. В настоящее время он сохраняет «текущий» внешний IP-адрес в файл и при запуске захватывает новый IP-адрес, а затем сравнивает его со старым. Это дизайн, чтобы отправить вам электронное письмо в случае обнаружения изменений.
Он предназначен для выполнения в виде cronjob (Linux) или запланированной задачи (Windows) и не работает как фоновый демон самостоятельно.
Вот ссылка на репозиторий github: https://github.com/begleysm/ipwatch
Надеюсь, это поможет!
источник
Я использую
curl ifconfig.me
, но это не то, что я пробовал на платформах, отличных от Debian.источник