Perl und IP-Adresse ermitteln
Hallo zusammen, bin gerade dabei, meine ersten Schritte in Perl zu machen, schon stoße ich auf die ersten Probleme: ich möchte mittels system() die dynamische IP-Adresse meines ppp0-Interfaces ermitteln und an eine Variable übergeben, die ich dann hinterher auf einem LCD-Display am Linux-Router ausgeben kann. Die Ausgabe anderer Infos auf dem Display funktioniert schon, aber wenn ich mittels my $remoteip = ""; $remoteip = system(....); print $remoteip ."\n"; die IP-Adresse ermittele, wird mir immer 0 ausgegeben (hier auf dem noch angeschlossenen Monitor). Irgendwo habe ich wohl noch arge Probleme mit den Ticks / Backticks / " usw. Hat jemand schon ähnliches (für Monitorausgabe reicht) und kann es mir per Drag & Drop in eine Antwort-Mail einbinden? Ich bin natürlich auch offen für andere Lösungswege ;) Danke und Gruß Thomas -- ./no_signature
Moin Moin,
From: Thomas Schürmann
Die Ausgabe anderer Infos auf dem Display funktioniert schon, aber wenn ich mittels
my $remoteip = ""; $remoteip = system(....); print $remoteip ."\n"; die IP-Adresse ermittele, wird mir immer 0 ausgegeben (hier auf dem noch angeschlossenen Monitor).
system gibt immer null bei Erfolg zurück, wenn Du die Ausgaben eines Shell-aufrufs haben willst kannst Du das einfacher mit Backsticks machen: -----schnipp untestet--------- $out = `ls -l /`; print $out; --------------------------------- Das ist alles, vielleicht gibt exec die Ausgabe einfangen: IMHO haben schon einige ihre IP haben wollen, google mal durch archiv :) Ciao Andre
Hallo Andre, Andre Heine wrote:
From: Thomas Schürmann
system gibt immer null bei Erfolg zurück, wenn Du die Ausgaben eines Shell-aufrufs haben willst kannst Du das einfacher mit Backsticks machen:
-----schnipp untestet--------- $out = `ls -l /`; print $out; ---------------------------------
Das ist alles, vielleicht gibt exec die Ausgabe einfangen:
IMHO haben schon einige ihre IP haben wollen, google mal durch archiv :)
Wie ich das in einem Shell-Skript mache, weiß ich ja. Das habe ich ja von hier ;). Ich bekomme ja auch eine 0 zurück. Aber ich glaube, dein Tipp hat meinen Perl-Horizont etwas erweitert. Werde heute abend @home mal den Inhalt der () des system()-Aufrufs wie von dir geschildert einsetzen. Danke Thomas -- ./no_signature
Thomas Schürmann schrieb am Mon, May 06, 2002 at 09:38:01AM +0200:
ich möchte mittels system() die dynamische IP-Adresse meines ppp0-Interfaces ermitteln und an eine Variable übergeben, die ich dann hinterher auf einem LCD-Display am Linux-Router ausgeben kann.
Schau mal in die ManPage zum pppd. Dort ist auch irgendwann die Rede von den Variablen $1, $2 usw., die der pppd im zuge des Verbindungsaufbaus zu händeln hat. Eine davon ist Deine "offizielle" IP-Adresse. Die könntest Du z.B. von einem Skript in /etc/ppp/ip-up.local "verwursten" lassen, sprich: In eine Datei schreiben, auf das Display schieben o.ä. Dazu Perl zu verwenden, ähnelt sicherlich ein wenig der Spatzenjagd mit großkalibrigen Langrohrgeschützen...;-) Gruß, Christian -- Christian Schmidt | Germany | christian@siebenbergen.de No HTML Mails, please!! http://lernst.de/zitieren/kriegst.de/antworten/
Hallo Christian, Christian Schmidt wrote:
Thomas Schürmann schrieb am Mon, May 06, 2002 at 09:38:01AM +0200:
ich möchte mittels system() die dynamische IP-Adresse meines ppp0-Interfaces ermitteln und an eine Variable übergeben, die ich dann hinterher auf einem LCD-Display am Linux-Router ausgeben kann. .... Dazu Perl zu verwenden, ähnelt sicherlich ein wenig der Spatzenjagd mit großkalibrigen Langrohrgeschützen...;-)
Wenn ich mit diesem Perl-Skript _nur_ die IP-Adresse erhalten und ausgeben möchte, hast du sicherlich Recht. Auf dem LCD- Display (das von kernelconcepts.de) werden aber auch noch weitere Informationen und Menüdarstellungen für die Steuerung des Routers (über die 4 Tasten des Displays) per Perl erstellt. In diesem Zusammenhang sieht es dann etwas anders aus. BTW: Vielen Dank an _alle_ die mir geantwortet haben (auch per PM). Ich habe es gestern abend hinbekommen und wieder was dazu gelernt. Dabei habe ich die Lösung mit dem "grep inet addr" genommen, die aber wegen meines eingedeutschten ifconfig erst funktionierte, nachdem ich nach "inet Adr" gegreppt habe. Gruß Thomas -- ./no_signature
Hallo, On Mon, 06 May 2002, Thomas Schürmann wrote:
my $remoteip = ""; $remoteip = system(....); print $remoteip ."\n";
==== #!/usr/local/bin/perl -w use strict; my (@ifconfigout, $localip, $remoteip); my $iface = "ppp0"; # bitte anpassen, bei ippp* und eth* ggfs. die REs @ifconfigout = split('\n',`/sbin/ifconfig $iface`); ( $localip = $ifconfigout[1] ) =~ s/.*addr:([0-9\.]+).*/$1/m; ( $remoteip = $ifconfigout[1] ) =~ s/.*P-t-P:([0-9\.]+).*/$1/m; print "$localip\n$remoteip\n"; ==== -dnh -- When computers emit smoke, it means they've chosen a new Pope. Unfortunately, they invariably choose the wrong one and immediately get condemned to nonfunctionality for heresy. [Anthony DeBoer in the SDM]
Moin,
* Thomas Schürmann
my $remoteip = ""; $remoteip = system(....); print $remoteip ."\n";
die IP-Adresse ermittele, wird mir immer 0 ausgegeben (hier auf dem noch angeschlossenen Monitor).
Irgendwo habe ich wohl noch arge Probleme mit den Ticks / Backticks / " usw. Eine Alternative zu den Backticks is open(), damit kann man auch Prozesse 'öffnen'. Ist ganz gelungen, ich find's manchmal anschaulicher als Backticks.
Thorsten -- Question Authority!
participants (5)
-
Andre Heine
-
Christian Schmidt
-
David Haller
-
Thomas Schürmann
-
Thorsten Haude