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 :

Obtenir le hostname d'un serveur Linux sous DOS


Sujet :

Programmation et administration système Perl

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Par défaut Obtenir le hostname d'un serveur Linux sous DOS
    Tout d'abord bonjour à tous et merci de prêter attention à mon post.
    Je débute en perl et j'ai un petit soucis pour la mise en oeuvre d'un script que l'on m'a demandé de faire pour mon projet de stage.

    Je travaille sur un poste Windows2000, et la version finale du script doit être implémentée sur un serveur Windows 2000 Pro. Je dois rappatrier tous les noms des serveurs dans une base de donnée (pour l'instant je rappatrie seulement dans des fichiers pour les tests).

    J'arrive sans problème à obtenir les noms des serveurs Windows via la commande NTBStat. (dans un autre script je fais la même chose pour les postes à IP dynamiques via des requêtes DHCP).

    Cependant je n'arrive pas à obtenir les noms des serveurs tournant sous Linux (rien que le hostname me serait grandement utile). Je tiens à préciser que je ne peux pas intérroger les serveurs DNS aux vues de leur fréquence de mise à jour (on va être gentils, on va dire environ tous les 2 ans, et encore ...) et je n'y ai pas accès ... De plus la plupart des serveurs vont migrer sous Linux (sauf celui sur lequel les scripts tourneront) après mon départ (mi Juin) et donc mes scripts risquent de ne plus servir à grand chose ...

    Voici où j'en suis dans mon code (pour vous aider à comprendre la logique de la démarche) :
    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
     
    #!perl
    use Getopt::Std;
    use File::Basename;
    use Log::Log4perl qw(get_logger);
    use Win32::ODBC;
    use Net::Ping;
    use LMSCorp::Utils::Config qw(ChargerFichierConfiguration);
     
    #-------------------------------------------------------------------------------
    # Variables globales
    #-------------------------------------------------------------------------------
    our $PRG_VERSION = "2.0";
    our $PRG_DATE = "04/2006";
    our $PRG_DESCRIPTIF = "Recuperation des noms des serveurs";
    (our $PRG_NOM, undef, undef) = fileparse($0, '\..*');
    our @adrIP;   #tableau regroupant les adresses IP dont le ping a réussi
    our %nomSERV;  #hachage associant les noms des serveurs à leur adresse IP sous la forme "AdresseIP" =>["AdresseIP","Nom","AdresseMAC"]
    our $IPnbr = 0;
    our $PingTimeout = 0.05;
    # Variable pour Log4Perl
    our $Logger;
    our $Log4PerlCfg = q (
    log4perl.logger.LMSCorp = INFO, ScreenApp, FicLog
    #log4perl.logger.LMSCorp = DEBUG, ScreenApp, FicLog
    log4perl.appender.ScreenApp          = Log::Log4perl::Appender::Screen
    log4perl.appender.ScreenApp.stderr   = 1
    log4perl.appender.ScreenApp.layout   = PatternLayout
    log4perl.appender.ScreenApp.layout.ConversionPattern = %m%n  
    log4perl.appender.FicLog          = Log::Log4perl::Appender::File
    log4perl.appender.FicLog.filename = sub { Log4Perl_GetLogFile(); };
    log4perl.appender.FicLog.layout   = Log::Log4perl::Layout::SimpleLayout
    );
    # Fichier de configuration
    our %Config;
    #-------------------------------------------------------------------------------
    # Renvoie le nom du fichier log pour Log4Perl
    #-------------------------------------------------------------------------------
    sub Log4Perl_GetLogFile() { return "$PRG_NOM.log"; }
    sub getPING($) {
     my $i = 1;
     my ($SubNet) = @_[0];
     $Logger->info("Traitement du sous-reseau : $SubNet");
     #my %Resultat;
     open(FIC, ">ping.txt");
     while ($i<=254) {
      $AdresseIP=($SubNet.$i);
      my $Ping = Net::Ping->new("icmp", $PingTimeout);
      print FIC "\n****************** Tentative de ping sur $AdresseIP ******************\n";
      if ($Ping->ping($AdresseIP))
      {
       print FIC "$_";
       $adrIP[$IPnbr]=$AdresseIP;
       $Logger->info("Adresse IP $adrIP[$IPnbr] valide !");
       $IPnbr++;
      }
      $i++;
     }
     close(FIC);
     return(@adrIP);
    }
    sub getNOM($) {
     open(FIC2, ">nbtstat.txt");
     foreach $AdresseIP (@_) 
     {
      my $OK=0;
      print "\n****************** Interrogation de $AdresseIP ******************\n";
      open(NBTSTAT, "NBTStat -a $AdresseIP|");
      while(<NBTSTAT>)
      { 
       next if ($OK==1);
       if (/UNIQUE/)  
       {
        $OK=1;
        s/[ \s|<]+/:/g;
        my @Split=split(/:/,$_);
        $nomSERV{"$AdresseIP"} = ["$AdresseIP","$Split[1]"]; 
       }
       next if ($OK==1);
       $nomSERV{"$AdresseIP"} = ["$AdresseIP","_NoName_"];
      }
      print FIC2 "Serveur $AdresseIP : ";
      print FIC2 "$nomSERV{$AdresseIP}[1]\n";
      close(NBSTAT);
     }
     close(FIC2);
     return %nomSERV;
    }
    sub Syntaxe()
    {
     my $Syntaxe = <<__EOT__;
    -------------------------------------------------------------------------------
    $PRG_NOM v$PRG_VERSION - $PRG_DATE
    $PRG_DESCRIPTIF
    Parametres:
     
      [-h]    Cet ecran d'aide
      -c      Fichier de configuration
    __EOT__
      $Logger->error($Syntaxe);
     exit 1;
    }
    #-------------------------------------------------------------------------------
    # Gestion des parametres du script
    #-------------------------------------------------------------------------------
    my %LG_CMD;
    getopts("hc:", \%LG_CMD);
    # Initialisation du logging
    Log::Log4perl::init(\$Log4PerlCfg);
    $Logger = get_logger("LMSCorp");
    Syntaxe() if (exists $LG_CMD{'h'});
    Syntaxe() if (!exists $LG_CMD{'c'});
    # Chargement du fichier de configuration
    %Config = %{ChargerFichierConfiguration($LG_CMD{'c'})};
    my @SubNet = ("192.168.1.","192.168.2.");
    my @ref_adrIP = \@adrIP;     #reference vers le tableau adrIP pour la recuperation du resultat de getPING
    my %ref_nomSERV = \%nomSERV;    #reference vers le hachage nomSERV pour la recuperation du resultat de getNOM
    foreach $SubNet (@SubNet)
    {#on passe le sous réseau et la référence en paramètres pour les pings et on récupère la liste des IP 'valides'
     @ref_adrIP = &getPING($SubNet); }
    %ref_nomSERV = &getNOM(@ref_adrIP);
    my $NbElem = @adrIP;
    print "\nLe tableau \@adrIP contient $NbElem elements\n";
    foreach $cle (keys (%nomSERV))
    {
     print "$cle : @{ $nomSERV{$cle} }";
     print "\n";
    }
    exit 0;
    J'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Socket; 
    my $hostname = gethostbyaddr($AdresseIP, af_inet);
    ...mais en vain (ça ne me renvoit rien du tout, même pour les serveurs windows...)

    Donc si vous avez des indications à me fournir, je suis preneur !
    Encore merci de votre attention !

  2. #2
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    comme ca, rapidement, je peux déjà te dire qu'un "ping -a adresse_ip" sous windows te renvoie le nom de la machine. Maintenant, il doit certainement y avoir plus propre mais j'ai pas encore regardé....

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Par défaut
    Ah oui j'ai oublié de préciser que les "ping -a" ne m'aidaient pas non plus ...

    Exemple avec 2 serveurs Linux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    C:\test\Supervision\Reseau>ping -n 1 -a 192.168.2.2
    Envoi d'une requête 'ping' sur 172.18.2.2 avec 32 octets de données :
    Réponse de 172.18.2.2 : octets=32 temps<10 ms TTL=64
    ...
     
    C:\test\Supervision\Reseau>ping -n 1 -a 192.168.1.61
    Envoi d'une requête 'ping' sur 172.18.1.61 avec 32 octets de données :
    Réponse de 172.18.1.61 : octets=32 temps<10 ms TTL=64
    ...
    Je n'arrive pas à obtenir le nom de la machine ... sinon dans le pire des cas ce que je pourrais faire c'est une appli qui ira chercher dans la base de donnée les machines ayant un attribut "NomMachine" fixé à "_NoName_" (cf code du script) et ainsi proposer une mise à jour du DNS en conséquence ... mais ce qui me gêne c'est que ce n'est pas le but de mon projet

    Personne n'a une idée ?

Discussions similaires

  1. Récupérer le full hostname d'un serveur linux
    Par zelycorn dans le forum Débuter
    Réponses: 1
    Dernier message: 08/06/2011, 09h14
  2. [BPW] Lire une partition Linux sous DOS
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 16/11/2010, 20h53
  3. [9i linux] Démarrer le serveur Oracle sous Linux ?
    Par webtheque dans le forum Oracle
    Réponses: 108
    Dernier message: 22/11/2009, 13h34
  4. Serveur/Client sous linux
    Par black is beautiful dans le forum Réseau
    Réponses: 2
    Dernier message: 13/08/2004, 13h34
  5. Sécuriser son serveur Apache sous Linux
    Par rolkA dans le forum Sécurité
    Réponses: 6
    Dernier message: 01/12/2003, 15h16

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