Redémarrez le routeur en utilisant Python, Selenium, PhantomJS

Aperçu

Redémarrez le routeur à l'aide de Python, Selenium, PhantomJS et obtenez l'adresse IP côté WAN du routeur.

Contexte

Étant donné que votre domicile n'est pas encore une adresse IP fixe, vous devez connaître l'adresse IP côté WAN du routeur installé chez vous chaque fois que vous essayez de vous connecter à votre domicile de l'extérieur. Jusqu'à présent, nous avons adopté la méthode d'acquisition de l'adresse IP côté WAN à partir du LAN domestique à l'aide d'un serveur externe. Pour le moment, on ne sait pas s'il s'agit d'un problème de routeur ou d'un problème de fournisseur, mais il est parfois devenu impossible de communiquer avec l'extérieur. Je savais que cela pouvait être récupéré en redémarrant le routeur. Cependant, si je ne pouvais pas communiquer avec ma maison pendant mon absence, je ne pouvais pas redémarrer de l'extérieur et je ne pouvais pas récupérer avant de rentrer à la maison. Cette situation était un gros problème lorsque j'étais loin de chez moi pendant quelques jours.

Afin de résoudre ce problème, nous avons adopté la méthode présentée ici, en espérant qu'elle sera la moins chère possible dans l'environnement existant. Autrement dit, Selenium et PhantomJS sont utilisés pour redémarrer le routeur en cas de panne de communication. Il semble y avoir un meilleur moyen, mais de cette façon, vous pouvez redémarrer le routeur et obtenir l'adresse IP côté WAN directement à partir du routeur, ce qui ne peut être fait que dans le LAN. J'ai publié ce contenu s'il pouvait être utile à d'autres personnes.

Préparation

Le routeur ciblé par ce script est le PR-500MI fabriqué par Mitsubishi Electric Co., Ltd., qui possède une ONU intégrée et un routeur emprunté à NTT. Si vous utilisez un autre routeur, veuillez le modifier en fonction de chaque environnement. Voici ce dont vous avez besoin pour utiliser le script:

  1. Python

  2. Sélénium (installer avec pip installer sélénium.)

  3. Installez avec PhantomJS (npm install -g phantomjs ou téléchargez depuis http://phantomjs.org/download.html, décompressez et transmettez .)

  4. beautifulsoup4 (installer avec pip installer beautifulsoup4)

L'URL pour accéder au routeur est la suivante. Le PR-500MI étant une authentification de base, saisissez ce qui suit pour vous connecter et obtenir des informations.

python


http://Nom d'utilisateur:mot de passe@Adresse IP du routeur

Le nom d'utilisateur et le mot de passe sont les comptes utilisés pour se connecter au routeur. L'adresse IP du routeur est celle lorsqu'elle a été définie. Il n'y a aucun problème avec l'adresse à laquelle vous vous connectez toujours. Ajoutez ensuite l'URL contenant les informations que vous souhaitez obtenir.

scénario

python


from bs4 import BeautifulSoup
from selenium import webdriver


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

    def __init__(self):
        self.baseurl = 'http://Nom d'utilisateur:mot de passe@Adresse IP du routeur'
        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()

Obtenez l'adresse IP d'ipv4 et d'ipv6 du côté WAN avec getip (), et redémarrez le routeur avec reboot (). L'URL '/ ntt / information / cinquième / current /', '/ ntt / userMaintenance / reboot /' et les deux dernières lignes du script (ip, ipv4, ipv6) peuvent changer en raison des mises à jour du micrologiciel. Veuillez vérifier si le micrologiciel est mis à jour et qu'il ne fonctionne pas.

Lors du redémarrage du routeur, il est nécessaire d'obtenir l'adresse IP côté WAN après le redémarrage, utilisez donc sleep pour régler l'attente jusqu'à ce que le redémarrage soit terminé (environ 2 minutes), puis obtenez l'adresse IP. ..

J'exécute le script ci-dessus par e-mail. La notification d'adresse IP et le redémarrage du routeur sont effectués en déclenchant la réception du courrier. De plus, à ce stade, l'objectif principal était d'acquérir et de redémarrer l'adresse IP côté WAN, mais en l'ajoutant au script ci-dessus, il sera possible de se déconnecter et de se reconnecter, les paramètres NAT, la référence du journal, etc. À l'avenir, j'aimerais pouvoir redémarrer en deux étapes en ajoutant des équipements pour allumer et éteindre le routeur.

Je ne sais pas s'il y a une demande, mais il est peut-être possible de créer une bibliothèque de contrôle à partir de la ligne de commande pour chaque modèle.

Recommended Posts

Redémarrez le routeur en utilisant Python, Selenium, PhantomJS
Commencez à Selenium en utilisant python
Web scraping avec Selenium (Python)
Utilisez le navigateur à l'aide des liaisons Python du pilote Web Selenium
Extraire le fichier targz en utilisant python
Essayez d'utiliser le module Python Cmd
Précautions lors de l'utilisation de phantomjs de python
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Derrière le flyer: utiliser Docker avec Python
Tweet à l'aide de l'API Twitter en Python
[Python] Utiliser automatiquement le navigateur avec Selenium
Utilisez le pilote Web phantomjs de sélénium avec unittest de python
python setup.py tester le code en utilisant le multiprocessus
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Sélénium, Phantomjs et BeautifulSoup4
[Python / Selenium] XPath
Agréger les résultats des tests à l'aide de la bibliothèque Python QualityForward
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé le web scraping en utilisant python et sélénium
[Python] Exécutons le module régulièrement en utilisant schedule
Essayez d'utiliser l'API BitFlyer Ligntning en Python
phantomjs et sélénium
Python: essayez d'utiliser l'interface utilisateur sur Pythonista 3 sur iPad
Commencez à utiliser Python
Essayez d'utiliser Selenium
J'ai essayé d'utiliser le module Datetime de Python
Pré-traiter l'index en Python à l'aide de ScriptUpdateProcessor de Solr
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Essayez d'utiliser le module de collections (ChainMap) de python3
Essayez d'utiliser le framework Web Python Tornado Partie 2
Scraping à l'aide de Python
Essayez d'utiliser l'API DropBox Core avec Python
Exécutez le processus Blue Prism en utilisant Python (SOAP)
Créer un bot de collecte de données en Python à l'aide de Selenium
Explication du concept d'analyse de régression à l'aide de python Partie 2
Notez les options fréquemment utilisées dans Python + Selenium + Chrome
Découpez une partie de la chaîne à l'aide d'une tranche Python
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
La douleur de gRPC en utilisant Python. Novembre 2019. (Mémo personnel)
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Obtenez et automatisez le contrôle ASP Datepicker à l'aide de Python et Selenium
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
[Python] Masquez l'image dans un cercle à l'aide de Pillow
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Étude de Python Hour8: Utilisation de packages
Utilisation de l'application LibreOffice en Python (1) Où sont les macros?
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 5 ~