Как прочитать скриптом реальный ip из ZyXEL keenetic lite?
Задача: необходимо периодически подключаться к домашнему серверу с серым IP (провайдер транстелеком) например для видеонаблюдения.
Решение: пусть скрипт по крону считывает ip из роутера и отправляет его на email если он изменился, а когда мне надо войти на сервер, я читаю почту и вхожу по реальному IP на домашний сервер.
На bashe все получилось:
теперь этот файл можно запустить так
./скрипт.sh > инф_о_IP.txt
и распарсить текстовый файл, вытащить IP, запустить по крону отправку на email. ( распарсить и отправить можно и в bashe, но я в этом не силен).
Все работает, но для более удобной дальнейшей эксплуатации есть огромное желание все это сделать в Python:
p = pexpect.spawn('telnet %s' % serv)
p.expect('Password :')
p.sendline(passw)
p.expect('KEENETIC LITE>')
p.sendline('wan status\r')
вот что сюда вставить?
p.sendline('exit\r')
и скрипт то работает без ошибок. Только не могу понять как информацию вытащить.
Вопрос:
Как загнать в переменную то что он выведет (куда?) после wan status и преобразовать её в набор строк чтоб с ними уже спокойно работать?
P.S. Не надо советовать купить белый IP ибо чую что вопрос решаем :)
Вадим Егоров: Серый. Был бы динамический - воспользовался бы no-ip. С адресами я не прав конечно - роутер в данном случае показывает локальный адрес провайдера (меня смутило то что я по нему вышел с другого устройства, но при этом находясь в этой же сети). Но решение по скрипту подсказали, работает и его можно использовать где-нибудь в дальнейшем.
я ж говорю провайдер дает серый IP. No-IP его не правильно определяет. Т.е. noip, яндес, другие сервисы его определяют как 83.69.30.38 а в роутере он определяется как 178.34.23.35. Так вот я попадаю в свою сеть только выходя по последнему адресу
да я знаю что я за NAT-ом. DynDNS, NoIP - еслибы работало, то вопросов не было. Но ведь мой скрипт на bashe задачу четко решает. А надо на Питоне. Питонисты помогите с питоновским expect-ом - нигде не могу найти информации. Или киньте ссылку, можно на английском.
Ну для питона вам нужно просто ждать EOF. То есть:
exp.expect(pexpect.EOF)
print exp.before
и парсить этот exp.before
Но мне интересно. как вы заходите на реальный IP вида 192.168.1.x снаружи.
Вот чисто не понимаю как вы пользуетесь конечным результатом, если сервер за натом.
Сергей: точно! Все заработало. После выхода из сессии телнета набрал эти команды:
p.expect(pexpect.EOF)
print (p.before)
и на экран все вышло. Теперь можно парсить и отправлять на email. Спасибо огромное. Если не сложно, подскажите где почитать про pexpect?