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 confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    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.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    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 602
    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 : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    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]

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    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 602
    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 : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    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";

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

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

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    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 602
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    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?

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    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 602
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    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.

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 602
    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 602
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    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.

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

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

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

+ 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