Perl/Funktionen für Informationen aus Konfigurationsdateien

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[Bearbeiten] Allgemeines zu diesen Funktionen

Die hier versammelten Funktionen dienen dazu, Einträge aus System-Konfigurationsdateien zu ermitteln. Es handelt sich dabei ausschließlich um Konfigurationsdaten von Unix-Systemen. Der Vorteil der hier beschriebenen Funktionen gegenüber dem direkten Auslesen jener Dateien ist, dass sie rechnerunabhängig sind, d.h. die Befehle funktionieren auch dann, wenn ein Unix-System anders als im Normalfall konfiguriert ist und die entsprechenden Dateien an anderen Orten liegen.

Die relevanten Konfigurationsdateien werden im folgenden kurz vorgestellt. Die Pfadnamen entsprechen der üblichen Ablage.

[Bearbeiten] Konfigurationsdatei: /etc/group

In dieser Datei werden Berechtigungsgruppen und deren Mitglieder gespeichert. Eine Berechtigungsgruppe kann bestimmte Rechte an Dateien und Verzeichnissen besitzen, die einem ihrer Mitglieder gehören. Neben Einträgen für "menschliche" Berechtigungsgruppen enthält die Datei auch solche für reservierte, rechnereigene Berechtigungsgruppen, wie beispielsweise mail, bin oder tty. Passwörter sind in dieser Datei nur verschlüsselt gespeichert.
Typische Daten (Beispiel):

  root  x  0    root
  bin   x  1    root bin daemon
  sys   x  101  root bin sys

Jede Zeile der Datei enthält den Namen einer Berechtigungsgruppe, dahinter (verschlüsselt) deren Passwort, dahinter die Gruppennummer (GID) und dahinter die Liste der Mitglieder der Gruppe.
Funktionen zu dieser Datei sind endgrent getgrent getgrgid getgrnam setgrent
Im Beispiel zur Funktion getgrent wird gezeigt, wie Sie die komplette Datei /etc/groups ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] Konfigurationsdatei: /etc/hosts

In dieser Datei werden IP-Adressen und Domain-Namen oder Rechnernamen zugeordnet, die der Rechner selber auflösen muss.
Typische Daten (Beispiel):

  127.0.0.1       localhost
  192.168.10.101  sonne.galaxis.de     sonne
  192.168.85.1    zeus.edu.saxedu.de   zeus

Jede Zeile der Datei enthält eine IP-Adresse, dahinter den offiziellen Domain-Namen und dahinter wahlweise den internen Rechnernamen, jeweils durch Leerzeichen oder Tabulatoren getrennt. Hinter dem internen Rechnernamen kann wahlweise auch noch ein Aliasname folgen.
Funktionen zu dieser Datei sind endhostent gethostbyaddr gethostbyname gethostent sethostent
Im Beispiel zur Funktion gethostent wird gezeigt, wie Sie die komplette Datei /etc/hosts ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] Konfigurationsdatei: /etc/networks

In dieser Datei werden Netzwerknamen und zugehörige IP-Adressen einander zugeordnet. Dabei wird oft auch der Adresstyp und die Netznummer angegeben.
Typische Daten (Beispiel):

  loopback  127.0.0.0  2  2130706432

Jede Zeile der Datei enthält einen Netzwerknamen, die zugehörige Netzwerk-IP-Adresse, den Adresstyp und die Netznummer.
Funktionen zu dieser Datei sind endnetent getnetbyaddr getnetbyname getnetent setnetent
Im Beispiel zur Funktion getnetent wird gezeigt, wie Sie die komplette Datei /etc/networks ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] Konfigurationsdatei: /etc/passwd

In dieser Datei werden alle wichtigen Daten aller Benutzer gespeichert, die Zugang zum Rechner haben. Dazu gehören z.B. die Benutzernamen, ihre Passwörter, die Benutzernummern (UIDs) und die Heimatverzeichnisse der Anwender. Neben Einträgen für normale Benutzer enthält die Datei auch solche für reservierte Benutzer, wie beispielsweise root (auf emanzipierten Rechnern auch ruth), daemon oder ftp (für den anonymen FTP-Zugang). Passwörter sind in dieser Datei nur verschlüsselt gespeichert.
Typische Daten (Beispiel):

  root      x  0  0    root       /root               /bin/mysh
  bin       x  1  1    bin        /bin                /bin/mysh
  customer  x  29  29  Kunde      /usr/lib/kunde      /bin/mysh

Jede Zeile der Datei enthält den Benutzernamen, das zugehörige Passwort (verschlüsselt), die zugehörige Benutzernummer (UID), die Nummer seiner Berechtigungsgruppe (GID), beschreibende Angaben zum Benutzer, sein Heimatverzeichnis auf dem Rechner, seine Shell (Instanz des Kommando-Interpreters), und gegebenenfalls Angaben zum Verfallsdatum der Gültigkeit des Eintrags.
Funktionen zu dieser Datei sind endpwent getpwent getpwnam getpwuid setpwent
Im Beispiel zur Funktion getpwent wird gezeigt, wie Sie die komplette Datei /etc/passwd ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] Konfigurationsdatei: /etc/protocols

In dieser Datei sind die Protokollnamen und Protokollnummern der Transportprotokolle eingetragen, die das System unterstützt.
Typische Daten (Beispiel):

  ip    IP    0
  icmp  ICMP  1
  igmp  IGMP  2
  ggp   GGP   3
  tcp   TCP   6

Jede Zeile der Datei enthält den Namen des Transportprotokolls, die Protokollnummer und den Aliasnamen des Protokolls.
Funktionen zu dieser Datei sind endprotoent getprotobyname getprotobynumber getprotoent setprotoent
Im Beispiel zur Funktion getprotoent wird gezeigt, wie Sie die komplette Datei /etc/protocols ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] Konfigurationsdatei: /etc/services

In dieser Datei werden die Namen von Netzwerkdiensten sowie die zugehörigen Portnummern und Protokollnamen gespeichert.
Typische Daten (Beispiel):

  ftp                 21  tcp
  telnet              23  tcp
  smtp  mail          25  tcp
  whois  nicname      43  tcp
  domain  nameserver  53  tcp
  gopher              70  tcp
  finger              79  tcp
  www  http           80  tcp
  www                 80  udp

Funktionen zu dieser Datei sind endservent getservbyname getservbyport getservent setservent
Im Beispiel zur Funktion getservent wird gezeigt, wie Sie die komplette Datei /etc/services ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.

[Bearbeiten] endgrent - zum Ende von /etc/groups springen

Springt an das Ende der Datei /etc/group und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getgrent();
print "$Wert\n";
endgrent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit getgrent den ersten Eintrag aus /etc/groups, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] endhostent - zum Ende von /etc/hosts springen

Springt an das Ende der Datei /etc/hosts und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = gethostent();
print "$Wert\n";
endhostent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit gethostent den ersten Eintrag aus /etc/hosts, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] endnetent - zum Ende von /etc/networks springen

Springt an das Ende der Datei /etc/networks und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getnetent();
print "$Wert\n";
endnetent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit getnetent den ersten Eintrag aus /etc/networks, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] endprotoent - zum Ende von /etc/protocols springen

Springt an das Ende der Datei /etc/protocols und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getprotoent();
print "$Wert\n";
endprotent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit getprotoent den ersten Eintrag aus /etc/protocols, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] endpwent - zum Ende von /etc/passwd springen

Springt an das Ende der Datei /etc/passwd und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getpwent();
print "$Wert\n";
endpwent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit getpwent den ersten Eintrag aus /etc/passwd, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] endservent - zum Ende von /etc/services springen

Springt an das Ende der Datei /etc/services und beendet den Zugriff darauf.

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getservent();
print "$Wert\n";
endservent();
print "</pre></body></html>\n";
Das Beispiel ermittelt mit getnetent den ersten Eintrag aus /etc/services, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.

[Bearbeiten] getgrent - nächsten Eintrag von /etc/groups ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/group oder den Listenkontext einer Liste mit vier Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getgrent();
while(@Liste) {
  print "$Liste[0]]  $Liste[1]  $Liste[2]  $Liste[3]\n";
  @Liste = getgrent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/groups mit einem CGI-Script ausgeben lassen können. Zunächst wird getgrent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die vier Elemente des Arrays ausgegeben, und getgrent wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente des Arrays, die von der Funktion zurückgegeben werden, sind:

$Liste[0] = Name der Berechtigungsgruppe,
$Liste[1] = Passwort der Berechtigungsgruppe (verschlüsselt),
$Liste[2] = Nummer der Berechtigungsgruppe (GID),

$Liste[3] = Mitgliedernamen der Berechtigungsgruppe

[Bearbeiten] getgrgid - Eintrag mit bestimmter Gruppen-ID aus /etc/groups ermitteln

Ermittelt aus der Datei /etc/group den zugehörigen Eintrag zu einer bestimmten Gruppen-ID (GID). Im skalaren Kontext wird dabei der zugehörige Gruppenname ermittelt, im Listenkontext der gesamte Eintrag zur GID.

Erwartet als Parameter:

  1. die gewünschte GID.

Gibt je nach Kontext entweder den Gruppennamen oder die Liste zurück. Wenn die angegebene GID nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
 
($Name,$Passwort,$Gid,$Mitglieder) = getgrgid(2);
print "<h3>Listenkontext:</h3>";
print "<pre>$Name\n$GrPasswort\n$Gid\n$Mitglieder</pre>";
 
print "<h3>Skalarer Kontext:</h3><pre>";
my $Wert = getgrgid(2);
print "<pre>$Wert</pre>\n";
 
print "</body></html>\n";
Das Beispiel ruft insgesamt zweimal die Funktion getgrgid auf, zuerst im Listenkontext, später im skalaren Kontext. In beiden Fällen wird 2 als gesuchte Gruppennummer (GID) übergeben. Im Listenkontext wird der gesamte gefundene Eintrag, bestehend aus Gruppenname, Gruppenpasswort (verschlüsselt), Gruppennummer und Mitgliedernamen, vom Script ausgegeben. Im skalaren Kontext wird nur der zur Gruppennummer gehörige Gruppenname ausgegeben.

[Bearbeiten] getgrnam - Eintrag mit bestimmtem Gruppennamen aus /etc/groups ermitteln

Ermittelt aus der Datei /etc/group den zugehörigen Eintrag zu einem bestimmten Gruppennamen. Im skalaren Kontext wird dabei die Gruppen-ID (GID) des angegebenen Namens ermittelt, im Listenkontext der gesamte Eintrag zu dem Gruppennamen.

Erwartet als Parameter:

  1. den gewünschten Gruppennamen.

Gibt je nach Kontext entweder die zugehörige Gruppennummer (GID) oder die Liste zurück. Wenn der angegebene Gruppenname nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
 
(my $Name, my $Passwort, my $Gid, my $Mitglieder) = getgrnam("mail");
print "<h3>Listenkontext:</h3>";
print "<pre>$Name\n$Passwort\n$Gid\n$Mitglieder</pre>";
 
print "<h3>Skalarer Kontext:</h3>";
my $Wert = getgrnam("mail");
print "<pre>$Wert</pre>\n";
 
print "</body></html>\n";
Das Beispiel ruft insgesamt zweimal die Funktion getgrnam auf, zuerst im Listenkontext, später im skalaren Kontext. In beiden Fällen wird "mail" als gesuchter Gruppenname übergeben. Im Listenkontext wird der gesamte gefundene Eintrag, bestehend aus Gruppenname, Gruppenpasswort (verschlüsselt), Gruppennummer und Mitgliedernamen, vom Script ausgegeben. Im skalaren Kontext wird nur die zum Gruppennamen gehörige Gruppennummer (GID) ausgegeben.

[Bearbeiten] gethostbyaddr - Eintrag mit bestimmter IP aus /etc/hosts ermitteln

Ermittelt aus der Datei /etc/hosts den Hostnamen zu einer bestimmten IP-Adresse.

Erwartet als Parameter:

  1. die gewünschte IP-Adresse, und zwar numerisch in binärer Schreibweise.
  2. den Adresstyp der IP-Adresse (numerisch).

Gibt den zugehörigen Hostnamen zurück. Wenn die angegebene IP-Adresse nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
use Socket;
my $addr = inet_aton("127.0.0.1");
my $Wert  = gethostbyaddr($addr, AF_INET);
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie den Hostnamen zu einer IP-Adresse auf dem Rechner ermitteln können. Um die etwas komplizierte Parameterversorgung der Funktion gethostbyaddr sicherzustellen, wird das Standardmodul Socket verwendet. Durch Aufruf der Modul-Funktion inet_aton wird eine in üblicher Schreibweise notierte, übergebene IP-Adresse in die erforderliche binäre Form umgewandelt. Das Ergebnis wird in dem Skalar $addr gespeichert. Das Modul Socket stellt auch Konstanten für den Adresstyp zur Verfügung. Die korrekte Konstante für den zweiten Parameter von gethostbyaddr ist AF_INET. Durch Übergabe von $addr und AF_INET wird gethostbyaddr richtig versorgt und gibt den Hostnamen zur Beispieladresse 127.0.0.1 aus (üblicherweise localhost).

[Bearbeiten] gethostbyname - Eintrag mit bestimmtem Hostnamen aus /etc/hosts ermitteln

Ermittelt aus der Datei /etc/hosts die IP-Adresse zu einem bestimmten Hostnamen.

Erwartet als Parameter:

  1. den gewünschten Hostnamen.

Gibt die zugehörige IP-Adresse zurück, allerdings binär numerisch.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
use Socket;
my $addr  = gethostbyname("localhost");
my $Wert = inet_ntoa($addr);
print "$Wert";
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie die IP-Adresse zu einem Hostnamen auf dem Rechner ermitteln können. Dazu wird das Standardmodul Socket verwendet. Damit lässt sich der binär numerische Rückgabewert von gethostbyname, der im Beispiel in dem Skalar $addr gespeichert wird, bequem in die übliche Schreibweise konvertieren. Durch Aufruf der Modul-Funktion inet_ntoa wird $addr in die übliche Schreibweise umgewandelt. Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar $Wert gespeichert. Anschließend wird die IP-Adresse zu dem Hostnamen localhost ausgegeben (üblicherweise 127.0.0.1).

[Bearbeiten] gethostent - nächsten Eintrag von /etc/hosts ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/hosts oder im Listenkontext eine Liste mit fünf und mehr Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = gethostent();
while(@Liste) {
  print "$Liste[0]   $Liste[1]   $Liste[2]";
  for(my $i = 0; $i < $Liste[3]; $i++) {
    (my $a, my $b, my $c, my $d) = unpack('C4',$Liste[4+$i]);
    print "  $a.$b.$c.$d";
  }
  print "\n";
  @Liste = gethostent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/hosts mit einem CGI-Script ausgeben lassen können. Zunächst wird gethostent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die Elemente der Liste ausgegeben, und getgrent wird für den nächsten Schleifendurchgang aufgerufen. Die Liste enthält als letztes Listenelement wiederum eine Liste, sodass eine weitere innere for-Schleife nötig ist, um alle Elemente zu ermitteln.

Die Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0] = Hostname,
$Liste[1] = Aliasnamen des Hostnamens,
$Liste[2] = Adresstyp,
$Liste[3] = Anzahl der noch folgenden Listenelemente
$Liste[4] und weitere = zugeordnete IP-Adressen

Die zugeordneten IP-Adressen sind binär gespeichert. Um die übliche Vier-Zahlen-Darstellung zu erhalten, muss die binäre Schreibweise erst konvertiert werden. Das ist durch Anwendung der Funktion unpack mit C4 als erstem Parameter möglich, so wie im obigen Beispiel. Dort werden auf diese Weise die vier Einzelzahlen der IP-Adresse ermittelt und in den Skalaren $a, $b, $c und $d gespeichert.

[Bearbeiten] getlogin - Namen des aktuellen Benutzers ermitteln

Erwartet keine Parameter.

Gibt den Loginnamen des aktuellen Benutzers zurück.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
my $Wert = getlogin();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel ermittelt den Loginnamen mit getlogin, speichert ihn in dem Skalar $Wert und gibt diesen zur Kontrolle aus.

[Bearbeiten] getnetbyaddr - Eintrag mit bestimmter IP aus /etc/networks ermitteln

Ermittelt aus der Datei /etc/networks den Netzwerknamen zu einer bestimmten IP-Adresse.

Erwartet als Parameter:

  1. die gewünschte IP-Adresse, und zwar numerisch in binärer Schreibweise.
  2. den Adresstyp der IP-Adresse (numerisch).

Gibt den zugehörigen Netzwerknamen zurück. Wenn die angegebene IP-Adresse nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
use Socket;
my $addr = inet_aton("127.0.0.0");
my $Wert  = getnetbyaddr($addr, AF_INET);
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie den Netzwerknamen zu einer IP-Adresse auf dem Rechner ermitteln können. Um die etwas komplizierte Parameterversorgung der Funktion getnetbyaddr sicherzustellen, wird das Standardmodul Socket verwendet. Durch Aufruf der Modul-Funktion inet_aton wird eine in üblicher Schreibweise notierte, übergebene IP-Adresse in die erforderliche binäre Form umgewandelt. Das Ergebnis wird in dem Skalar $addr gespeichert. Das Modul Socket stellt auch Konstanten für den Adresstyp zur Verfügung. Die korrekte Konstante für den zweiten Parameter von gethostbyaddr ist AF_INET. Durch Übergabe von $addr und AF_INET wird getnetbyaddr richtig versorgt und gibt den Netzwerknamen zur Beispieladresse 127.0.0.0 aus (üblicherweise loopback).

[Bearbeiten] getnetbyname - Eintrag mit bestimmtem Netzwerknamen aus /etc/networks ermitteln

Ermittelt aus der Datei /etc/networks die IP-Adresse zu einem bestimmten Netzwerknamen.

Erwartet als Parameter:

  1. den gewünschten Netzwerknamen.

Gibt die zugehörige IP-Adresse zurück, allerdings binär numerisch.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
use Socket;
my $addr  = getnetbyname("loopback");
my $Wert = inet_ntoa($addr);
print "$Wert";
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie die IP-Adresse zu einem Netzwerknamen auf dem Rechner ermitteln können. Dazu wird das Standardmodul Socket verwendet. Damit lässt sich der binär numerische Rückgabewert von getnetbyname, der im Beispiel in dem Skalar $addr gespeichert wird, bequem in die übliche Schreibweise konvertieren. Durch Aufruf der Modul-Funktion inet_ntoa wird $addr in die übliche Schreibweise umgewandelt. Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar $Wert gespeichert. Anschließend wird die IP-Adresse zu dem Netzwerknamen loopback ausgegeben (üblicherweise 127.0.0.0).

[Bearbeiten] getnetent - nächsten Eintrag von /etc/networks ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/networks oder im Listenkontext eine Liste mit vier Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getnetent();
while(@Liste) {
  print "$Liste[0]  $Liste[1]  $Liste[2]  $Liste[3]\n";
  @Liste = getnetent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/networks mit einem CGI-Script im Browser ausgeben können. Zunächst wird getnetent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die vier Elemente der Liste ausgegeben, und getnetent wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente der Liste, die von der Funktion zurückgegeben wird, sind:

$Liste[0] = Name des Netzwerks,
$Liste[1] = Aliasnamen des Netzwerks,
$Liste[2] = Adresstyp,

$Liste[3] = Nummer des Netzwerks

[Bearbeiten] getprotobyname - Eintrag mit bestimmtem Protokollnamen aus /etc/protocols ermitteln

Ermittelt aus der Datei /etc/protocols die Protokollnummer zu einem bestimmten Protokollnamen.

Erwartet als Parameter:

  1. den gewünschten Protokollnamen.

Gibt die zugehörige Protokollnummer zurück. Wenn der übergebene Protokollname nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my $Wert = getprotobyname("tcp");
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt die Protokollnummer zum Protokoll tcp. Dazu dient der Aufruf getprotobyname("tcp"), dessen Rückgabewert im Skalar $Wert gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.

[Bearbeiten] getprotobynumber - Eintrag mit bestimmter Protokollnummer aus /etc/protocols ermitteln

Ermittelt aus der Datei /etc/protocols den Protokollnamen zu einer bestimmten Protokollnummer.

Erwartet als Parameter:

  1. die gewünschte Protokollnummer.

Gibt den zugehörigen Protokollnamen zurück. Wenn die übergebene Protokollnummer nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my $Wert = getprotobynumber(17);
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt den Protokollnamen zur Protokollnummer 17. Dazu dient der Aufruf getprotobynumber(17), dessen Rückgabewert im Skalar $Wert gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.

[Bearbeiten] getprotoent - nächsten Eintrag von /etc/protocols ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/protocols oder im Listenkontext eine Liste mit drei Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getprotoent();
while(@Liste) {
  print "$Liste[0]  $Liste[1]  $Liste[2]\n";
  @Liste = getprotoent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/protocols mit einem CGI-Script ausgeben lassen können. Zunächst wird getprotoent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die vier Elemente der Liste ausgegeben, und getnetent wird für den nächsten Schleifendurchgang aufgerufen. Die drei Elemente der Liste, die von der Funktion zurückgegeben wird, sind:

$Liste[0] = Protokollname,
$Liste[1] = Protokollnummer,

$Liste[2] = Aliasname des Protokolls

[Bearbeiten] getpwent - nächsten Eintrag von /etc/passwd ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/passwd oder im Listenkontext eine Liste mit bis zu neun Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getpwent();
while(@Liste) {
  print "$Liste[0]  $Liste[1]  $Liste[2]  $Liste[3]  $Liste[4]  $Liste[5]  $Liste[6]  $Liste[7]  $Liste[8]\n";
  @Liste = getpwent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/passwd mit einem CGI-Script ausgeben lassen können. Zunächst wird getpwent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die neun Elemente der Liste ausgegeben, und getpwent wird für den nächsten Schleifendurchgang aufgerufen. Die neun Elemente der Liste, die von der Funktion zurückgegeben wird, sind:

$Liste[0] = Benutzername,
$Liste[1] = Benutzerpasswort(verschlüsselt),
$Liste[2] = Benutzernummer (UID),
$Liste[3] = Nummer der zugehörigen Berechtigungsgruppe (GID),
$Liste[4] = beschreibende Angaben,
$Liste[5] = beschreibende Angaben,
$Liste[6] = Heimatverzeichnis des Benutzers,
$Liste[7] = Shell des Benutzers,

$Liste[8] = (optional) Verfallszeitpunkt der Gültigkeit des Eintrags

[Bearbeiten] getpwnam - Eintrag mit bestimmtem Benutzernamen aus /etc/passwd ermitteln

Ermittelt zu einem bestimmten Benutzernamen den Eintrag aus der Datei /etc/passwd den zugehörigen Eintrag. Im skalaren Kontext wird die Benutzernummer (UID) ermittelt, im Listenkontext eine Liste mit bis zu neun Elementen.

Erwartet als Parameter:

  1. den gewünschten Benutzernamen.

Gibt im skalaren Kontext die zugehörige Benutzernummer (UID) und im Listenkontext eine Liste mit allen Daten des Eintrags zurück. Wenn der Benutzername nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getpwnam("uucp");
print "$Liste[0]  $Liste[1]  $Liste[2]  $Liste[3]  $Liste[4]  $Liste[5]  $Liste[6]  $Liste[7]  $Liste[8]\n";
 
my $Wert = getpwnam("uucp");
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt für den Benutzernamen uucp, der der Funktion getpwnam übergeben wird, den zugehörigen Eintrag - zuerst im Listenkontext, und beim zweiten Aufruf im skalaren Kontext. Im Listenkontext werden alle neun Elemente des Eintrags ermittelt und im Array @Liste gespeichert, im skalaren Kontext nur die Benutzernummer (UID), gespeichert im Skalar $Wert. Das Beispiel gibt beide Aufrufergebnisse zur Kontrolle aus. Zur Bedeutung der Array-Elemente siehe Funktion getpwent.

[Bearbeiten] getpwuid - Eintrag mit bestimmter Benutzernummer aus /etc/passwd ermitteln

Ermittelt zu einer bestimmten Benutzernummer (UID) den Eintrag aus der Datei /etc/passwd den zugehörigen Eintrag. Im skalaren Kontext wird der Benutzername ermittelt, im Listenkontext eine Liste mit bis zu neun Elementen.

Erwartet als Parameter:

  1. die gewünschte Benutzernummer (UID).

Gibt im skalaren Kontext den zugehörigen Benutzernamen und im Listenkontext eine Liste mit allen Daten des Eintrags zurück. Wenn die Benutzernummer nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getpwuid(2);
print "$Liste[0]  $Liste[1]  $Liste[2]  $Liste[3]  $Liste[4]  $Liste[5]  $Liste[6]  $Liste[7]  $Liste[8]\n";
 
my $Wert = getpwuid(2);
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt für die Benutzernummer 2, der der Funktion getpwuid übergeben wird, den zugehörigen Eintrag - zuerst im Listenkontext, und beim zweiten Aufruf im skalaren Kontext. Im Listenkontext werden alle neun Elemente des Eintrags ermittelt und im Array @Liste gespeichert, im skalaren Kontext nur der Benutzername, gespeichert im Skalar $Wert. Das Beispiel gibt beide Aufrufergebnisse zur Kontrolle aus. Zur Bedeutung der Listenelemente siehe Funktion getpwent.

[Bearbeiten] getservbyname - Eintrag mit bestimmtem Portnamen aus /etc/services ermitteln

Ermittelt aus der Datei /etc/services die Portnummer zu einem bestimmten Netzwerkdienst.

Erwartet als Parameter:

  1. den Namen des gewünschten Netzwerkdienstes,
  2. den Namen des gewünschten Protokolls.

Gibt die zugehörige Portnummer zurück. Wenn der übergebene Netzwerkname oder das Protokoll nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my $Wert = getservbyname("www","tcp");
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt die Portnummer zum Netzwerkdienst www auf dem Netzwerkprotokoll tcp. Dazu dient der Aufruf getservbyname("www","tcp"), dessen Rückgabewert im Skalar $Wert gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.

[Bearbeiten] getservbyport - Eintrag mit bestimmter Portnummer aus /etc/services ermitteln

Ermittelt aus der Datei /etc/services den Namen eines Netzwerkdienstes zu einer bestimmten Portnummer.

Erwartet als Parameter:

  1. die gewünschten Portnummer,
  2. den Namen des gewünschten Protokolls.

Gibt den Namen des zugehörigen Netzwerkdienstes zurück. Wenn die übergebene Portnummer oder das Protokoll nicht gefunden wurde, wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my $Wert = getservbyport(80,"tcp");
print "$Wert\n";
 
print "</pre></body></html>\n";
Das Beispiel ermittelt den Namen des Netzwerkdienstes mit der Portnummer 80 auf dem Netzwerkprotokoll tcp. Dazu dient der Aufruf getservbyport(80,"tcp"), dessen Rückgabewert im Skalar $Wert gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.

[Bearbeiten] getservent - nächsten Eintrag von /etc/services ermitteln

Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/services oder im Listenkontext eine Liste mit vier Elementen.

Erwartet keine Parameter.

Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef zurückgegeben.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
 
my @Liste = getservent();
while(@Liste) {
  print "$Liste[0]  $Liste[1]  $Liste[2]  $Liste[3]\n";
  @Liste = getservent();
}
 
print "</pre></body></html>\n";
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/services mit einem CGI-Script ausgeben lassen können. Zunächst wird getservent erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste) - werden die vier Elemente der Liste ausgegeben, und getservent wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente der Liste, die von der Funktion zurückgegeben wird, sind:

$Liste[0] = Name des Netzwerkdienstes,
$Liste[1] = Aliasname des Netzwerkdienstes,
$Liste[2] = Portnummer des Netzwerkdienstes,

$Liste[3] = Name des zugehörigen Protokolls

[Bearbeiten] setgrent - zum Anfang von /etc/groups springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
setgrent();
my $Wert = getgrent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit setgrent zum Anfang der Datei. Anschließend liest es mit getgrent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.

[Bearbeiten] sethostent - zum Anfang von /etc/hosts springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
sethostent();
my $Wert = gethostent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit sethostent zum Anfang der Datei. Anschließend liest es mit gethostent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.

[Bearbeiten] setnetent - zum Anfang von /etc/networks springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
setnetent();
my $Wert = getnetent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit setnetent zum Anfang der Datei. Anschließend liest es mit getnetent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.

[Bearbeiten] setprotoent - zum Anfang von /etc/protocols springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
setprotoent();
my $Wert = getprotoent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit setprotoent zum Anfang der Datei. Anschließend liest es mit getprotoent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.

[Bearbeiten] setpwent - zum Anfang von /etc/passwd springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
setpwent();
my $Wert = getpwent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit setpwent zum Anfang der Datei. Anschließend liest es mit getpwent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.

[Bearbeiten] setservent - zum Anfang von /etc/services springen

Erwartet keine Parameter.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n";
setservent();
my $Wert = getservent();
print "$Wert\n";
print "</pre></body></html>\n";
Das Beispiel springt mit setservent zum Anfang der Datei. Anschließend liest es mit getservent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert gespeichert ist, wird zur Kontrolle ausgegeben.
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Übersicht
Index
Mitmachen
Werkzeuge
Spenden
SELFHTML