4 февраля 2013 г.

Как узнать свой внешний IP адрес

Продолжаем сисадимить. Теперь, когда у нас есть воооот такой интернет, можно использовать VPN, SSH и прочее малопонятное, но, судя по женским лицам в партере, очень соблазнительное. Есть, правда, одна закавыка: для всего этого нужно знать внешний IP адрес своего роутера. Который динамический. И, в случае с ОнЛайм, редко, но может поменяться.

Есть, конечно, простые решения для состоявшихся в этой жизни людей: или купить статический адрес у провайдера и сделать себе татуировку в интимном месте, или купить 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, а нетривиальную задачу сделать там выполнение таска каждый час мы оставим на осмысление читателю, приведя, для затравки, интерфейс этого самого шедулера:



3 комментария: