Самый простой способ проверить динамическое изменение IP

какой самый простой способ найти с помощью скрипта, если мой IP-адрес изменился?


Справочная информация:

у меня есть стандартный домашний кабельный модем, и мой провайдер назначает мне динамический IP. Он меняется, аренды DHCP раз кажется неправильной.

в основном, я делаю свою собственную динамическую DNS вещь, и может обновлять записи DNS, указывающие на мой домашний сервер с щелчком мыши. Единственное, что остается - обнаружение изменения IP, чтобы я мог полностью автоматизировать процесс.

теперь здесь есть несколько веб-сайтов, которые могут вернуть ваш IP-адрес, и я мог бы использовать cron для wget одну из этих страниц и grep IP-адрес от него... Но это кажется излишним с точки зрения использования процессора / пропускной способности, и это не очень KISS.

я пропустил какой-то простой и элегантный способ получить мой публичный IP и проверить, если он изменился?

дополнительная информация: мой модем / маршрутизатор дешево Брик, в этом нет ничего интересного. Мой сервер работает с Centos 6.

27
задан MaQleod
05.01.2023 21:52 Количество просмотров материала 2703
Распечатать страницу

6 ответов

если ты за NAT, самый элегантный способ я могу думать, чтобы запустить задание на сам маршрутизатор, периодически проверяя ifconfig также проверьте его текущий адрес WAN. Это может быть даже возможно на "дешевом кирпиче", если вы можете установить пользовательскую прошивку. Однако элегантный, вряд ли простой.

Как обсуждалось здесь, на Windows, но аргумент одинаково справедлив для Centos, при опросе WAN IP из-за NAT, вы сталкиваетесь с проблемой, что вы этого не делаете технически имеют внешний адрес. Вместо этого, вы маршрутизируются через один по выбору маршрутизатора. Очевидно, что у вас все равно будет доступ к этой информации, пока маршрутизатор находится под вашим контролем, но нет универсального способа передачи этого IP-адреса хостам в локальной сети. В результате сервер не может просто запросить у маршрутизатора внешний IP-адрес, который он будет использовать.

наиболее эффективной альтернативой было бы просто позволить маршрутизатору делать свою магию и на самом деле установите соединение с внешним сервером, а затем попросите его вернуть адрес, с которого поступил запрос. Многие веб-серверы были созданы специально для этой цели. Для написания скриптов я могу порекомендовать http://icanhazip.com/, так как он не требует дальнейшего разбора с вашей стороны (только IP возвращается в виде обычного текста).

при необходимости ответы на вопрос, связанный с ранее, должны предоставить множество советов по реализации.

4
отвечен Marcks Thomas 2023-01-07 05:40

вы можете запросить любой сайт, который отображает ваш IP для этой задачи. Используя checkip.dyndns.com, поскольку его текст.только.

пример:

wget -q -O - checkip.dyndns.com | grep -Po "[\d\.]+"
6
отвечен Dennis 2023-01-07 07:57

у меня был тот же вопрос сегодня, и я не был удовлетворен ответами, которые я видел здесь или в Google, поэтому я написал PowerShell скрипт, чтобы отправить мне слабину уведомление, когда мой IP-адрес меняется.

если вы предпочитаете получать электронную почту, вы можете нажать на ссылки в сценарии, чтобы посмотреть на другую версию, которая поддерживает электронную почту Outlook.

Я надеюсь, что это поможет кому-то и заработает голосование. : -)

сохранить следующий текст в a .файл ps1. Редактировать его уместно своими слабину URL-адрес веб-перехватчик. Спасать. Щелкните правой кнопкой мыши файл "выполнить с помощью PowerShell".

или вы можете запланировать его для запуска ежедневно или как часто.

#Script to compare current IP with old IP and sends Slack notification if different (and do nothing if there was no change).
#We can put this as a scheduled task to run daily.
#ScriptName: IP_change_detection_notification.ps1

$slackWebhookUrl = "XXXXXXXXXX" #put yours here
$ipDetectionUrl = "https://wtfismyip.com/text"
$IPAddFile = "C:\code\IP_change_detection_notification.dat" #absolute path to file that stores the old IP record
$slackOutputFile = "C:\code\IP_change_detection_notification_Slack.txt"
$optionalDebuggingFile = "C:\code\IP_change_detection_notification_debugging.txt"

$Request = Invoke-WebRequest $ipDetectionUrl
$IP_new = ($Request.Content.Trim())
Write-Host "Current IP address: [$IP_new]"

#Check if old IP record exists
If(Test-Path "$IPAddFile")
{
#Get old IP
$IP_old = Get-Content "$IPAddFile"
    #Compare IPs
    if(-not($IP_new -eq $IP_old))
    {
        Write-Host "Old IP address: [$IP_old]"
        $msg = "Your WAN IP has changed to $IP_new (was $IP_old)!"
        Write-Host "$msg"               
        $body = $("{""text"":""$msg""}")
        Write-Host "$body"
        Invoke-RestMethod -Uri $slackWebhookUrl -Method Post -ContentType 'application/json' -Body $body -OutFile $slackOutputFile

        "Notification Sent"     

        #Overwrite and update new IP
        $IP_new |  Out-File $IPAddFile

    }
    else
    {"No change, no notification"}

}
else
{
#Create new, as file not found
$IP_new |  Out-File $IPAddFile
"File created"
}
$(get-date -f yyyy-MM-dd_HH_mm_ss)  |  Out-File $optionalDebuggingFile
#Read-Host -Prompt "Press Enter to exit" #Comment out this line if this script will be run by a cron job. Otherwise, uncomment it so that you can see the results of the script in the console.

#This script was adapted from https://gallery.technet.microsoft.com/scriptcenter/Detect-IP-address-change-aeb51118 by Satyajit

, чтобы получить планировщик задач работает:

Я должен был запустить PowerShell от имени администратора, а затем запустить Get-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" (раз хранить ИП, и второй раз проверять изменил ли он).

(пока это не сработает, не пытайтесь использовать планировщик задач.)

затем я запланировал задачу с C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe как программа и -ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1 в качестве аргументов.

0
отвечен Ryan 2023-01-07 10:14

предыдущие ответы, исключая реализацию PS, На самом деле не говорят вам, изменился ли IP. (Я хочу любить PowerShell. Райан проделал хорошую работу по выявлению, почему я этого не делаю: разрешения на выполнение безопасности являются неприятностью).

разбор IP не нужен, пока любой дополнительный вывод не изменится, когда тогда IP не изменился. Например checkip.dyndns.com возвращает что-то вроде текущего IP-адреса: ddd.ddd.ddd.ddd. При этом достаточно просто сравнить вся продукция.

также, если вы используете curl, вы можете скрыть прогресс, используя флаг-s. Так как он написан на stderr, он не загрязняет stdout.

Итак, вот простой .cmd скрипт, который использует curl для сохранения выходных данных. Затем он использует FC для сравнения с предыдущими выходными данными, если таковые имеются. Мне не нужно устанавливать параметры FC для Unicode, чувствительность к регистру и т. д., Так как выход должен быть двоичным соответствием, когда IP не изменился. Unix имеет cmp вместо FC.

@REM 12/30/2017 The following work:
@REM                checkip.dyndns.com
@REM                wtfismyip.com/text
@REM                icanhazip.com
@REM                ifconfig.me/ip -- can be slow

curl icanhazip.com > CurrentIp.txt
fc /B LastIp.txt CurrentIp.txt 1> nul: 2>>&1

if ERRORLEVEL 1 (
    ECHO Ip Changed
    REM Remember for next time
    MOVE /Y CurrentIp.txt LastIp.txt 1>nul:
    exit /b 1
) else (
    ECHO Ip not Changed
)

Очевидно CurrentIp.тхт LastIp.txt можно изменить на suit, e.G префикс "%TMP%\ " этот скрипт должен работать из планировщика заданий, с небольшими изменениями.

0
отвечен Andrew Dennison 2023-01-07 12:31

в ответ на OP: "мне не хватает простого и элегантного способа получить мой публичный IP и проверить, изменился ли он?"

действительно простой ответ не. Просто периодически обновляйте свой IP.

кажется расточительным, но "умнее" решения более сложной и менее надежной, без сохранения процессора, пропускной способности и т. д. Отправку 1500 байт или меньше (пакет) один раз в час-это очень дешево. Целый год будет потреблять 365 * 24 * 1,500 = 13 мегабайт или около 3 минут Стрелок на Netflix.

стоимость CPU / bandwidth получения вашего внешнего ip и иногда размещения вашего нового ip, скорее всего, выше, чем просто избыточное размещение вашего ip периодически. Я отправлял свой ip в duckdns каждый час в течение многих лет, без проблем. Очевидно, что если вы начнете делать это 1 / second, ваша доменная служба может понять это и раздражаться. Точно так же любой сервис, который вы используете для поиска вашего ip, не будет счастлив, если вы это сделаете.

одна последняя мысль, вопрос, который вы задаете, является частью проблемы, о которой вы упоминаете. Триггер для обновления динамического dns может быть, когда доменное имя не разрешается на сервер. Можно использовать команду ping, но если старый ip-адрес используется повторно, новый владелец аренды ip вполне может ответить на команду ping.

имея это в виду, вы можете периодически пытаться загрузить небольшой файл подписи/magic с вашего сервера. На самом деле это может быть любой статический файл, который говорит вам, что вы нашли ваш сервер, даже ваш домашняя веб-страница будет работать, но необычное имя будет намного лучше, чем по умолчанию.формат HTML.

Если не удается выполнить d / l, обновите IP-адрес, очистите кэш DNS и повторите попытку. Обновление может занять несколько минут, в зависимости от службы DNS. Этот подход устраняет зависимость от какого-либо другого внешнего ip-сайта и фактически проверяет то, что вы действительно хотите знать: могут ли другие достичь моего сайта?

0
отвечен Andrew Dennison 2023-01-07 14:48

Я использую curl ifconfig.me, но это не то, что я пробовал на других платформах, отличных от Debian.

-2
отвечен ChangosMuertos 2023-01-07 17:05

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх