Обновляем ip адрес на своём сервере с бесплатным доменом
Часто бывает ситуация, когда из-за применения новых настроек на домашнем роутере или банального перезапуска, приходится лезть на площадку noip.com и менять ручками IP адрес. А если вы за 200 или более километров и у вас нет возможности узнать адрес? Вот и у меня, был (слава богу и есть), дистанционный узнаватель IP адреса - отец, но он бывает и в отпуск может уехать, иль же быть на работе, а обновить адрес нужно здесь и сейчас.
Да, вы скажете что на маршрутизаторах есть такая функция для бесплатных доменов и будете правы, но увы - либо маршрутизатор может быть старый, либо не работает эта функция или же только в одной доменной зоне работает. Короче много нюансов, а нам же хочется что бы было всё как у людей.
Пример того, как это сделано не в стоковой прошивке d-link dir320. Поверьте весьма не богатый и не гибкий способ настройки (я люблю зону отличную от ddns.net). Обновляется что в оригинальной прошивке, что в не оригинальной через зад, про остальные роутеры типа томсон я вообще молчу, тут хоть работает :).
Так вот, сервис на самом деле не плохой и предоставляет превосходный api (дёргай хоть через get или через post - работает, что хорошо для применения в разнообразных ситуациях и сценариях), а значит можно использовать как на обычном пк, так и на сервере. В данном случае он применяется в сервере с debian на борту, и работает как запасной вариант (на всякий случай, так как про другой, более крутой скрипт я напишу чуть позже, если зайдёт данный материал).
Кому интересно, могут ознакомиться с api сервиса noip тут https://www.noip.com/integrate/request
Пишем скрипт:
import re, urllib
if __name__ == "__main__":
web_page = urllib.urlopen("https://2ip.ru")
web_page = web_page.read()
ip = re.findall("(\d+\.\d+\.\d+\.\d+)", web_page)[0]
username = 'ВАШ Э-МАЙЛ'
password = 'ВАШ ПАРОЛЬ ОТ СЕРВИСА'
host = 'ВАШ ХОСТ, ПО ТИПУ ЭТОГО blog.bounceme.net'
update = urllib.urlopen("https://"+str(username)+":"+str(password)+
"@dynupdate.no-ip.com/nic/update?hostname="+str(host)+"&myip="+ ip)
res = update.read()
if re.match("(good)|(nochg)", res):
print 'ok'
else:
print 'error\n' + res
Что делает скрипт?
Думаю особо пояснять тут смысла нет, если в общих чертах, то он заходит на всем наверное известный 2ip, парсит оттуда ваш ip адрес, запоминает его и далее использует в переменной, в api сервиса noip. При успешной отработке скрипта, адрес в сервисе меняется, а вы в терминале получаете сообщение "ок", в противном случае будет напечатано сообщение о ошибке.
сохраняем в файл noip.py и запускаем python noip.py
Результат:
Запихиваем в крон и радуемся :)