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 :

extraire les adresses ip d'une chaîne contenant un tracert (commande Dos) [WD22]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut extraire les adresses ip d'une chaîne contenant un tracert (commande Dos)
    Bonjour,

    Je suis actuellement en train de me remettre à niveau, j'explore actuellement les bases des services webs.

    J'en utilise un tout simple permettant de récupérer la localisation en fonction de l'adresse ip (GeoIpService), or le service ne fonctionne pas très bien avec mon adresse actuelle (il indique Russie) dans l'idée de m’entraîner j'ai donc eu l'idée d'envoyer l'adresse du premier node d'un tracert à ce service web pour voir si l'information est meilleure.

    Ce qui m’amène à ma question je voudrais extraire les adresses ip d'un tracert récupéré sous forme de chaîne (excellente la DLL dos de ce forum au passage)

    exemple de "tracert" :

    Détermination de l'itinéraire vers google.com [216.58.213.174]
    avec un maximum de 30 sauts*:

    1 1 ms 1 ms <1 ms dsldevice.lan [192.168.1.1]
    2 50 ms 49 ms 49 ms mar-1-rdb.fr.eu [178.32.37.6]
    3 50 ms 51 ms 795 ms vl31.mar-5-6k.fr.eu [178.32.37.190]
    4 53 ms 53 ms 53 ms be3.lyo-5-6k.fr.eu [91.121.131.222]
    5 744 ms 170 ms 60 ms be100-1134.th2-1-a9.fr.eu [91.121.131.220]
    6 * * * Délai d'attente de la demande dépassé.
    7 307 ms 61 ms 60 ms 108.170.245.1
    8 820 ms 208 ms 61 ms 64.233.175.195
    9 60 ms 803 ms 208 ms par21s04-in-f174.1e100.net [216.58.213.174]

    Itinéraire déterminé.
    je ne suis pas extrêmement familier de la manipulation de chaines sous Windev, j'ai testé plusieurs solution et je ne comprend pas pourquoi cela ne fonctionne pas, dernière en date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    tabl est un tableau de chaînes
    bla est une chaîne
     
    //gsCha variable globale de type chaine contenant le tracert
     
    POUR TOUTE CHAÎNE bla DE gsCha SEPAREE PAR ["[","]"]
    	Trace(bla)
    	TableauAjoute(tabl,bla)
    FIN
    or ce code me renvoi en plus des adresses, le début de chaque lignes.

    Je vous remercie de m'avoir lu, et j’espère que vous pourrez m'accorder quelques minutes.

    Cordialement,
    Julien

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 777
    Points : 5 191
    Points
    5 191
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    A priori ton code renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Détermination de l'itinéraire vers google.com
    216.58.213.174
     
    avec un maximum de 30 sauts*:
     
    1 1 ms 1 ms <1 ms dsldevice.lan
    192.168.1.1
    2 50 ms 49 ms 49 ms mar-1-rdb.fr.eu
    178.32.37.6
    ......
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Bonjour,

    regarde du côté de la fonction ExtraitChaine.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    oui le code me renvoie le texte suivant avec les balises de mise en page, je ne comprend donc pas le comportement de la fonction, elle devrait en theorie renvoyer uniquement ce qui est entre crochets.

    édit : je viens de comprendre cette fonction ne fait que diviser la chaîne en sous chaînes dont on spécifie un séparateur (ici les crochets), donc cela pourrais marcher mais il faudrait que j’interprète les chaines renvoyée et ne stocker que celle qui correspondent à un masque "adresse ip"

    <\r><\n>Détermination de l'itinéraire vers google.com
    216.58.213.174
    <\r><\n>avec un maximum de 30 sauts*:<\r><\n><\r><\n> 1 1 ms 1 ms <1 ms dsldevice.lan
    192.168.1.1
    <\r><\n> 2 50 ms 49 ms 49 ms mar-1-rdb.fr.eu
    178.32.37.6
    <\r><\n> 3 50 ms 51 ms 795 ms vl31.mar-5-6k.fr.eu
    178.32.37.190
    <\r><\n> 4 53 ms 53 ms 53 ms be3.lyo-5-6k.fr.eu
    91.121.131.222
    <\r><\n> 5 744 ms 170 ms 60 ms be100-1134.th2-1-a9.fr.eu
    91.121.131.220
    <\r><\n> 6 * * * Délai d'attente de la demande dépassé.<\r><\n> 7 307 ms 61 ms 60 ms 108.170.245.1 <\r><\n> 8 820 ms 208 ms 61 ms 64.233.175.195 <\r><\n> 9 60 ms 803 ms 208 ms par21s04-in-f174.1e100.net
    216.58.213.174
    <\r><\n><\r><\n>Itinéraire déterminé.<\r><\n>
    merci de votre aide je vais regarder du côté de "extrait chaîne"

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Les 2 instructions ci-dessous sont STRICTEMENT équivalentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POUR TOUTE CHAÎNE bla DE gsCha SEPAREE PAR [ "[",  "]" ]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POUR TOUTE CHAÎNE bla DE gsCha SEPAREE PAR [ "]",  "[" ]   // Idem ci dessus en permutant [ et ]
    Et cette 3ème instruction a un sens totalement cohérent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POUR TOUTE CHAÎNE bla DE gsCha SEPAREE PAR [ ",",  ";",  ".",  "/" ]
    Je pense qu'avec ces 3 exemples, tu devrais comprendre le fonctionnement de cette instruction 'Pour toute Chaine'.

    EDIT :


    ExtraitChaine ne va pas totalement t'aider. Extrait chaine va te donner la même chose que ce que tu as actuellement. Sauf si parmi les différentes options de extraitchaine, il y en a une que je ne connais pas ?

    Ce code là devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    pour toute chaine bla DE gsCha SEPAREE PAR RC
        po = position (bla, "[")
        si po > 0 alors 
             bla2 = bla[[po a]]
             po2 = position ( bla2, "]")
             si po2 > 0 alors 
                 bla3 = bla2[[ 1 a po2-1]]
                 info(bla3)  // Affiche l'adresse IP.
             fin 
        fin 
    fin
    limitation : ce code va extraire une seule adresse IP par ligne, mais on est dans ce cas de figure.

    EDIT n°2
    Je vois que dans l'exemple que tu as donné au début, il y a certaines adresses IP qui ne sont pas entre crochets. Il va donc falloir trouver autre chose pour les traiter aussi.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    je penses qu'on peut y arriver avec extraitchaine

    je ne suis pas au bureau et ne peut tester mais voila comment je vois la chose

    definition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    vtexte1 est une chaine
    vtexte2 est une chaine
     
    pour toute chaine bla DE gsCha SEPAREE PAR RC
     
    vtexte1=ExtraitChaine(gsCha,2,"[")
    vetext2=ExtraitChaine(vtexte1,1,"]")
     
    FIN
    a toi de traiter vtexte2 - me trompe peut-être mais je teste ça au bureau demain matin - autre chose envoie moi par MP ton fichier texte que ju'ai tous les éléments en mains après tout je ne sais pas si le RC figure dedans.

    PS: j'ai pas trop de mal avec ce genre de manip et je suis intéressé de savoir comment les autres traites ce genre de cas.

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 777
    Points : 5 191
    Points
    5 191
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    EDIT n°2
    Je vois que dans l'exemple que tu as donné au début, il y a certaines adresses IP qui ne sont pas entre crochets. Il va donc falloir trouver autre chose pour les traiter aussi.
    Les adresses IP qui ne sont pas entre crochet sont à priori "hors temps" donc inintéressantes
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pour toute chaine bla DE gsCha SEPAREE PAR RC 
       vtexte1=ExtraitChaine(gsCha,2,"[")
       vetext2=ExtraitChaine(vtexte1,1,"]")
    FIN
    Oui, bien sûr... je pensais que tu pensais à un seul extraitchaine pour directement obtenir l'adresse IP ... et du coup je suis parti dans un film !
    C'est effectivement la solution la plus efficace.
    Peut-être que les amateurs de Regexp vont préférer autre chose, mais c'est pas mon truc.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 938
    Points : 1 921
    Points
    1 921
    Par défaut
    Bonjour,

    Tu peux faire comme ça tout simplement
    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
    sMaChaine est chaîne =[
    	Détermination de l'itinéraire vers google.com [216.58.213.174]
    	avec un maximum de 30 sauts*:
     
    	1 1 ms 1 ms <1 ms dsldevice.lan [192.168.1.1]
    	2 50 ms 49 ms 49 ms mar-1-rdb.fr.eu [178.32.37.6]
    	3 50 ms 51 ms 795 ms vl31.mar-5-6k.fr.eu [178.32.37.190]
    	4 53 ms 53 ms 53 ms be3.lyo-5-6k.fr.eu [91.121.131.222]
    	5 744 ms 170 ms 60 ms be100-1134.th2-1-a9.fr.eu [91.121.131.220]
    	6 * * * Délai d'attente de la demande dépassé.
    	7 307 ms 61 ms 60 ms 108.170.245.1
    	8 820 ms 208 ms 61 ms 64.233.175.195
    	9 60 ms 803 ms 208 ms par21s04-in-f174.1e100.net [216.58.213.174]
     
    	Itinéraire déterminé. 
    ]
    sAdresseIP est chaîne
     
    POUR TOUTE CHAÎNE sLigne DE sMaChaine SEPAREE PAR RC
    	SI sLigne = "" ALORS CONTINUER
     
    	sAdresseIP = Remplace(ExtraitChaîne(sLigne,1," ",DepuisFin),["[","]"],"")
    	SI ChaîneOccurrence(sAdresseIP,".") < 3 ALORS CONTINUER
     
    	Trace(sAdresseIP)
    FIN
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  10. #10
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Bonjour

    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
     
    vnumip est un entier
    vtexte1,vtexte2 est une chaine
     
    pour toute chaine bla DE gsCha SEPAREE PAR RC
     
    // on repère les lignes avec crochet
     
          vnumip=chaineoccurence(gsCHa,"[")
     
         SI vnumip > 0 alors
            vtexte1=ExtraitChaine(gsCha,2,"[")
            vtext2=ExtraitChaine(vtexte1,1,"]")
        SINON
            vtexte1=""
            vtexte2=""
        FIN
    // on traite la chaine vtexte2
     
        SI vtexte2 <> "" alors
            TRACE(vtexte2)                                                      //remplace le trace par le traitement que tu souhaites
        FIN
    FIN
    EDIT : j'aime bien l'approche de philouZ

  11. #11
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 938
    Points : 1 921
    Points
    1 921
    Par défaut
    Bonjour,

    Encore plus simple s'il ne faut récupérer que ce qu'il y a entre crochets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sAdresseIP est une chaîne
     
    POUR TOUTE POSITION nPosition1 DE "[" DANS sMaChaine
    	sAdresseIP = sMaChaine[[nPosition1 + 1 À Position(sMaChaine,"]",nPosition1)-1]]
    	Trace(sAdresseIP)
    FIN
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci à tous pour vos solutions élégantes, au final j'était passé par ma solution un peu batarde en filtrant mes resultats avec un masque de type IP, ce qui fonctionnait.

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 937
    Points : 9 249
    Points
    9 249
    Par défaut
    hello,
    juste pour le fun et pour faire plaisir à tbc92 , une solution en utilisant les expressions régulières. Comme VérifieExpressionRégulière n'est pas assez développé pour le faire facilement, j'utilise l'objet automation vbscript.regexp :

    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
    sMaChaine est chaîne =[
    Détermination de l'itinéraire vers google.com [216.58.213.174]
    avec un maximum de 30 sauts*:
     
    1 1 ms 1 ms <1 ms dsldevice.lan [192.168.1.1]
    2 50 ms 49 ms 49 ms mar-1-rdb.fr.eu [178.32.37.6]
    3 50 ms 51 ms 795 ms vl31.mar-5-6k.fr.eu [178.32.37.190]
    4 53 ms 53 ms 53 ms be3.lyo-5-6k.fr.eu [91.121.131.222]
    5 744 ms 170 ms 60 ms be100-1134.th2-1-a9.fr.eu [91.121.131.220]
    6 * * * Délai d'attente de la demande dépassé.
    7 307 ms 61 ms 60 ms 108.170.245.1
    8 820 ms 208 ms 61 ms 64.233.175.195
    9 60 ms 803 ms 208 ms par21s04-in-f174.1e100.net [216.58.213.174]
     
    Itinéraire déterminé. 
    ]
    MonFiltre est une chaîne
    MonRegexp est un objet Automation "vbscript.regexp"
    objMatches est un objet Automation dynamique
     
    MonFiltre = "\[([ 0-9\.]+)]"
    MonRegexp>>GLOBAL = Vrai // on cherche toutes les occurrences
    // on recherche les motifs qui sont sous la forme du Filtre
    MonRegexp>>Pattern = MonFiltre
    objMatches = MonRegexp>>Execute(sMaChaine) // on recherche tous les motifs
    SI objMatches>>Count = 0 ALORS
    	Info("pas d' adresse trouvée ") 
    SINON
    	POUR y=0 _A_ objMatches>>Count -1
    		//on ne prends que le sous-motif (entre parenthèses) pas les crochets
    		Trace(" Adresse IP : " + y + " : " + objMatches>>Item(y)>>Submatches(0))
    	FIN
    FIN
    Résultat :
    Nom : Regexp.png
Affichages : 463
Taille : 12,5 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/02/2007, 18h16
  2. Supprimer les premiers 0 dans une chaîne
    Par supersmoos dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2007, 12h28
  3. Réponses: 1
    Dernier message: 22/11/2006, 10h57
  4. Extraire les données ID3 d'une musique
    Par FluidBlow dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/10/2006, 21h04
  5. [RegEx] extraire les liens hypertexte d'une page web
    Par lalama dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2006, 11h43

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