Как прочитать скриптом реальный ip из ZyXEL keenetic lite?

Задача: необходимо периодически подключаться к домашнему серверу с серым IP (провайдер транстелеком) например для видеонаблюдения.
Решение: пусть скрипт по крону считывает ip из роутера и отправляет его на email если он изменился, а когда мне надо войти на сервер, я читаю почту и вхожу по реальному IP на домашний сервер.
На bashe все получилось:

#!/usr/bin/expect
spawn telnet 192.168.1.1
expect assword {send пароль\r}
expect "KEENETIC LITE>" {send "wan status\r"}
expect "KEENETIC LITE>" {send exit\r}
expect eof

теперь этот файл можно запустить так
./скрипт.sh > инф_о_IP.txt
и распарсить текстовый файл, вытащить IP, запустить по крону отправку на email. ( распарсить и отправить можно и в bashe, но я в этом не силен).
Все работает, но для более удобной дальнейшей эксплуатации есть огромное желание все это сделать в Python:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pexpect
serv = '192.168.1.1'
passw = 'пароль'

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 ибо чую что вопрос решаем :)
  • Вопрос задан
  • 1884 просмотра
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Можно почитать про DDNS, возможно это будет удобнее.

Для питона, делайте expect EOF - вставить вот это:
exp.expect(pexpect.EOF)

после чего, пользоваться полученным текстом:
print exp.before
Ответ написан
вот что сюда вставить?
output = p.before
lines = output.split("\n")
for line in lines:
здесь обрабатываешь каждую строку вывода
Ответ написан
mak_sim
@mak_sim
maksim77ster@gmail.com
В своё время решил эту задачу не мучая роутер:
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import urllib.request
from lxml import etree

url = 'http://myip.ru/'
query = '//*/table[@class="network-info"]'

parser = etree.HTMLParser()
req = urllib.request.urlopen(url)
tree = etree.parse(req, parser)

tbl = tree.xpath(query)
print(tbl[0][1][0].text)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы