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 :

Connexion auto à un portail captif [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Connexion auto à un portail captif
    Bonjour !

    Voilà mon problème :
    Comme vous l'aurez sans doute vu dans le titre, étant étudiant nous avons un accès WiFi mais je cherche à créer un programme permettant de me connecter automatiquement à un portail captif (du Crous), malgré que nous ne soyons qu'en début d'année, ce système de portail est déjà assez embêtant, embêtant à devoir sans cesse se reconnecter (identifiant et mot de passe, même si généralement ceux ci sont stockés dans les cookies) puis à devoir cocher "Accepter" la charte RENATER et enfin le bouton "Continue" pour valider le tout et être connecté. Quelques uns d'entre vous se dirons que ce ne sont pas des manipulations faramineuse à réaliser manuellement mais je peux vous affirmer que le faire environ 4-5fois par jour, ça devient un peu trop répétitif ^^

    J'ai donc fait quelques recherches (Non, je ne suis pas venu les mains dans les poches réclamer une réponse ) malheureusement, vous vous en douterez, le résultat n'est pas concluant.

    J'ai trouvé un morceau de code d'une personne voulant, à mon goût, réaliser des opérations plus ou moins similaire, j'ai donc essayé de re-bidouiller ce code à ma sauce pour répondre au besoin décrit précédemment.

    Voici où j'en suis (avec les commentaires de ce que j'ai cru comprendre, d'ailleurs, à toutes bonnes personnes qui viendront à mon aide, si je ne vous en demande pas trop, j'aimerai que vous fassiez de même, afin de comprendre le code ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import requests
    import re
     
    url = "https://portail-captif.crous.unicaen.fr:8003"
    payload = {"auth_user":"LOGIN","auth_pass":"MDP","iagree":"1"}   #Permet de remplir les champs indiqués (Login,MotdePasse,Case à cocher)
     
    s = requests.Session()  #Recupère les cookies pour compléter automatique les identifiant et mot de passe si possible
     
     
    rpost = s.post(url, data=payload)   #Poste dans l'url indiqué les informations fournis dans 'payload' et rempli ce qu'il faut
    Bon ... Déjà, deux problèmes :
    1) Personnellement, je vois bien que les champs d'identification seront a priori rempli, ainsi que le bouton radio "Accepter" mais quant à la phase final de devoir actionner le bouton "Continue" permettant la connexion, je ne vois pas où l'action se réaliserait dans ce bout de code ^^"

    Au passage, voici le code source de la page portail en question :
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    <html><head>
        <meta content="text/html; charset=windows-1252" http-equiv="content-type">
        <style type="text/css">
    body {
    	background-color: #fff;
    }
    body,td,th {
    	color: #090;
    }
    </style> </head>
      <body>
        <form method="post" action="https://portail-captif.crous.unicaen.fr:8003/" onsubmit="return CheckBoxesValidations() ;">
          <input name="redirurl" value="/" type="hidden">
          <center>
            <div style="text-align: center; height: 203px;"><left> <img src="captiveportal-logo.jpg" alt="logo" height="200px" width="200px">&nbsp;</left></div>
            <table style="border:1px solid #000000" cellpadding="6" cellspacing="0" height="380" width="550">
              <tbody>
                <tr bgcolor="#990000" height="10">
                  <td style="border-bottom:1px solid #000000" bgcolor="#4a97cd"> <font color="white">
                      <center><b> Portail Réseau Internet Etudiant </b></center>
                    </font> </td>
                </tr>
                <tr>
                  <td>
                    <div id="mainlevel">
                      <center>
                        <table border="0" cellpadding="5" cellspacing="0" width="100%">
                          <tbody>
                            <tr>
                              <td>
                                <center>
                                  <div id="mainarea">
                                    <center>
                                      <table border="0" cellpadding="5" cellspacing="5" width="100%">
                                        <tbody>
                                          <tr>
                                            <td>
                                              <div id="maindivarea">
                                                <center>
                                                  <div id="statusbox"> <font color="red" face="arial" size="+1"> <b> </b>
                                                    </font> </div>
                                                  <br>
                                                  <div id="loginbox">
                                                    <table>
                                                      <tbody>
                                                        <tr>
                                                          <td colspan="2">
                                                            <center><span style="color: #4a97cd;">Bienvenue
                                                                sur le Portail
                                                                Captif du CROUS de
                                                                CAEN</span></center>
                                                          </td>
                                                        </tr>
                                                        <tr>
                                                          <td colspan="2"> <br>
                                                          </td>
                                                        </tr>
                                                        <tr>
                                                          <td>&nbsp;</td>
                                                        </tr>
                                                        <tr>
                                                          <td align="right"><span style="color: black;">Utilisateur:</span></td>
                                                          <td align="left"><input name="auth_user" style="border: 1px dashed;" type="text"></td>
                                                        </tr>
                                                        <tr>
                                                          <td align="right"><span style="color: black;">Mot
                                                              de Passe:</span></td>
                                                          <td align="left"><input name="auth_pass" style="border: 1px dashed;" type="password"></td>
                                                        </tr>
                                                        <tr>
                                                          <td>&nbsp;</td>
                                                        </tr>
                                                        <tr>
                                                          <td><br>
                                                          </td>
                                                          <td><br>
                                                          </td>
                                                        </tr>
                                                        <tr>
                                                          <td><br>
                                                          </td>
                                                          <td> <br>
                                                          </td>
                                                        </tr>
                                                        <tr>
                                                          <td><br>
                                                          </td>
                                                          <td><br>
                                                          </td>
                                                        </tr>
                                                        <tr>
                                                          <td><br>
                                                          </td>
                                                          <td>
                                                            <p align="center"><textarea id="aup" name="aup" rows="5" cols="50">                                                            En vous connectant
                                                                sur le réseau, vous
                                                                devez accepter la
                                                                charte RENATER </textarea>
                                                            </p>
                                                          </td>
                                                        </tr>
                                                      </tbody>
                                                    </table>
                                                    <input id="iagree" name="CHKBOX1" value="0" type="checkbox"><span style="color: black;">Accepter</span>
                                                    <input name="accept" value="Continue" type="submit"> </div>
                                                </center>
                                              </div>
                                            </td>
                                          </tr>
                                        </tbody>
                                      </table>
                                    </center>
                                  </div>
                                </center>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </center>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </center>
        </form>
     
     
        <script type="text/javascript">
          function CheckBoxesValidations()
          {
             if(document.getElementById('iagree').checked == false)
             {
                alert("Vous devez accepter la charte pour vous connecter");
                return false;
             }
             else
                return true;
          }
         </script>
     
     
    </body></html>
    2) Lors de l’exécution du programme python, une erreur apparaît pour la commande "rpost = s.post(url, data=payload)" :
    Citation Envoyé par Python 3.4.3 Shell
    Traceback (most recent call last):
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 341, in _make_request
    self._validate_conn(conn)
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 761, in _validate_conn
    conn.connect()
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connection.py", line 238, in connect
    ssl_version=resolved_ssl_version)
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\util\ssl_.py", line 279, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
    File "C:\Python34\lib\ssl.py", line 365, in wrap_socket
    _context=self)
    File "C:\Python34\lib\ssl.py", line 583, in __init__
    self.do_handshake()
    File "C:\Python34\lib\ssl.py", line 810, in do_handshake
    self._sslobj.do_handshake()
    ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "C:\Python34\lib\site-packages\requests\adapters.py", line 370, in send
    timeout=timeout
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 574, in urlopen
    raise SSLError(e)
    requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "C:/Users/Florentin/Desktop/TestCrous.py", line 10, in <module>
    rpost = s.post(url, data=payload) #Poste dans l'url indiqué les informations fournis dans 'payload' et rempli ce qu'il faut.
    File "C:\Python34\lib\site-packages\requests\sessions.py", line 508, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
    File "C:\Python34\lib\site-packages\requests\sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
    File "C:\Python34\lib\site-packages\requests\sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
    File "C:\Python34\lib\site-packages\requests\adapters.py", line 431, in send
    raise SSLError(e, request=request)
    requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

    Quelques informations supplémentaires :
    - Je n'avais encore jamais travaillé avec cette bibliothèque auparavant, sans doute je n'y comprend pas tout
    - Mon niveau informatique pour Python est bon pour un tas de choses basiques mais je dois sans doute rester dans les débutants
    - Version de Python utilisée : 3.4.3
    - Version de Requests : 2.7.0
    - Système d'exploitation : Windows 8.1


    Sur ce, merci de votre aide future, si vous avez besoin de plus d'informations sur certains points, n'hésitez pas à me le demander.

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

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

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Salut,

    en regardant ta page et le code propose, ca devrait marcher. Cliquer "continue" revient a faire un POST vers "https://portail-captif.crous.unicaen.fr:8003".

    Ton probleme, comme le dit ton message d'erreur, c'est le certificat TLS qui n'est pas valide. 2 solutions:
    * Tu passes "verify=False" a requests: s.post(url, data=payload, verify=False)
    * Tu installes le certificat localement sur ta machine (bien mieux)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci beaucoup pour cette précision ! Le programme marche à présent, il n'y a que le message :

    Citation Envoyé par Python 3.4.3 Shell
    Warning (from warnings module):
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 768
    InsecureRequestWarning)
    InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
    Donc, sauf erreur de ma part, cela fonctionne, et ce message qu'un avertissement de risque possible.

    Néanmoins, même si ce programme fonctionne, il ne répond pas au besoin initial, lorsqu'il est lancé, la connexion ne se fait pas. En ajoutant une commande ouvrant une page web ("www.developpez.net" par exemple) celle-ci ne m'y amène pas mais me renvoie sur le portail captif (Tout comme si j'ouvrai cette page web moi même lorsque la connexion au portail n'est pas encore établi).

    Peut être n'est ce pas la bonne méthode pour palier à ce besoin, ou peut être manque-t-il quelques codes en plus ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Après tout ce monde passé voir ce sujet, personne n'aurait d'alternative ? ^^"

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par floflo.hp Voir le message
    Après tout ce monde passé voir ce sujet, personne n'aurait d'alternative ? ^^"
    Sans comprendre ce qu'il (ne) se passe (pas bien), pas facile d'avancer.
    Et ce qui se passe est un dialogue entre le client Web et le serveur que vous (seul) pouvez examiner avec un outil comme Wireshark par exemple.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Merci pour votre réaction, j'ai installé Wireshark, mais la question du bouton "Continue" me turlupinait encore, alors entre temps, j'ai modifié le programme pour essayer de le prendre en compte. J'ai donc essayé de l'ajouter à la variable payload (où d'autre sinon ? je ne voyais pas) puis quant à la valeur à prendre, laquelle ? Eh bien finalement j'ai tout simplement mis "accept":"Continue", tout comme cela est indiqué sur le code source.
    En l'ajoutant, la connexion s'effectue correctement, contrairement à ce que semblait dire dahtah Cliquer "continue" revient a faire un POST vers "https://portail-captif.crous.unicaen.fr:8003" n'est pas vrai, le POST ne suffit pas, il faut inclure ce bouton dans les variable de notre payload.

    En tout cas, merci à vous deux, je vous souhaite une bonne continuation

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/07/2010, 16h14
  2. Portail Captif - URL d'origine
    Par Guybrush113 dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2009, 11h51
  3. Script connexion auto proxy
    Par cellendhyll dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/01/2008, 10h41
  4. Connexion auto à l'ouverture explorateur fichier
    Par jlvalentin dans le forum Windows XP
    Réponses: 29
    Dernier message: 07/07/2006, 11h47
  5. ligne de commandes-connexion auto de lecteurs réseau G et P
    Par mathieu_r dans le forum Développement
    Réponses: 2
    Dernier message: 24/02/2006, 17h18

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