Schrift
[thread]4403[/thread]

snmp Abfrage scheitert an fehlerhafter regex ?



<< >> 9 Einträge, 1 Seite
ypswes
 2006-02-08 13:44
#37095 #37095
User since
2006-02-01
6 Artikel
BenutzerIn
[default_avatar]
Hallo, ..

ich habe folgenden code, und komme mit meinem Anfaengerwissen nicht weiter:

Code: (dl )
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
#!/usr/bin/perl -w
#
#    snmpcfg.pl -- a script to perform mass configuration changes to
#                  a list of routers using SNMP.
#
#
# Set behaviour
$workingdir="/home/nms";
$snmprw="ORARW";
$tftpsrv="172.25.1.1";
#
#
$rtrlist="$workingdir/RTR_LIST";
open (RTR, "$rtrlist") || die "Can't open $rtrlist file";
open (LOG, ">$workingdir/RESULT") || die "Can't open $workingdir/RESULT file";
#
while (<RTR>) {
 chomp($rtr="$_");
 print LOG "=================================== \n";
 print "=================================== \n";
 $snmpset="/usr/local/bin/snmpset -t 20 -r 2 &–v1 &–c $snmprw $rtr ";
 chomp($result=`$snmpset .1.3.6.1.4.1.9.2.1.50.$tftpsrv s SNMPCFG`);
 if ($result=~/.+ = "(.+)"$/ ) {
           if( $1 eq SNMPCFG ) {
               print LOG "$rtr - Update Successful\n";
               print "$rtr - Update Successful\n";
               chomp($result=`$snmpset .1.3.6.1.4.1.9.2.1.54.0 i 1`);
               if ($result=~/.+ = (.+)$/ ) {
                         if( $1 == 1 ) {
                           print LOG "$rtr - Wr Mem Successful\n";
                           print "$rtr - Wr Mem Successful\n";
                         }
                         else {
                           print LOG "$rtr - Wr Mem Failed\n";
                           print "$rtr - Wr Mem Failed\n";
                         }
               }
               else {
                 print LOG "$rtr - Wr Mem Failed\n";
                 print "$rtr - Wr Mem Failed\n";
               }
           }
           else {
             print LOG "$rtr - Update Failed\n";
             print "$rtr - Update Failed\n";
           }
 }
 else {
   print LOG "$rtr - Update Failed\n";
   print "$rtr - Update Failed\n";
 }
}


Ich bekomme die immer die Fehlermeldung : update failed. Die snmp communities und tftp server etc stimmen.
Als output von $result bekomme ich

SNMPv2-SMI::enterprises.9.2.1.50.172.25.1.1= STRING: "SNMPCFG"
SNMPv2-SMI::enterprises.9.2.1.54.0 = INTEGER: 1

.
Und das scheint nicht mit den regex in


Code: (dl )
          if ($result=~/.+ = "(.+)"$/ )                            


zu harmonieren.
Ich weiss hier leider nicht weiter, kann mir hier jemand weiter helfen ?
Danke
Dubu
 2006-02-08 16:28
#37096 #37096
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn dein zitierter Output stimmt, dann passt die Regex auch auf keine der Zeilen. Du verlangst "irgendwas, dann Leerzeichen, Gleichheitszeichen, Leerzeichen, Anfuehrungszeichen, wieder irgendwas, Anfuehrungszeichen, Zeilenende". Das findet sich so aber nicht in deinem Output. Einerseits steht da immer noch ein "STRING:" oder ein "INTEGER:" zwischen dem Gleichheitszeichen und dem, was du suchst, andererseits fehlt in der ersten Zeile auch das Leerzeichen vor dem Gleichheitszeichen.
Worauf moechtest du denn genau pruefen?
ypswes
 2006-02-09 12:49
#37097 #37097
User since
2006-02-01
6 Artikel
BenutzerIn
[default_avatar]
Hi,

das erste $result was ich bekomme sieht so aus:

SNMPv2-SMI::enterprises.9.2.1.50.172.25.1.1= STRING: "SNMPCFG"

Da reicht es wenn zum Beispiel    irgendwas = STRING: "irgendwas" geprueft werden wuerde.

Beim zweiten result haette ich gerne eine Pruefung auf

INTEGER:1

muss vorkommen.

Danke fuer Deine Hilfe.

Gruss
Yves
renee
 2006-02-09 13:05
#37098 #37098
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Probier mal:
Code: (dl )
1
2
3
4
my $line = q~SNMPv2-SMI::enterprises.9.2.1.50.172.25.1.1= STRING: "SNMPCFG"~;
if($line =~ /=\s*(STRING:\s*".*?")|(INTEGER:\s*\d+)$/){
print "yes\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2006-02-09 13:48
#37099 #37099
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@renee: Die beiden Regexen sind für unterschiedliche if-Anweisungen.
renee
 2006-02-10 00:18
#37100 #37100
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Na, dann einfach aufteilen:
Code: (dl )
1
2
3
4
5
6
7
8
my $line = q~SNMPv2-SMI::enterprises.9.2.1.50.172.25.1.1= STRING: "SNMPCFG"~;
if($line =~ /=\s*STRING:\s*"(.*?)"$/){
print "Zeile enthält String: $1\n";
}

if($line =~ /=\s*INTEGER:\s*(\d+)$/){
print "Zeile enthält Integer: $1\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ypswes
 2006-02-10 10:17
#37101 #37101
User since
2006-02-01
6 Artikel
BenutzerIn
[default_avatar]
Hi,

auf die Gefahr hin das es was zu lachen gibt :

Ich habs nun so gemacht:

Code: (dl )
1
2
3
4
5
6
7
8
chomp($result= `$BIN/snmpset $OP -c $community $switch $MIB.1.0 s $TFTPSERVER`);

if ($result=~ / = STRING: "Ip Adresse"/) {
print "update klappt\n";
}
else {
print "update klappt nicht \n";
}


Zumindest geht es. Danke fuer Eure Hilfe, ich habe das Gefuehl es ist keine gute Idee mit Scripten zu arbeiten die man eigentlich nicht versteht. Und regexe erscheinen mir ziemlich schwierig. Kann mir jemand eine gute Seite empfehlen.

Gruss
Ypswes
renee
 2006-02-10 10:29
#37102 #37102
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es gibt bei sowas nichts zu lachen. Wenn es so klappt, dann ist es erstmal ok.

Ein paar Empfehlungen zum Thema RegEx:
perlre
perlretut
perlrequick

http://www.regenechsen.de
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-02-10 11:40
#37103 #37103
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier noch ein Link zum Thema RegEx: http://www.heise.de/ix/artikel/1998/11/178/
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 9 Einträge, 1 Seite



View all threads created 2006-02-08 13:44.