IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Comment automatiser l'initialisation de mon routeur chaque matin ?


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut Comment automatiser l'initialisation de mon routeur chaque matin ?
    Bonjour,
    j'ai linux sur une vieille machine préhistorique et asthmatique, avec l'accès à internet par la fibre optique au travers d'un routeur bas de gamme castelnet cbw734ew. L'interface de commande de ce routeur est en http://192.168.0.1/ et je peux la consulter et faire des réglages avec mon firefox.
    J'ai justement besoin chaque matin de provoquer la réinitialisation complète de ce routeur aux paramètres d'usine, par une page http://192.168.0.1/RgSecurity.asp, puis après la vingtaine de secondes que dure cette réinitialisation, il me faut autoriser l'accès à ma machine depuis internet sur une autre page http://192.168.0.1/RgDmzHost.asp (pour pouvoir accèder par ssh à ma machine depuis mon boulot). Il est bien évident qu'il y a avant tout cela un login en http://192.168.0.1/login.asp .
    Est il possible d'automatiser par un script la modification de contenu de ces trois pages en envoyant au routeur les requêtes POST nécessaires ? Je pourrais faire lancer par un cron le script python que j'ai commencé, et cela m'éviterait d'avoir à passer plusieurs minutes chaque matin devant mon PC et me ferait gagner autant de sommeil ou de temps à passer à des activités moins répétitives et plus stimulantes intellectuellement.
    Voici le script que j'ai commencé à faire, et je suis coincé dès la première requête POST parce que je ne sais pas bien la formuler. (si quelqu'un daigne m'aider je peux évidemment poster le code HTML de cette page)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/env python
    #-*- encoding:UTF-8 -*-
    import httplib, sys
    rtr_ip = "192.168.0.1"
    #______________________________________________________________________________|
    # page 0 = connexion :
    connection = httplib.HTTPConnection(rtr_ip)
    print "connection= ", connection # Ok jusque ici : <httplib.HTTPConnection instance at 0x97f1bec>
    #______________________________________________________________________________|
    # page 1 = login :
    headers = {"Content-type": "application/x-www-form-urlencoded"}
    connection.request("POST", "/goform/login.asp", "loginUsername=admin&loginPassword=password", headers)
    response = connection.getresponse() # 
    print "response=", response # <httplib.HTTPResponse instance at 0x858db8c>
    print response.status, response.reason # 302 Redirect
    print response.getheader("Location") # l'entête Location (http://192.168.0.1:80/login.asp)
    print "response.read()=", response.read() # none
    En fait la commande "response.read()" ne se fait pas puisque juste auparavant il y a eu une redirection vers la page de login que je vois grace aux en-têtes, parce que la requête POST n'est pas bien formulée.
    Merci de me donner des pistes de recherche de ce qu'il faut pour que ça marche, donc pour l'instant comment bien faire la requête POST. (ou une solution "toute cuite", mais je préfère chercher un peu...)
    David

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    pour passer des paramètres en POST, utilise urllib2, c'est très simple. Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { "User-Agent" : user_agent }
    data = { "user" : "mon_user", "password" : "mon_pass" }
    data = urllib.urlencode(data)
    request = urllib2.Request("https://@IP_routeur", data, headers)

  3. #3
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Ok merci, super; je viens de l'adapter au début de script que j'ai, avec mes propres variables, et ça a l'air de tourner correctement sans aucune erreur.
    Mais comment puis je faire pour lire la réponse qui m'est renvoyée, ainsi que pour avoir le cookie de connexion qui est dans les headers ?
    David

    [.../...]

    Hébé si, en fait il y en a une, d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    req= <urllib2.Request instance at 0xb75b594c> # Ça c'est Ok.
    Traceback (most recent call last):
      File "script.py", line 66, in <module>
        rep = urllib2.urlopen(req)
      File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
        return _opener.open(url, data, timeout)
       .
       . (charabia du Traceback)
       .
    Et c'est justement quand j'essaye de lire un retour que ça ne va plus.
    Peux tu encore m'aider pour ça, merci,
    David

  4. #4
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Bon, alors j'ai un peu avancé sur les requêtes POST avec arguments, mais je suis de nouveau bloqué sur une requête POST avec bouton radio que je ne sais pas comment envoyer.
    Alors voici comment marche une requête POST avec arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    headers = {"Content-type": "application/x-www-form-urlencoded",
                 "Connection": "keep-alive",
                     "Accept": "text/plain"}
    data = dict(loginUsername="admin", loginPassword="password")
    connection.request("POST", "/goform/login", urllib.urlencode(data), headers)
    Mais j'aimerais que quelqu'un me dise comment rédiger la requête POST pour cocher le bouton radio de réinitialisation du routeur aux paramètres d'usine qui est dans le code HTML suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <table>
     
    <!--
    <input type="radio" name="DosPreventionOn" value=>
    <input type="radio" name="DosPreventionOff" value=>
    -->
    <tr valign>
    <td>Restaur� les param�tres par d�faut</td>
    <td><input type="radio" name="RestoreFactoryYes" value=0x01 onClick="YesButton();" >Oui</td>
    <td><input type="radio" name="RestoreFactoryNo" value=0x00 CHECKED onClick="NoButton();" >Non</td>
    </tr>
     
    </table>
    J'espère que quelqu'un pourra m'aider. Merci,
    David

  5. #5
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Hébin ça y est, j'ai trouvé tout seul, alors voici le script final si ça peut servir à quelqu'un qui cherche python, ou routeur, ou réinitialiser, ou toto.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/usr/bin/env python
    #-*- encoding:UTF-8 -*-
    # 
    import httplib, httplib2
    import urllib, sys 
    rtr_ip = "192.168.0.1"
    #
    def check(var):
        if not(var):
            print "var= ", var, " ( fonction check(var) )\n"
            exit(1)
    #______________________________________________________________________________|
    # page 1 = connection et login :
    #
    print "\n\nHello python script.py !\n"
    connection = httplib.HTTPConnection(rtr_ip)
    check(connection)
    print "connection= ", connection # Ok jusque ici : <httplib.HTTPConnection instance at 0x97f1bec>
    #
    connection.set_debuglevel(2)
    headers = {"Content-type": "application/x-www-form-urlencoded",
                 "Connection": "keep-alive",
                     "Accept": "text/plain"}
    data = dict(loginUsername="admin", loginPassword="password")
    connection.request("POST", "/goform/login", urllib.urlencode(data), headers) # ou
    # connection.putrequest(request, selector[, skip_host[, skip_accept_encoding]])
    # connection.putheaders(header, argument[, ...])
    # connection.endheaders()
    # connection.send(data)
    response = connection.getresponse()
    check(response)
    print "POST /goform/login ->", response.status, response.reason # 302 Redirect
    print "response.getheaders()= ", response.getheaders() # [('connection', 'close'), ('content-type', 'text/html'),
    #                               ('location', 'http://192.168.0.1:80/RgSwInfo.asp'), ('server', 'PS HTTP Server')]
    print "response.getheader(\"Location\")= ", response.getheader("Location") # http://192.168.0.1:80/RgSwInfo.asp
    print "response.read(100)= \"", response.read(100), "\"" # 2 blnks
    print "Hello script.py page 1 = connection et login Ok\n"
    #______________________________________________________________________________|
    # page 1 = vérification du login :
    connection.request("GET", "/login.asp")
    response = connection.getresponse()
    check(response)
    print "GET /login.asp ->", response.status, response.reason # 200 OK
    print "response.getheaders()= ", response.getheaders() #            [('connection', 'close'), ('expires',
    # 'Thu, 3 Oct 1968 12:00:00 GMT'), ('content-type', 'text/html'), ('content-length', '2616'), ('pragma', 'no-cache')]
    print "response.getheader(\"Location\")= ", response.getheader("Location") # None
    print "response.read(100)= \"", response.read(100), "\"" # <html> .(.. <html>)
    print "Hello script.py page 1 = vérification du login\n"
    #
    #______________________________________________________________________________|
    # page 2 = reinitialisation :
    #
    headers = {"Content-type": "application/x-www-form-urlencoded",
                     "Accept": "text/plain"}
    connection.request("GET", "/RgSecurity.asp")
    response = connection.getresponse()
    check(response)
    print "response=", response # <httplib.HTTPResponse instance at 0x87340ec>
    print "GET /RgSecurity.asp ->", response.status, response.reason # 
    print "response.getheader(\"Location\")= ", response.getheader("Location") # 
    #
    data = dict(UserId="admin", Password="password", PasswordReEnter="password", OldPassword="password", RestoreFactoryYes="CHECKED")
    connection.request("POST", "/goform/RgSecurity", urllib.urlencode(data), headers)
    response = connection.getresponse()
    check(response)
    print "POST /goform/RgSecurity ->", response.status, response.reason # 200 OK
    print "response.getheader(\"Location\")= ", response.getheader("Location") # None
    #
    connection.request("GET", "/RgSecurity.asp")
    response = connection.getresponse() # 
    check(response)
    print "response=", response # <httplib.HTTPResponse instance at 0x87340ec>
    print "GET /RgSecurity.asp ->", response.status, response.reason # 200 OK
    print "response.getheader(\"Location\")= ", response.getheader("Location") # None après le GET
    print "response.getheaders()= ", response.getheaders() # [('connection', 'close'), ('expires', 'Thu, 3 Oct 1968 12:00:00 GMT'), ('content-type', 'text/html'), ('content-length', '6156'), ('pragma', 'no-cache')]
    print "response.read(100)=", response.read(100) # <html> ... <html>
    print "Hello script.py page 2 = reinitialisation\n"
    #
    #______________________________________________________________________________|
    # page 3 =  hote DMZ :
    #
    headers = {"Content-type": "application/x-www-form-urlencoded",
                     "Accept": "text/plain"}
    # connection.request("GET", "/RgDmzHost.asp")
    connection.request("POST", "/goform/RgDmzHost", "DmzHostIP3=10", headers)
    response = connection.getresponse()
    check(response)
    print "response=", response # 
    # print "GET /RgDmzHost.asp ->", response.status, response.reason # 200 OK
    print "POST /goform/RgDmzHost ->", response.status, response.reason # 302 Redirect
    print "response.getheader(\"Location\")= ", response.getheader("Location") # 
    print "response.getheaders()= ", response.getheaders() # [('connection', 'close'), ('content-type', 'text/html'),
    #                             ('location', 'http://192.168.0.1:80/RgDmzHost.asp'), ('server', 'PS HTTP Server')]
    print "response.read(100)= \"", response.read(100), "\"" # 2 blnks
    print "Hello script.py page 3 =  hote DMZ\n"
    sys.exit()
    #______________________________________________________________________________|
    # Fin pour moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/09/2010, 09h28
  2. comment configurer mon routeur
    Par yasmina13 dans le forum Hardware
    Réponses: 7
    Dernier message: 13/07/2010, 09h56
  3. Comment placer mon routeur et ma machine NAT?
    Par nixmind dans le forum Sécurité
    Réponses: 1
    Dernier message: 05/06/2010, 19h04
  4. Réponses: 12
    Dernier message: 29/06/2007, 11h08
  5. [RESEAUX]comment connaitre l'adresse mac de mon routeur?
    Par loveflower dans le forum Protocoles
    Réponses: 2
    Dernier message: 27/01/2006, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo