Jetzt registrieren!
Passwort vergessen?



 
 
 
--------------- --------------- ---------------


Rückgabe



Hallo,

my $ipadresse;
open(FIRE, "d:/syslog.txt");
while(<FIRE>)
{
if (m/IP address is/)
{
$_ =~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
print "\n$1"; # OK, wird angezeigt
$ipadresse=$1;
}
}
close(FIRE);
print "Aktuelle IP-Adresse:\t $ipadresse";
# diese Zeile wird nicht angezeigt ?

Nur letzte Übereinstimmung brauche ich.
Wo liegt mein Denkfehler?

Danke Ralf
> Artikelbaum anzeigen

Re: Rückgabe


Hi Ralf (ich bin's schon wieder),

kann es sein, daß evtl. eine Zeile zwar den ersten Test betsteht (--> m/IP address is/), aber beim 2. Mal, wo die IP-Adr. gesucht wird, durchfällt? In der Ausgabe (--> print "\n$1";) würden dann Leerzeilen erscheinen, weil der 'Nicht-Match' dazu führt, daß $1 geleert wird...

Immerhin eine Möglichkeit. Vielleicht solltest du die Zuweisung nur dann machen, wenn $1 einen Inhalt hat.

Gruß
bernhard

Re^2: Rückgabe


Hi Bernhard (ich bin's schon wieder),
kann es sein, daß evtl. eine Zeile zwar den ersten Test
betsteht (--> m/IP address is/), aber beim 2. Mal, wo die
IP-Adr. gesucht wird, durchfällt? In der Ausgabe (--> print
"\n$1";) würden dann Leerzeilen erscheinen, weil der
'Nicht-Match' dazu führt, daß $1 geleert wird...
Leider nein. Ich gebe zum Test die gefunden IP's in eine
KONTROLL_DATEI aus. Das funktioniert.

Ich habe die Logdatei von Hand editiert:
nur 3 Zeilen mit denselben Inhalt. syslog.txt :

2002.14.11-18:32:54 bingo.network.local, PPP: A: local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE
2002.14.11-18:32:54 bingo.network.local, PPP: A: local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE
2002.14.11-18:32:54 bingo.network.local, PPP: A: local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE

(Zeilenumbruch... Hallo wer-weiss-was,
kann man das Fenster nicht größer machen?)

****************************************************
#!/usr/bin/perl -w
# Anfängerprogramm ! noch nicht fertig
# Für alle Bintecrouter mit
# Flatrate (Aktivierung der Syslog)

# Ziel des Programms:
# Feststellen der IP die der ISP zur
# Verfügung stellt, um Sie dann in einer neuen HTML-Seite zu
# hinterlegen.
# Somit kann man eine Verbindung zu seinen System aufbauen zu
# können. (Terminal, Web, u.s.w. )

# Aktivierung der Onlineverbindung
# (könnte auch eine andere IP sein
system("ping -n 1 -w 1 200.200.200.200");
# (soll später durch eigenes PING-Programm
# ersetzt werden )

# So sieht das DOS-Fenster aus:
# Starte Syslogdaemon Logfile nach D:\syslog.txt
# Syslogd 1.1
# Copyright (c) 2000, Herbert Hanewinkel, Neuried
# [E-Mail-Adresse entfernt]
# www.heha.cjb.net
# syslogd: listening on port 514

----------------------------------------------------------
# Die oberen Zeilen könnte man sich auch, durch den
# Einsatz von SNMP sparen wenn.

# Programmidee: (soweit bin ich noch nicht)
# SNMP-Abfrage: bist du Online ?
# ifOperStatus=1.3.6.1.2.1.2.2.1.8

# SNMP-Abfrage: welche IP hast du?
# internetadresse=1.3.6.1.4.1.272.4.3.10.1.10.10001.0
----------------------------------------------------------

# öffnen der Datei syslog.txt
open(KONTROLLE_DATEI, '>d:\neue_ip.txt');
open(FIRE, "d:/syslog.txt");

while(<FIRE>)
{
if (m/IP address is/) # abgewiesen?
{
$_ =~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
print "\n$1";
print KONTROLLE_DATEI "$1\n";
}
}
close(FIRE);
close(KONTROLLE_DATEI);
print "\n*************\n";
print "Aktuelle IP-Adresse:\t$1";

# Nun erfolgt die Einbindung der IP-Adresse
# in eine HTML-Seite.

# Versende autom. (per FTP) die HTML-Seite, wenn sich die IP-
# Adresse geändert hat.
****************************************************

Gruß
ralf

Re^3: Rückgabe


Hi Ralf,

ich mußte selbst ein wenig in meiner Erinnerung kratzen, aber die Lösung liegt wohl im 'dynamic scope' der Variablen $1 etc.

Im Camelbook findet sich die folgende Erklärung:

$`, $&, $', and the numbered variables are global variables implicitly localized to the enclosing dynamic scope. They last until the next successful pattern match or the end of the current scope, whichever comes first. More on this later, in a different scope.

--> d.h. außerhalb des akutellen 'dynamic scopes' (in diesem Fall der if-Block) ist die Variable $1 nicht mehr definiert, und deswegen LEER!

Macht man es dagegen so, klappts auch wieder.

#! /soft/perl5/bin/perl
# (Achtung mein Perl-Pfad ist anders)
#
# ich hole mir die Daten nicht aus einer Kontrolldatei, sondern
# aus der DATA-Section des Scripts
while(<DATA>)
{
if (m/IP address is/) # abgewiesen?
{
$_ =~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
$lastfoundip = $1;
}
}
print "IP-Adresse:\t$lastfoundip\n";
__DATA__
local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE
local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE
local IP address is 212.144.111.231, remote is 145.253.1.45<-ENDE


(die Zeilenbreite ist wirklich ein Problem, ich habe auch ein wenig abgeschnitten).

In dieser Variante funktionierts bei mir.

Gruß
bernhard

Du kannst auf diesen Artikel nicht antworten.

Dieser Artikelbaum ist im Archiv des Experten-Forums von wer-weiss-was zum Thema "Perl & CGI" archiviert. Es handelt sich um keine aktuelle Diskussion, daher kann auf die Artikel nicht mehr geantwortet werden.

Seite bei ... merken:
del.icio.us digg it facebook tausendreporter yigg it twitter alltagz google Mister Wong oneview Webnews yahoo linkarena coComment Lieblnk als Bookmark einfügen
Stelle deine Frage: