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 :

probleme d'analyse d'une sortie de smbclient


Sujet :

Programmation et administration système Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut probleme d'analyse d'une sortie de smbclient
    Bonjour a tous,
    j'ai le niveau 00 en perl et je viens d'heriter d'un script de sauvegarde de stations windows. Ce script fonctionnait correctement sur une red hat 7 mais passé sous Debian etch ca ne fonctionne plus (a savoir il detecte toutes les stations comme etant sous W98 et non la plupart sous qui sont sous XP...)
    Apparement c'est la sortie de smbclient qui n'est pas correctement interpretée...
    Je joint la partie concernée du script s'il y a quelques ames charitables qui voudrait bien y jeter un oeil.
    Un grand merci par avance!
    alf
    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
     
    $argsmbclt="smbclient -L ".$STATION." -U administrateur%password -W domain |";	
    		#print("On lance smbclient\n");
    		open(SMB,$argsmbclt);
    		#print("Fin de smbclient\n");
    		#print("Début Analyse partage\n");
    		$k=0;
    		$XP=0;
    		while (<SMB>)
    		{
    			if (($_=~ m/Windows/))
    			{
    				$XP=1;
    				#print("C est un poste WXP $k\n");
    			}
    			$k++;
    			#print ("$k\n");
    			if ($k>=4)
    			{
    			if ($_=~ m/Server/)
    			{
    				#print(" on a trouvé le mot server donc fin de la boucle\n");
    				last;
    			}
    			else
    			{	
    				#print("ligne $k pertinente donc analysée\n");	
    				#print(" PARTAGE --> @tempo1[0]\n $_");
    				if (($_=~ m/C-ST/)||($_=~ m/CST/))
    				{	
    					@tempo1=split();
    					#print(" mise en tableau effectuée!\n");	
    					$PARTAGE=@tempo1[0];
    					$tabpartage{$STATION}=$PARTAGE;
    					if ($XP==1)
    					{	
    						$poste="WXP";
    						$XP=0;
    					}
    					else
    					{	
    						$poste="W98";
    					}
    					last;
    					#print(" Partage ok --> @tempo1[0\n");
    					#print("On peut sortir de la boucle\n");
    				}
    			} 
    		}
    		}
    		#print("Fermeture descripteur SMB\n");
    		close (SMB);
    		#print("descripteur SMB fermé\n");
    		print("$ip $poste --> $STATION --> $PARTAGE\n");
    ps: a quoi sert la variable $k er pourquoi doit elle etre >=4???

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Hello,

    je te suggère pour commencer 2 choses :

    1) met le code que tu nous montres entre les balises # (voir icône lorsque tu éditeras ton texte), ça rendra ton code nettement plus clair à lire et à comprendre.

    2) à la ligne où tu ouvres le handle SMB, remplace par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     open(SMB,$argsmbclt) or die ("erreur ouverture de $argsmbclt : $!\n");
    Ca te permettra au moins de voir si déjà cette partie là fonctionne...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ok pour la balise et le or die est ajouté.
    cette partie est apparement bien prise en charge mais le resultat est toujours le meme sortie du :
    print("$ip $poste --> $STATION --> $PARTAGE\n");
    a savoir: W98 --> la_bonne_station --> le_bon_partage
    d'autres idées?
    en tout cas merci pour ta réactivité!

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    T'est-il possible de faire à la main tout le processus de ton programme en prenant juste une ou deux machines Windows de ton parc ?

    Il serait intéressant notamment de lancer ton appli smbclient avec ses paramètres et voir ce qu'elle t'affiche en retour dans la console et ainsi t'assurer que les valeurs qu'elle te retourne sont bien celles à quoi s'attend ton script Perl.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    en effet la sortie n'est pas la meme sur l'ancienne machine ou cela fonctionne et sur la nouvelle:
    le smbclient -L .... donne
    sur l'ancienne machine:
    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
    added interface ip=192.168.103.3 bcast=192.168.103.255 nmask=255.255.255.0
    Domain=[domain] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
     
            Sharename      Type      Comment
            ---------      ----      -------
            IPC$           IPC       IPC distant
            ADMIN$         Disk      Administration � distance
            C$             Disk      Partage par d�faut
            C-ST49         Disk      Sauvegarde
     
            Server               Comment
            ---------            -------
     
            Workgroup            Master
            ---------            -------
    et sur la nouvelle machine ou ca marche pas:
    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
    Domain=[domain] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
     
            Sharename       Type      Comment
            ---------       ----      -------
            IPC$            IPC       IPC distant
            ADMIN$          Disk      Administration à distance
            C$              Disk      Partage par défaut
            C-ST49          Disk      Sauvegarde
    Domain=[domain] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
     
            Server               Comment
            ---------            -------
     
            Workgroup            Master
            ---------            -------
    Avec mon niveau 0000 certifié en perl, j'en déduis qu'il ne l'intrepete pas comme il faut au vu des differences de sortie de la commande, mais toi, ca devrait t'aider...
    mais l'analyse des partages elle se fait bien sous XP et 98.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Après de nombreuses recherches... La variable $_ ne prend pas en compte la premiere ligne de la sortie de smbclient, et bien sur c'est la ligne qui indique:
    Domain=[domain] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
    Donc ma variable $XP reste troujours à 0 et mes postes sont toujours interprete comme des postes windows 98...
    Mais alors pourquoi cette ligne est prise en charge sous Redhat et non sous Debian???

Discussions similaires

  1. [9i] Analyse d'une requête pour préparer sa structure de sortie
    Par ypelissier dans le forum Oracle
    Réponses: 8
    Dernier message: 15/01/2014, 14h35
  2. Probleme d'analyse d'une application 3 tiers en VB.NET
    Par wallash dans le forum Windows Forms
    Réponses: 0
    Dernier message: 26/11/2008, 16h13
  3. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10
  4. Réponses: 13
    Dernier message: 14/06/2003, 22h15
  5. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36

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