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

Programmation et administration système Perl Discussion :

Comment extraire le nom host d'un adresse DNS


Sujet :

Programmation et administration système Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut Comment extraire le nom host d'un adresse DNS
    Bonjour à tous,

    J'ai essayé de comprendre l'expression régulière mais en vain, j'y n'arrive pas.

    Je me demande comment extraire l'adresse du hostname, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ??????
    $resultat_host = "3750X";
    En clair, je voudrais prendre le premier mot avant le point.

    Merci de m'aider.

    Je vous souhaite une très bonne we.
    Cordialement

    Fred ;-)

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 580
    Points : 2 027
    Points
    2 027
    Par défaut
    Bonjour,

    en étant trivial par rapport à ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = $1 if ($variable_snmp =~ /^(.[^.]+)\..+/);
     
    print "$resultat_host\n";
    Mon expression régulière repose sur la recherche en début de chaîne de toute suite de caractère ne contenant pas le caractère . suivie d'un . justement

    Autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = shift((split(/\./, $variable_snmp)));
     
    print "$resultat_host\n";

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Bonjour,

    Citation Envoyé par SkyDev
    Je me demande comment extraire l'adresse du hostname, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ??????
    $resultat_host = "3750X";
    En clair, je voudrais prendre le premier mot avant le point.
    Le ., on l'exprime "\." car il a sinon une signification particulière.

    Un mot, c'est constitué de caractères de mots exprimés "\w".
    Si l'on en veut plusieurs (caractères), mais au moins un, il faut noter "\w+".
    Si l'on veut éviter de prendre le maximum de caractères, il faut préciser au + de s'arrêter dès que possible (selon la suite du motif) : "\w+?".
    Le mot avant un point, c'est donc "\w+?\.".

    Eventuellement, on peut préciser que l'on prend tout ça à partir du début de chaine : "^\w+?\." mais ça me paraît superflu.

    On ajoute des parenthèses pour mémoriser ce que l'on veut (le mot, sans le point) : "(\w+?)\.".

    Et on met tout ça en musique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ($resultat_host) = ($variable_snmp =~ m/(\w+?)\./);
    Je n'ai pas testé, mais on doit être proche du but.

    [Edit]
    Je suis trop lent ... et Arioch a une bonne solution aussi. En Perl, il y a toujours plus d'une façon de le faire.
    [/Edit]

    [Edit 2]
    Testé et fonctionnel !
    [/Edit]
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 580
    Points : 2 027
    Points
    2 027
    Par défaut
    Par contre ma méthode avec split fonctionne pas (la 2è)

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Arioch
    Par contre ma méthode avec split fonctionne pas (la 2è)
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = (split(/\./, $variable_snmp))[0];
     
    print "$resultat_host\n";
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Merci beaucoup, et ça marche.
    Cordialement

    Fred ;-)

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 580
    Points : 2 027
    Points
    2 027
    Par défaut
    Merci du tuyau

    Par contre, syntaxiquement parlant, mon approche aurait dû fonctionner, me gourre-je ?

    shift extrait un élément d'une liste
    la liste ici est composé de tous les éléments de la chaine splités via le .

    Je pensais (bêtement) qu'on pouvait assigner à notre variable réceptrice le résultat combiné du shift de la liste splitée. On restait dans le contexte scalaire.

    Bizarre.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Encore une chose, si j'ai envie d'extraire le nom d'un hostname au milieu du texte d'une variable comme par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $service_description = "GigabitEthernet1/8 Link to 3750X_Gi1/0/2";
    ???
    $resultat = "3750X";
    Encore merci pour votre aide, et pouquoi pas intégrer ces deux exemples dans le FAQ du perl?
    Cordialement

    Fred ;-)

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 580
    Points : 2 027
    Points
    2 027
    Par défaut
    Disons que là, c'est un poil plus hardu

    Grosso modo, il nous faut des branches à ton arbre auxquelles nous rattacher ou, autrement formulé, une certaine structure à ta chaine de caractères dont on est sûr et certains qu'elle ne varieras pas.

    Exemple dans ta chaîne : GigabitEthernet1/8 Link to 3750X_Gi1/0/2

    Peut-on espérer que le motif que tu recherches seras toujours précédé d'un espace et suivi d'un _ ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Justement je le pensais mais comment faire, et là je comprendrais. Pourriez-vous me donner un exemple de code.

    Bien sur le motif sera tjrs la même chose, dont on doit extraire entre une espace et avant _ comme vous l'avez dit.

    Merci beaucoup.
    Cordialement

    Fred ;-)

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 580
    Points : 2 027
    Points
    2 027
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $service_description = "GigabitEthernet1/8 Link to 3750X_Gi1/0/2";
    $resultat = $1 if ($service_description =~ /.+ (.[^ ]+)_.+/);
     
    print "$resultat\n" if ($resultat);
    print "no match for \$service_description\n" if (! $resultat);
    Pour l'explication (fort peu éloignée de la précédente) : recherche de tout caractère suivi d'un espace, puis d'une suite de caractères ne contenant pas d'espace, suivis d'un _

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Merci pour le conseil, je vais tester maintenant. Je modifie un peu le contenu d'affichage graphique (MRTG) au besoin de l'entreprise.

    Je te tiendrais au courant.
    Cordialement

    Fred ;-)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    voilà, ça fonctionne.

    Je vous remercie et en te souhaitant une très bon we.
    Cordialement

    Fred ;-)

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

Discussions similaires

  1. [Batch] Comment extraire le nom du fichier
    Par ziko.1988 dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 14/07/2010, 11h00
  2. comment extraire le nom de fichier à partir d'un chemin?
    Par salimo79 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/07/2010, 03h58
  3. Réponses: 3
    Dernier message: 21/05/2008, 18h24
  4. Comment extraire le dernier numéro d'une adresse IP ?
    Par looping dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2007, 20h55
  5. Réponses: 4
    Dernier message: 27/06/2005, 15h11

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