Starten Sie den Router mit Python, Selenium, PhantomJS neu

Überblick

Starten Sie den Router mit Python, Selenium, PhantomJS neu und rufen Sie die WAN-seitige IP-Adresse vom Router ab.

Hintergrund

Da Ihr Zuhause noch keine feste IP-Adresse ist, müssen Sie bei jedem Versuch, von außen eine Verbindung zu Ihrem Zuhause herzustellen, die WAN-seitige IP-Adresse des bei Ihnen zu Hause installierten Routers ermitteln. Bisher haben wir die Methode zum Abrufen der WAN-seitigen IP-Adresse vom Heim-LAN über einen externen Server übernommen. Zu diesem Zeitpunkt ist nicht bekannt, ob es sich um ein Router- oder ein Anbieterproblem handelt, aber manchmal war es unmöglich, mit der Außenwelt zu kommunizieren. Ich wusste, dass dies durch einen Neustart des Routers wiederhergestellt werden konnte. Wenn ich jedoch während meiner Abwesenheit nicht mit meinem Zuhause kommunizieren konnte, konnte ich nicht von außen neu starten und mich nicht erholen, bis ich nach Hause kam. Diese Situation war ein großes Problem, als ich einige Tage von zu Hause weg war.

Um dieses Problem zu lösen, haben wir die hier vorgestellte Methode übernommen, in der Hoffnung, dass sie in der vorhandenen Umgebung so billig wie möglich ist. Das heißt, Selenium und PhantomJS werden verwendet, um den Router neu zu starten, wenn ein Kommunikationsfehler auftritt. Es scheint einen besseren Weg zu geben, aber auf diese Weise können Sie den Router neu starten und die WAN-seitige IP-Adresse direkt vom Router abrufen, was nur im LAN möglich ist. Ich habe diesen Inhalt gepostet, wenn er für andere nützlich sein könnte.

Vorbereitung

Der Router, auf den sich dieses Skript bezieht, ist der PR-500MI von Mitsubishi Electric Co., Ltd., der über eine integrierte ONU und einen Router verfügt, die von NTT ausgeliehen wurden. Wenn Sie einen anderen Router verwenden, ändern Sie diesen bitte je nach Umgebung. Folgendes benötigen Sie, um das Skript zu verwenden:

  1. Python

  2. Selen (Mit Pip installieren Selen installieren.)

  3. Installieren Sie mit PhantomJS (npm install -g phantomjs oder laden Sie es von http://phantomjs.org/download.html herunter, entpacken Sie es und übergeben Sie es .)

  4. beautifulsoup4 (Mit pip installieren beautifulsoup4 installieren)

Die URL für den Zugriff auf den Router lautet wie folgt. Da PR-500MI die Standardauthentifizierung ist, geben Sie Folgendes ein, um sich anzumelden und Informationen abzurufen.

python


http://Nutzername:Passwort@IP-Adresse des Routers

Der Benutzername und das Kennwort sind die Konten, mit denen Sie sich beim Router anmelden. Die IP-Adresse des Routers ist diejenige, als sie eingestellt wurde. Es gibt kein Problem mit der Adresse, an der Sie sich immer anmelden. Fügen Sie dann die URL hinzu, die die Informationen enthält, die Sie erhalten möchten.

Skript

python


from bs4 import BeautifulSoup
from selenium import webdriver


class pr500mi(object):
    """This is for PR-500MI."""

    def __init__(self):
        self.baseurl = 'http://Nutzername:Passwort@IP-Adresse des Routers'
        self.driver = webdriver.PhantomJS()

    def getip(self):
        getipurl = self.baseurl + '/ntt/information/fifth/current/'
        self.driver.get(getipurl)
        html = self.driver.page_source.encode('utf-8')
        soup = BeautifulSoup(html, 'lxml')
        ip = soup.findAll(class_='section')[6].findAll('td')
        return (ip[1].get_text(), ip[21].get_text()) # ipv4, ipv6

    def reboot(self):
        rebooturl = self.baseurl + '/ntt/userMaintenance/reboot/'
        self.driver.get(rebooturl)
        self.driver.find_element_by_id('REBOOT').click()

Rufen Sie mit getip () die IP-Adresse von ipv4 und ipv6 auf der WAN-Seite ab und starten Sie den Router mit reboot () neu. Die URL '/ ntt / information / 5th / current /', '/ ntt / userMaintenance / reboot /' und die letzten beiden Zeilen des Skripts (ip, ipv4, ipv6) können sich aufgrund von Firmware-Updates ändern. Bitte überprüfen Sie, ob die Firmware aktualisiert wurde und nicht funktioniert.

Wenn Sie den Router neu starten, müssen Sie nach dem Neustart die WAN-seitige IP-Adresse abrufen. Verwenden Sie daher den Ruhezustand, um zu warten, bis der Neustart abgeschlossen ist (ca. 2 Minuten), und rufen Sie dann die IP-Adresse ab. ..

Ich führe das obige Skript per E-Mail aus. Die IP-Adressbenachrichtigung und der Neustart des Routers werden durch Auslösen des E-Mail-Empfangs ausgeführt. Zu diesem Zeitpunkt bestand der Hauptzweck auch darin, die WAN-seitige IP-Adresse zu erfassen und neu zu starten. Durch Hinzufügen zum obigen Skript können jedoch die NAT-Einstellungen, die Protokollreferenz usw. getrennt und erneut verbunden werden. In Zukunft möchte ich in zwei Schritten neu starten können, indem ich Geräte hinzufüge, um den Router ein- und auszuschalten.

Ich weiß nicht, ob Bedarf besteht, aber es ist möglicherweise möglich, für jedes Modell eine Bibliothek zur Steuerung über die Befehlszeile zu erstellen.

Recommended Posts

Starten Sie den Router mit Python, Selenium, PhantomJS neu
Starten Sie mit Python zu Selen
Web Scraping mit Selenium (Python)
Bedienen Sie den Browser mit den Python-Bindungen des Selenium Web Driver
Extrahieren Sie die Targz-Datei mit Python
Versuchen Sie es mit dem Python Cmd-Modul
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Hinter dem Flyer: Docker mit Python verwenden
Tweet mit der Twitter-API in Python
[Python] Betreiben Sie den Browser automatisch mit Selenium
Verwenden Sie den Phantomjs-Webdriver von Selen mit Pythons Unittest
python setup.py testet den Code mit Multiprocess
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Selen, Phantomjs & BeautifulSoup4
[Python / Selen] XPath
Aggregieren Sie die Testergebnisse mithilfe der QualityForward Python-Bibliothek
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
[Python] Lassen Sie uns das Modul regelmäßig nach Zeitplan ausführen
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Phantomjs und Selen
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Starten Sie Python
Versuchen Sie es mit Selen
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Verarbeiten Sie den Index in Python mit dem ScriptUpdateProcessor von Solr vor
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Scraping mit Python
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Führen Sie den Blue Prism-Prozess mit Python (SOAP) aus.
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Beachten Sie die häufig verwendeten Optionen in Python + Selen + Chrome
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
[AWS IoT] Registrieren Sie Dinge in AWS IoT mithilfe des AWS IoT Python SDK
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Der Schmerz von gRPC mit Python. November 2019. (Persönliches Memo)
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Holen Sie sich die ASP Datepicker-Steuerung mit Python und Selen und automatisieren Sie sie
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
[Python] Maskiere das Bild mit Pillow zu einem Kreis
[Einführung in Python] Wie stoppe ich die Schleife mit break?
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Verwenden Sie die Such-API der National Parliament Library in Python
Studie aus Python Hour8: Verwenden von Paketen
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~