Rückgabe
(Autor: R a l f К а s t l, Frage gestellt am Fr, 15. Nov 2002)
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
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
(Autor: Β е r n һ a r d B r o ѕ d a, Antwort nach 3 h, 11 Min)
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
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
(Autor: R а l f К a s t l, Antwort nach 7 h, 39 Min)
Hi Bernhard (ich bin's schon wieder),
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
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 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...
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
(Autor: В е r n һ a r d B r o ѕ d а, Antwort nach 2 Tagen, 23 h, 47 Min)
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.
(die Zeilenbreite ist wirklich ein Problem, ich habe auch ein wenig abgeschnitten).
In dieser Variante funktionierts bei mir.
Gruß
bernhard
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.
Folgende Artikel könnten Dich auch interessieren:
Reihenfolge ?Probleme Anschluss WLAN-Print-Server
welche IP-Adresse hat mein Print-Server?
Eigene IP-Adresse herausfinden?
IP-Adresse mit einem Java Script ?
MS-DOS Batch
IP-Adresse im Gästebuch!
IP-Adresse im Gästebuch
Bitte um Hilfe
NEU: 'book about' bei google
Netzwerkdrucker funktioniert nicht
perl und Access
vorheriger Artikelbaum
(autom. FTP)
(Logfile Auswertung)
nächster Artikelbaum















