Bonjour,
Je m'excuse d'avance si ce problème a déja était résolu, mais n'ayant rien trouver lors d'une recherche sur les postes (peut être que j'ai dut mal taper ma recherche) je vous le pose.
Ayant débuté dans le langage PERL il y a 2 semaine, je suis entraint d'écrire un scripte PERL (sur windows), à partir d'un scripte Shell Unix, pour récupéré des informations SNMP. Cette partie de récupération marche bien. Or a un moment de mon scripte je doit faire appel a une commande system pour la vérification de la résolution DNS.
Pour ce la j'utilise $stk = ` nslookup -norecurse $Hostname $Hostname`; pour executé la commande . Donc le résultat se stocke dans la variable $stk. Jusque l'à tout est normal, mais lorsqu'il y a des erreurs dans la commande systeme (hôte non trouvé par le DNS, serveur DNS incorrecte ...) les erreurs qui s'affiche avec des *** sur l'invite de commande ne sont pas récupéré dans la variable $stk.
Exemple de message d'erreur sur cmd :
J'aimerais savoir si il serais possible de récupéré ces erreurs, car je doit vérifier que le le serveur DNS marche dans tous les cas possibles donc je doit vérifié si certain mots d'erreur apparaissent.*** Can't find server address ...
*** .... : Non-existent domain
Voici le script que j'utilise :
En résultat je trouve toujours " Erreur inconnu sur le DNS ... " et " Probleme ans la resolution DNS" car aucun des bouts de phrase est trouvé.
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 my $Hostname = ' '; #mettre un nom d'hôte #envoi la commande systeme et récupére le resultat my $stk=`nslookup -norecurse $Hostname $Hostname`; my $stk1 =$?; my $not_resp = 0; #compteur d'erreur if($stk1 > 0){printf("\n CRITICAL : $Hostname[$i] DNS polling failed \n"); exit 1;} else{ # Recherche des bouts de phrases pour récupéré les erreurs $stk =~ s/\n//g; # mise en place de la sortie sur une seul ligne if($stk =~ /Specified server is not available/ || $stk =~ /timed-out/){ printf("\n Le DNS $Hostname[$i] a un temps de reponse trop eleve \n"); $not_resp++;} elsif($stk =~ /Can\'t find server address'/){ # le ' apres address n'existe pas mais j'ai dut le mettre car sinon tous le reste devenait rouge sur le post printf("\n Adresse serveur $Hostname[$i] inutilisable \n"); $not_resp++;} elsif($stk =~ /Name:/){ printf("Le DNS $Hostname[$i] répond correctement \n");} elsif($stk =~ /Non-existent domain/){ printf("\n Le DNS $Hostname[$i] repond correctement \n");} elsif($stk =~ /No response form server/){ printf("\n Le DNS $Hostname[$i] répond No response \n"); $not_resp++;} elsif($stk =~ /No records/){ printf("\n Le DNS $Hostname[$i] répond No records \n"); $not_resp++;} elsif($stk =~ /Connection refused/){ printf("\n Le DNS $Hostname[$i] répond Connection refused \n"); $not_resp++;} elsif($stk =~ /Server failed/){ printf("\n Le DNS $Hostname[$i] répond Server failed \n"); $not_resp++;} elsif($stk =~ /Refused/){ printf("\n Le DNS $Hostname[$i] répond Refused \n"); $not_resp++;} elsif($stk =~ /Format error/){ printf("\n Le DNS $Hostname[$i] répond Format error \n"); $not_resp++;} else{ printf("\n Erreur inconnu sur le DNS $Hostname[$i] : $stk \n"); $not_resp++;} } if($not_resp > 0){ printf("\nProbleme dans la resolution DNS\n");} else{ printf( "\n $Hostname DNS polling successfull \n"); }
Merci d'avance de votre aide.
Partager