Есть, конечно, простые решения для состоявшихся в этой жизни людей: или купить статический адрес у провайдера и сделать себе татуировку в интимном месте, или купить DynDNS. Но нет в этом куража и преодоления. Поэтому мы пойдём другим путём.
Итак, как из-под NAT узнать внешний адрес роутера? Об этом и о многом другом читайте в моей новой книге "Никак, блядь". Нет, не шучу. Правда, никак. Можно только снаружи спросить. К счастью, спросить есть у кого:
http://myip.dnsomatic.com
http://whatismyip.org
http://icanhazip.com
И прочие тысячи их по запросу http://www.google.com/webhp?q=my+external+ip. Но как спросить из командной строки Windows XP Home Edition? Об этом и о многом другом читайте в моей новой книге.. Ну, вы поняли.
Разумеется, можно взять wget или cURL. Но это неспортивно. Спортивно – спросить средствами самой винды. И, поскольку Powershell в XP нет, то на сцену выходит.. VBScript!
Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
http.Open "GET", "http://icanhazip.com/", False
http.Send
WScript.StdOut.Write http.responseText
Set http = Nothing
Положим это в IP.vbs. Оно при запуске выдаёт внешний IP адрес. Честно.
Дальше всё тривиально. Проверяем на ошибки, сравниваем с предыдущим и, если поменялся.. Гм. Ну, то есть то, что далеко на диске лежит файл с IP, несомненно, греет. Но как бы его узнать? А просто. Нет, мы не будем слать себе email, 21 век на дворе. Мы положим файл в Dropbox! Вот так современные технологии...
"Ватничек" привожу исключительно в целях демонстрации надругательства над здравым смыслом под названием cmd.exe. Можно было, конечно, всё на VBScript написать, но только shell, только хардкор!
@ECHO OFF REM Get IP Address cscript //B IP.vbs > IP.new REM Check that we got IP address TYPE IP.new | FINDSTR /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" IF %ERRORLEVEL% EQU 0 ( REM We've got address IF EXIST IP.old ( REM Let’s compare FC IP.old IP.new | FIND "FC: no dif" > nul IF ERRORLEVEL 1 ( REM Addresses are different COPY IP.new IP.old COPY IP.new %Dropbox%\IP.txt ) ) ELSE ( REM First run COPY IP.new IP.old COPY IP.new %Dropbox%\IP.txt ) REM Completed sucesfully, delete log DEL /Q %Dropbox%\IP.log ) ELSE ( REM Not IP - Create log on dropbox COPY IP.new %Dropbox%\IP.log )
Ну и да, было бы неплохо, чтобы это выполнялось периодически. К счастью, в XP всё же есть Task Scheduler, а нетривиальную задачу сделать там выполнение таска каждый час мы оставим на осмысление читателю, приведя, для затравки, интерфейс этого самого шедулера:
Этот комментарий был удален автором.
ОтветитьУдалитьКул! Вот это гуру!!
ОтветитьУдалитьскрипт сработает на 7 винде?
ОтветитьУдалить