Отправка на email ip адрес wan
В наше время мало кого удивишь статическим ip адресом дома, правда не везде он халявный. А платить 150 рублей за такую роскошь мне не хочется, но так как у моего провайдера есть небольшой «баг» — он дает статический адрес на халяву, но в связи с нежданчиком который приключился на днях — решил заморочиться.
А нежданчик был простой — провайдер решил сменить пул адресов. И естественно мой статический халявный адрес выпал из моего поля зрения. Решить вопрос можно многими способами: купить статик, использовать ПО для отсылки ip адреса, использовать teamviewer (но насколько знаю, после смены ip меняется и id), а можно проторчать 3 дня в PowerShell (ибо кто его знает тому легче) и получить сносный скрипт.
И так, посвящается realwhitebird и моему не желанию правильно учить мат часть 🙂
Для начала встал вопрос где взять адекватный сервер который адекватно будет показывать мой внешний ip адрес. Потратив пару часов, был найден один (рекламировать не буду) так как PowerShell стал ругаться на него — time out! Но раз оказалось все столь печально, значит надо писать свое, благо писать всего три строчки.
1 2 3 |
<?php echo $_SERVER["REMOTE_ADDR"]; ?> |
Адский код 🙂 обзываем его index.php кладем себе на сервер в папку, обращаемся и получаем чистый ip адрес без всякого HTML. С одной задачей справились, теперь пошло все сложней:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$From = "От кого" $To = "Кому" $SMTPServer = "smtp сервер" $SMTPPort = "Порт сервера smtp" $Username = "Имя пользователя" $Password = "Пароль" $subject = "Тема письма" $body = "Тело письма" $message = New-Object System.Net.Mail.MailMessage $From, $To $message.Subject = $subject $message.IsBodyHTML = $true $message.Body = $body $smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort) $smtp.EnableSSL = $true $smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password) $Url = "Адрес сайта со скриптом" $WebClient = New-Object System.Net.WebClient $Ip = $WebClient.DownloadString($Url) $Ip2 = $Ip.ToString() $Ip2 | Set-Content C:\ip-switch\Ip.txt #Запись текущего ip адреса While ($true) { if ($DefaultIPAdress -cne $Ip2) { $smtp.Send($message) $Ip2 | Set-Content C:\ip-switch\default.txt #Запись нового ip адреса } Start-Sleep -Seconds 1800 #30 минут задержка $DefaultIPAdress = Get-Content C:\ip-switch\default.txt -ErrorAction "SilentlyContinue" #Проверка бывшего ip адреса } |
И так, скрипт… Скрипт получает ip адрес с нашего PHP скрипта и кладет его в файлик Ip.txt, дальше делает сравнение с прошлым ip (default.txt) если различие есть, то происходит отправка письма на почту с уведомлением о смене ip адреса.
2 комментария
Василий Теркин
Здравствуйте.Можно ли указать локальный «адрес сайта со скриптом»?Хочу взять wan ip с вебморды роутера,но для этого нужна авторизация.Не могли бы Вы помочь в допиливании скрипта?
kanitelka
Василий, возможно вас спасет статья https://flammlin.com/blog/2017/09/08/wan-%D0%B2-telegram/ ?
Просто не совсем понимаю, что вы хотите сделать.