PDA

Показать полную графическую версию : Периодическое определение WAN адреса ADSL модема!


Dump
27-01-2010, 14:56
Вот задача! Есть модем ADSL TP-LINK TW-8101(по-моему:))
У него есть web интерфейс(запрашивает авторизацию), есть telnet (запрашивает авторизацию)!!
Нужно с периодичностью раз в пол-часа, проверять WAN адрес модема, и отправлять его по почте, если он не совпадает с последним, ну или постоянно отправлять по почте!
Информацию думаю можно взять либо с web интерфейса, либо через телнет, либо вобще с левого сайта который определяет IP!
Как бы всё это в жизнь воплотить! Например если на странице http:\\192.168.1.1\adslinfo\wan , есть строка IP address: 000.000.000.000 ! Но страница запрашивает учётку, к примеру admin/admin !
Ну и как всё это по почте выслать, например через учётку на маиле или на гугле!

madmasles
27-01-2010, 17:53
Dump,
Честно говоря, я не совсем понял что Вам надо, если Ваш текущий IP-адрес, то вот пример из русской справки:

#include <Inet.au3>
$PublicIP = _GetIP()
MsgBox(0, "IP Address", "Your IP Address is: " & $PublicIP)

NewOLDi
27-01-2010, 19:44
_GetIP () зависит от стороннего ресурса. Т.е. надёжность под сомнением, к сожалению.

Быть может есть вариант выдрать текущий IP у модема (роутера) посредством telnet (в фоновом режиме конечно же)?

madmasles
27-01-2010, 19:58
NewOLDi,
Если Вы не доверяете библиотечным функциям (на мой взгляд зря не доверяете), то вот Вам код от CreatoR
#include <Inet.au3>

$StringIP = _INetGetSource("http://www.shrum.net/getip.php")
MsgBox(64, "", "The IP is: " & $StringIP)

Источник (http://www.autoitscript.com/forum/index.php?showtopic=40687&st=0&p=302763&#entry302763)

PS
По-моему, IP-адрес присваивает провайдер, т.е. без стороннего ресурса все равно не обойтись (может быть я ошибаюсь.)

PPS
Посмотрел в Inet.au3 функцию _GetIP(). Она делает то же самое, только с адреса http://checkip.dyndns.org/?rnd1=

kaster
28-01-2010, 09:34
madmasles, я думаю, автор под сторонними ресурсами понимает как раз эти сайты. но если уж озадачиться телнетом, то можно запускать telnet.exe в фоновом режиме, предварительно взяв управление над StdOut потоком и парсить ответ, то тоже должно помочь.
если с реализацией алгоритма возникнут проблемы, пиши.

NewOLDi
28-01-2010, 10:53
kaster абсолютно прав, я действительно сомневаюсь в безотказности сторонних ресурсов (Инет-сайты, которые отдают твой IP-адрес). А библиотечные функции я ооочень люблю, Вы даже не представляете как!

На эту тему вспомнил анекдот:
- Папа, почему ты пьёшь пиво из бутылки?
- Я не люблю посредников!
:)

Сегодня постараюсь опросить свой ADSL Zyxel на предмет внешнего IP в фоне через telnet. Если получится - выложу код сюда.

kaster
28-01-2010, 11:29
NewOLDi, боюсь именно telnet.exe от МС не получится. т.к. он то ли не дает доступ к своему потоку I/O, то ли использует какой-то особый, не опознаваемый AutoIt, вобщем не дает управлять. на оф. форуме тоже так пишут. единственное отправлять команды через send, но тогда про фон можно забыть. или юзать сторонние утилиты аля telnet. в голову пришло только Console telnet (http://consoletelnet.sourceforge.net/).

madmasles
28-01-2010, 12:02
2 All ?

Правой кнопкой мыши по значку сети в трее см. прикрепленный скрин.
Это я к тому, что в системе где-то прописан IP-адрес, но где? Это вопрос к гуру.

NewOLDi
28-01-2010, 12:40
kaster, это печально :(

madmasles, если используется полноценный ADSL роутер, то операционная система не в состоянии показать реальный внешний IP-адрес; дальше локального адреса Вашей сетевой карты и локального адреса Вашего роутера ОС уйти не может. Ваш пример основан на обычном ADSL USB модеме, там всё проще...

kaster
28-01-2010, 12:41
madmasles, это не всегда так, особенно если между внешним инетом и клиентом несколько маршрутизаторов/мостов. хотя, в случае именно одного роутера (а только в этом случае можно считать что опрошенная инфа будет действительно внешним ИП) можно делать и так. в противном случае, только внешний ресурсы. как вариант, могу еще посоветовать вот этот сайт http://tools.whois.net/yourip/ - его надежность вне всяких сомнений. думаю по домену догадаетесь почему

madmasles
28-01-2010, 12:49
kaster,
А в моем случае можно получить IP-адрес? И, если можно, то как?

NewOLDi
28-01-2010, 12:52
madmasles, ipconfig /all :)

madmasles
28-01-2010, 12:59
NewOLDi,
Туплю. :sorry:

El Scorpio
29-01-2010, 07:07
Нужно с периодичностью раз в пол-часа, проверять WAN адрес модема, и отправлять его по почте, если он не совпадает с последним, ну или постоянно отправлять по почте! »
Как я понимаю, кому-то на просторе интернетов нужно знать IP-адрес (для доступа к внутренним ресурсам сети и т.д.).
Собственно говоря,*стандартным решением этой проблемы вроде бы как является DynDNS (http://ru.wikipedia.org/wiki/Динамический_DNS) , поддержка которого есть даже на более дешёвых устройствах. Придумать красивое имя и сообщить его нужным людям,*чтобы они не мучились со вводом изменяющегося IP-адреса.

NewOLDi
29-01-2010, 09:11
El Scorpio, я думаю, об этом и подобных сервисах известно всем. Мы тут пытаемся средствами AutoIt выдернуть IP без использования посредников. Пока безуспешно, у меня всё остановилось на том, что AutoIt не способен читать вывод MS Telnet :(

Dump
29-01-2010, 13:38
Простите за долгое отсутствие.....на работе упал DC, так что не до скриптов было!
Так вот!
El Scorpio, помоему я слышал про DynDNS, не очень хорошие отзывы, но спасибо, возьму на заметку!
NewOLDi, Да хочется, очень хочется, средствами AutoIT!
Только я вот думаю, зачем telnet! У модема есть свой http сервер! И есть строка в меню Status: WAN: ххх.ххх.ххх.ххх ! Вот эту строку можно как то вытащить с помощью AutoIT _INetGetSource ????
Но предварительно нужно авторизоваться!!!
А если запрашивать адрес вида http://192.168.1.1/stataus/?user=admin&pass=admin ну что-то вроде этого, как там запрос строится, нужно взглянуть! Модема под рукой нет, он дома! Тогда авторизация по идее не нужна. Или я наивный ? :))))


Приведенный выше код с _GetIp() походу спотыкается на проксе!




© OSzone.net 2001-2012