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

WinDev Discussion :

Connexion à boitier routeur/swtich cisco par https pour lire information de certaines pages [WD20]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Connexion à boitier routeur/swtich cisco par https pour lire information de certaines pages
    Bonjour à tous,

    J'ai besoin de faire une application qui va récupérer certaines informations de configuration mais la contrainte que j'ai est que cela doit impérativement se faire par https car mon boss ne veut pas activer de snmp/tftp ou autre. Pfff

    Voici un des nombreux code que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    cMaRéponse est un httpRéponse
    cMaRequête est un httpRequête
    cMaRequête..URL = "https://192.168.1.1/dhcp_setup.htm"
    cMaRequête..Utilisateur="UserRouteurCisco"
    cMaRequête..MotDePasse="PasswordRouteurCisco"
    cMaRequête..IgnoreErreur=httpIgnoreCertificatInvalide+httpIgnoreCertificatExpiré+httpIgnoreNomCertificatInvalide
    cMaRequête..Méthode=httpPost
    cMaRéponse = HTTPEnvoie(cMaRequête)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info(cMaRéponse..Contenu)
    FIN
    L'identification n'est jamais prise en compte, même si j'envoi un formulaire sur https://192.168.1.1/cgi-bin/welcome.cgi (la page de login) ; c'est pareil si je commence par la page https://192.168.1.1/cgi-bin/welcome.cgi

    J'ai aussi essayé en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPParamètre(httpParamètreMode,1)
    J'ai forcément loupé un truc tout bête mais je ne comprends pas tout sur les différentes fonctions Windev concernées car les exemples se font rares ...

    Est-ce quelqu'un d'entre vous aurez une idée ou au moins une piste à suivre ?

    Merci beaucoup pour votre aide dans mon projet de "détente de mon boss" ;-)

    Pierre

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    As-tu vérifié que ça marche bien avec Internet Explorer ?

    Les fonctions httpxxx se basent sur IE.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci de vous intéresser à mon problème.

    Quand vous dites essayer avec Internet Explorer : cela veut dire ouvrir Internet Explorer + aller sur https://192.168.1.1 + connexion ok ensuite ?

    Si c'est cela, oui cela fonctionne sans aucuns soucis.
    D'ailleurs dans le champ HTML (qui deviendra une variable à la fin car tout sera mis dans un robot sans interface), après ce code, si je mets le login/pass, la connexion fonctionne.

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Si ça fonctionne avec IE, c'est déjà bon signe.

    As-tu regardé du côté des fonctions HTTPxxxx (HTTPparametre,...) ?

    Il se peut que tu ais loupé quelque chose là-dedans.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Oui j'ai forcé l'utilisation de Internet Explorer et/ou cookie activé et/ou cache activé. :-(
    Normalement cela devrait fonctionner donc sans trop de mal ?

    Si j'utilise la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Résultat> = HTTPRequête(<URL à contacter> [, <Agent utilisateur> [, <Entête HTTP supplémentaire> [, <Message à envoyer> [, <Type du message> [, <Nom User> [, <Mot de passe>]]]]]])
    Je ne renseigne pas :
    - Agent utilisateur
    - entête HTTP Supplémentaire
    - Message à envoyer
    - Type du message
    Je mets des doubles guillemets.

    Dans le cas où j'utilise la variable httprequête quand j'ai mis dans le premier exemple, je ne renseigne même pas ces informations ...

    Rien à voir ?

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je n'ai pas trop le temps de regarder dans le détail, mais dans la page d'aide, il y a la partie envoie POST pour ton user + pwd.

    De plus, il y a cette histoire de HTTPS. Il faudrait gratter de ce côté là.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .IgnoreErreur=httpIgnoreCertificatInvalide+httpIgnoreCertificatExpiré+httpIgnoreNomCertificatInvalide
    Mais j'ai demandé à désactiver temporairement https sur le routeur donc maintenant je test avec http seulement mais ça ne fonctionne pas mieux

    J'ai bien relu la doc pour la méthode post, si j'ai bien compris, je pourrais utiliser un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPRequête("http://192.168.1.1/dhcp_setup.htm","","","","post","cisco","PasswordDuUser")
    Le résultat avec HTTPDonneRésultat me fait arriver sur la page de connexion (comme si le user/password n'avait même pas été pris en compte.

    J'arrête pas de faire des essais, des recherches sur le net, j'ai fait une demande au support de PC Soft (pas très rapide dans la réponse ... donc j'attend encore leur retour)

    En fait dans mon code du début :
    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
     
    HTTPParamètre(httpParamètreMode,0) //erreur aussi avec HTTPParamètre(httpParamètreMode,1)
    HTTPParamètre(httpParamètreDésactiveCookie,0)
    HTTPParamètre(httpParamètreDésactiveCache,0)
    cMaRéponse est un httpRéponse
    cMaRequête est un httpRequête
    cMaRequête..URL = "http://192.168.1.1/dhcp_setup.htm"
    cMaRequête..Utilisateur="cisco"
    cMaRequête..MotDePasse="PasswordDuUser"
    cMaRequête..Méthode=httpPost
    cMaRéponse = HTTPEnvoie(cMaRequête)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info(cMaRéponse..Contenu)
    FIN
    J'ai en fait le message d'erreur suivant :
    Vous avez appelé la fonction HTTPEnvoie.
    La requête ne contient pas de données à envoyer.
    J'ai affiché le code source de la page de connexion du routeur car je commence à me dire qu'il faut vraiment que j'envoi du contenu pour que cela fonctionne. Mais je ne comprend ce que je dois renseigner car je ne capte pas grand chose au différentes méthodes utilisées : sur le code source de la page du routeur, il semble y avoir du javascript, c'est une page cgi pour la connexion, une page htm pour le contenu que je veux récupérer ...
    J'ai regardé la doc du routeur pour voir s'il y avait des autres moyens de connexion mais rien (je voulais trouvé un truc comme Wordpress où l'on passe par une page au format xml que l'on envoi ...)

    Est-ce que ça aide si je mets le code source du formulaire ? Le voici :
    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
    	    	<form name="form_contents" method="post" action="/cgi-bin/userLogin.cgi">
    			<input type="hidden" name="login" value="true">
    			<input type="hidden" name="portalname" value="CommonPortal">
    			<input type="hidden" name="password_expired" id="password_expired" value="0">
    			<input type="hidden" name="auth_key" value="1918700002">
    			<input type="hidden" name="md5_old_pass" value="">
    			<table id="nk_login" width="223" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">	
    				<tr>
    					<td width="70" height="17"></td>
    					<td class="ErrorArrow">
    					<script>
    					var error_string=(window.location.href.split('err='))[1];
    					if( error_string && error_string.match('error'))
    						document.write('▼');
    					</script>
    					</td>
    				</tr>
    				<tr>
    					<td class="UserNameFeild">Username:<img border="0" src="/images/_blank.gif" width="5" height="1"></td>
    					<td class="UserNameFeild"><input type="text" name="username" maxlength="64" style="font-family:Arial;font-size:12px;width:150px;"></td>
    				</tr>
    				<tr>
    					<td class="LoginFeild">Password:<img border="0" src="/images/_blank.gif" width="5" height="1"></td>
    					<td class="LoginFeild"><input type="password" name="password" maxlength="64" style="font-family:Arial;font-size:12px;width:150px;" onKeypress="SubmitPassword(event);"></td>
    				</tr>
    				<tr>
    					<td class="LoginFeild"></td>
    					</td>
    					<td>
    					<table width="100%">
    					  <tr>
    						<td class="LoginFeild" width="50">
    						  <script>PrintSTButton("Login", "  Login  ", "SendPassword();", "submit");</script>
    						</td>
    						<td width="5"></td>
    						<td><img id="process" border="0" src="/images/login_progress.gif" width="16" height="16" style="visibility:hidden"></td>
    					  </tr>
    					</table>  
    					</td>
    				</tr>
    			</table>
     
    			<table id="change_password" width="303" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;display:none">
    				<tr>
    					<td></td>
    					<td class="ErrorArrow">
    					<script>
    					var error_string=(window.location.href.split('err='))[1];
    					if( error_string && error_string.match('expired'))
    						document.write('▼');
    					</script>
    					</td>
    				</tr>
    				<tr>					
    					<td width="180" class="LoginFeild">Current Password:<img border="0" src="/images/_blank.gif" width="5" height="1"></td>
    					<td class="LoginFeild"><input type="password" name="current_password" maxlength="64" style="font-family:Arial;font-size:12px;width:150px;" onKeypress="SubmitPassword(event);"></td>
    				</tr>
    				<tr>
    					<td class="LoginFeild">New Password:<img border="0" src="/images/_blank.gif" width="5" height="1"></td>
    					<td class="LoginFeild"><input type="password" name="new_password" maxlength="64" style="font-family:Arial;font-size:12px;width:150px;" onKeypress="SubmitPassword(event);"></td>
    				</tr>
    				<tr>
    					<td class="LoginFeild">Re-enter New Password:<img border="0" src="/images/_blank.gif" width="5" height="1"></td>
    					<td class="LoginFeild"><input type="password" name="re_new_password" maxlength="64" style="font-family:Arial;font-size:12px;width:150px;" onKeypress="SubmitPassword(event);"></td>
    				</tr>
    				<tr>
    					<td class="LoginFeild"></td>
    					</td>
    					<td class="LoginFeild">
    					<script>
    					PrintSTButton("Save", "  Save  ", "SendPassword();", "", "submit");
    					document.write('<img border="0" src="/images/_blank.gif" width="5" height="1">');
    					PrintSTButton("Cancel", " Cancel ", "show_login();");
    					</script></td>
    				</tr>
    			</table>
    			</form>

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Je pense que je m'approche.
    Il semblerait que je doive directement envoyer le formulaire sur la page userLogin.gi (la page d'envoi pour le formulaire depuis le code source).
    J'ai enfin une autre : erreur de mot de passe

    J'ai regardé de plus prêt le code source de la page, il y a une fonction pour mettre le password en md5
    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
    {
    	    if(document.form_contents.elements['username'].value == "" && document.form_contents.elements['password'].value == "" )
    	    {
    	        document.form_contents.elements['username'].select();
    	    	return;
    	    }
     
    	    var tmp;
    	    document.form_contents.elements['md5_old_pass'].value=document.form_contents.elements['password'].value+document.form_contents.elements['auth_key'].value;
    	    tmp=hex_md5(document.form_contents.elements['md5_old_pass'].value);
    	    document.form_contents.password.value=tmp;
    	    document.form_contents.md5_old_pass.value="";	
    	}
    	document.getElementById("process").style.visibility="visible";	
    	window.status="Login.....";
    	document.form_contents.submit();
    Il semblerait que le routeur prenne le password (PasswordDuUser) auquel il ajoute la clé d'authentification (1918700002), donc si je ne m'abuse cela fait : PasswordDuUser1918700002 ; il fait donc un hex_md5 sur cela.

    J'ai le sentiment que si j'arrive à reproduire de calcul MD5 pour le password dans le formulaire, là ça devrait passer !

    Evidement si j'utilise simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPAjouteParamètre("form_contents","password",HashChaîne(HA_MD5_128,"PasswordDuUser1918700002"))
    ça ne fonctionne pas (toujours erreur de password)
    J'ai essayé de mettre le password+clé dans une variable chaine UNICODE, c'est pareil.
    J'ai aussi essayé de mettre le résultat du Hash dans un buffer avant et ensuite de mettre le buffer pour l'envoi du formulaire ; c'est pareil.

    Je pense que cette étape passée, là ça fonctionnera.

    Je continu mes tentatives en me concentrant sur cela. Si quelqu'un a une idée ...
    Si je trouve, je vous mets le code complet de cela ...

    A très vite (j'espère )

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    ça avance enfin !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sPass est une chaîne ANSI="PasswordDuUser1918700002"
    sPassMd5 est une chaîne=""
    bufTest est un Buffer
    bufTest=HashChaîne(HA_MD5_128,sPass)
    i est un entier
    sPassMd5=""
    POUR i=1 _A_ Taille(bufTest)
    	sPassMd5+=NumériqueVersChaîne(Asc(bufTest[[i]]), "02x")
    FIN
    Avec ce bout de code, le mot de passe est correctement formaté pour le routeur.

    Ensuite si je vais sur la page que je veux http://192.168.1.1/dhcp_setup.htm, là j'ai bien les infos que je souhaite récupérer !

    Bon maintenant, il me reste à mettre tout ce code au propre pour enfin intégrer cette fonctionnalité

    Donc en version brute, ça donne ceci :
    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
     
    HTTPParamètre(httpParamètreMode,1)
    HTTPParamètre(httpParamètreDésactiveCookie,0)
    HTTPParamètre(httpParamètreDésactiveCache,0)
    sPass est une chaîne ANSI="PasswordDuUser1918700002"
    sPassMd5 est une chaîne=""
    bufTest est un Buffer
    bufTest=HashChaîne(HA_MD5_128,sPass)
    i est un entier
    sPassMd5=""
    POUR i=1 _A_ Taille(bufTest)
    	sPassMd5+=NumériqueVersChaîne(Asc(bufTest[[i]]), "02x")
    FIN
    HTTPCréeFormulaire("form_contents")
    HTTPAjouteParamètre("form_contents","login","true")
    HTTPAjouteParamètre("form_contents","portablename","CommonPortable")
    HTTPAjouteParamètre("form_contents","password_expired","0")
    HTTPAjouteParamètre("form_contents","auth_key","1918700002")
    HTTPAjouteParamètre("form_contents","md5_old_pass","")
    HTTPAjouteParamètre("form_contents","username","cisco")
    HTTPAjouteParamètre("form_contents","password",sPassMd5)
    HTTPEnvoieFormulaire("form_contents","http://192.168.1.1/cgi-bin/userLogin.cgi",httpPost)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	HTTPRequête("http://192.168.1.1/dhcp_setup.htm")
    	Info(HTTPDonneRésultat())
    FIN
    Vous pourrez voir que je passe par Internet Explorer (sinon marche pas)
    Nous avons plusieurs boitiers à analyser, je pense que la valeur auth_key dépend des boitiers ; il faudra donc que je récupère cela avant la connexion...

    N'hésitez pas si vous avez besoin de plus d'explications

    Merci beaucoup pour votre aide, j'espère que ça servira à d'autre

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2011, 15h32
  2. Réponses: 1
    Dernier message: 26/06/2009, 15h30
  3. [JMeter] Envoi données XML par http pour une servlet
    Par thierry_b dans le forum Tests et Performance
    Réponses: 3
    Dernier message: 08/01/2009, 16h16
  4. Quelle requête HTTP pour lire dans un ZIP?
    Par Colon dans le forum Débuter
    Réponses: 1
    Dernier message: 18/09/2008, 18h54

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