SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

TELEKOM

Netzwerk-Funktionen in Perl

An dieser Stelle werden kurz die wichtigsten Netzwerk-Module, -Funktionenund -Methoden vorgestellt. Die folgende Auflistung erhebt aber keinen Anspruch auf Vollständigkeit, sondern es werden nur die notwendigsten aufgeführt.

Einige Perl-Funktionen verhalten sich anders als ihr äquivalen in C, obwohl siedieselben Namen tragen. inet_aton ist nur ein Beispiel dafür. Ein anderes Beispielist accept(2), die in C einen Filedeskriptoroder -1 liefert, während in Perl eine spezielle Syntax für das neue Filehandle benutzt wird, und der Rückgabewert Information über denKommunikationspartner enthält oder undef ist. (DieseInformation wiederum kann man in C mit getpeername(2)erhalten.) sockaddr_in ist in C eine Struktur, in Perl eineHilfsfunktion, die sowohl benutzt werden kann, um Daten aus dieserStruktur zu extrahieren, als auch um Daten in eine solche Struktur zuverfrachten.

IP-Adressen

Viele Netzwerkfunktionen brauchen eine IP-Adresse als "gepackten Binärstring".Mit den Funktionen pack() und unpack() läßt sichdie Konvertierung durchf¨hren. Das Packen geschieht durch:
($a,$b,$c,$d) = split(/\./, '192.168.34.3');$packed_ip = pack('C4',$a,$b,$c,$d);
Das entpacken analog durch:
($a,$b,$c,$d) = unpack('C4',$packed_ip); 
                                       $dotted_quad = join ('.', $a,$b,$c,$d); 
                                       
Das Packen und Entpacken muß aber nicht von Hand erfolgen, denn es gibt passende Standardfunktionen dafür:
  • $packed_ip = inet_aton($dotted_quad)
    Packen einer Adresse der Form 'a.b.c.d' in ein Binärformat wie es von sockaddr_in() gebraucht wird.

  • $dotted_quad = inet_ntoa($packed_ip)
    Enpacken einer binär gespeicherten Adresse in das "lesbare" Format.

  • $socket_addr = sockaddr_in($port,$address)
    ($port,$address) = sockaddr_in($socket_addr)

    Im skalaren Kontext (obere Zeile) wird eine Portnummer und eine binäre Adresse in einem Format geliefert, wie es die Methode socket benötigt. Im Listenkontext (untere Zeile) erfolgt die Konvertierung in umgekehrter Richtung.
    Wem das nicht gefällt, kann stattdessen $socket_addr = pack_sockaddr_in($port,$address) oder ($port,$address) = unpack_sockaddr_in($socket_addr) verwenden.

gethostbyaddr - Eintrag mit bestimmter IP ermitteln

Ermittelt den Hostnamen zu einer bestimmten IP-Adresse und erwartet als Parameter:
  1. die gewünschte IP-Adresse 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. Im Listenkontext erhält man Name, Aliase, Addresstype, Länge und die Adresse. Beispiel:
                                       my $addr = inet_aton("127.0.0.1");
                                       my $Wert  = gethostbyaddr($addr, AF_INET);
                                       print "$Wert\n";
                                       
oder auch:
                                       my $addr = inet_aton("127.0.0.1");
                                       ($name,$aliases,$atype,$len,$addrs) = gethostbyaddr($addr, AF_INET);
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "Adresse: ".join (".",unpack("C4", $addrs)), "\n";
                                       

gethostbyname - Eintrag mit bestimmtem Hostnamen ermitteln

Ermittelt die IP-Adresse zu einem bestimmten Hostnamen und erwartet als Parameter den gewünschten Hostnamen.

Gibt die zugehörige IP-Adresse binär numerisch zurück. Im Listenkontext erhält man Name, Aliase, Addresstype, Länge und die Adresse.

                                       my $addr  = gethostbyname("localhost");
                                       my $Wert = inet_ntoa($addr);
                                       
oder auch:
                                       my ($name,$aliases,$atype,$len,$addrs) = gethostbyname("menetekel");
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "Adresse: ".join (".",unpack("C4", $addrs)), "\n";
                                       

getnetbyaddr - Eintrag mit bestimmter IP ermitteln

Ermittelt aus der Datei /etc/networks den Netzwerknamen zu einer bestimmten IP-Adresse und erwartet als Parameter:
  1. die gewünschte IP-Adresse 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.
                                       my $addr = inet_aton("127.0.0.0");
                                       my $Wert  = getnetbyaddr($addr, AF_INET);
                                       

getnetbyname - Eintrag mit bestimmtem Netzwerknamen ermitteln

Ermittelt aus der Datei /etc/networks die IP-Adresse zu einem bestimmten Netzwerknamen und erwartet als Parameter den gewünschten Netzwerknamen.

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

                                       my $addr  = getnetbyname("loopback");
                                       my $Wert = inet_ntoa($addr);
                                       

getprotobyname - Eintrag mit bestimmtem Protokollnamen ermitteln

Ermittelt aus der Datei /etc/protocols die Protokollnummer zu einem bestimmten Protokollnamen. Erwartet als Parameter den gewünschten Protokollnamen.

Gibt die zugehörige Protokollnummer zurück. Wenn der übergebene Protokollname nicht gefunden wurde, wird undef zurückgegeben. Im Listenkontext erhält man Name, Aliase und Protokollnummer:

                                       my $number = getprotobyname("tcp");
                                       print "$number\n";
                                       
                                       my ($name,$aliases,$number) = getprotobyname("tcp");
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "$number\n";
                                       

getprotobynumber - Eintrag mit bestimmter Protokollnummer ermitteln

Ermittelt aus der Datei /etc/protocols den Protokollnamen zu einer bestimmten Protokollnummer. Erwartet als Parameter die gewünschte Protokollnummer.

Gibt den zugehörigen Protokollnamen zurück. Wenn die übergebene Protokollnummer nicht gefunden wurde, wird undef zurückgegeben. Im Listenkontext erhält man Name, Aliase und Protokollnummer:

                                       my $number = getprotobynumber(17);
                                       print "$number\n";
                                       
                                       my ($name,$aliases,$number) = getprotobynumber(17);
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "$number\n";
                                       

getpwnam - Eintrag mit bestimmtem Benutzernamen 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 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 wurden, wird undef zurückgegeben.

                                       print "\nUser-ID: ";
                                       chop ($login = <STDIN>);
                                       
                                       (@pw_info) = (getpwnam("$login"));
                                       print "\nUserinformationen fuer login: $login\n\n";
                                       print "Login: $pw_info[0]\n";
                                       print "Pw (encoded): $pw_info[1]\n";
                                       print "UserID: $pw_info[2]\n";
                                       print "GroupID: $pw_info[3]\n";
                                       print "Kommentar: $pw_info[6]\n";
                                       print "HomeDir: $pw_info[7]\n";
                                       print "Shell: $pw_info[8]\n";
                                       print "\n\n";
                                       

getpwuid - Eintrag mit bestimmter Benutzernummer 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 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 wurden, wird undef zurückgegeben.

                                       print "\nUser-ID: ";
                                       chop ($login = <STDIN>);
                                       
                                       (@pw_info) = (getpwuid("$login"));
                                       print "\nUserinformationen fuer login: $login\n\n";
                                       print "Login: $pw_info[0]\n";
                                       print "Pw (encoded): $pw_info[1]\n";
                                       print "UserID: $pw_info[2]\n";
                                       print "GroupID: $pw_info[3]\n";
                                       print "Kommentar: $pw_info[6]\n";
                                       print "HomeDir: $pw_info[7]\n";
                                       print "Shell: $pw_info[8]\n";
                                       print "\n\n";
                                       

getservbyname - Eintrag mit bestimmtem Portnamen ermitteln

Ermittelt aus der Datei /etc/services die Portnummer zu einem bestimmten Netzwerkdienst und 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 wurden, wird undef zurückgegeben. Im Listenkontext erhält man Name, Aliase, Port und Protokollnummer:

                                       my $port = getservbyname("www","tcp");
                                       print "$port\n";
                                       
                                       my ($name,$aliases,$port,$number) = getservbyname("www","tcp");
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "Port: $port\n";
                                       print "Proto: $number\n";
                                       

getservbyport - Eintrag mit bestimmter Portnummer ermitteln

Ermittelt aus der Datei /etc/services den Namen eines Netzwerkdienstes zu einer bestimmten Portnummer und 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 wurden, wird undef zurückgegeben. Im Listenkontext erhält man Name, Aliase, Port und Protokollnummer:
                                       my $port = getservbyport(80,"tcp");
                                       print "$port\n";
                                       
                                       my ($name,$aliases,$port,$number) = getservbyport(80,"tcp");
                                       print "Name: $name\n";
                                       print "Aliases: $aliases\n";
                                       print "Port: $port\n";
                                       print "Proto: $number\n";
                                       

IO::Socket::INET - die Socket-Schnittstelle

IO::Socket::INET stellt eine Objektschnittstelle bereit, mit der Sockets in der AF_INET-Domain erzeugt und verwendet werden können. Es baut auf der IO-Schnittstelle auf und erbt alle von IO definierten Methoden.

Konstruktor new( [ARGS] )

Erzeugt ein IO::Socket::INET-Objekt, das eine Referenz auf ein neu erzeugtes Symbol (beachten Sie hierzu auch das Symbol-Paket) darstellt. new kann optionale Argumente verarbeiten. Diese Argumente liegen als Schlüssel/Wert-Paare vor.
Neben den von IO akzeptierten Schlüssel/Wert-Paaren stellt IO::Socket::INET die folgenden zur Verfügung:
                                       PeerAddr    Adresse des entfernten Hosts   <hostname>[:<port>]
                                       PeerHost    Synonym für PeerAddr
                                       PeerPort    Entfernter Port oder Dienst    <service>[(<no>)] | <no>
                                       LocalAddr   Lokal gebundene Hostadresse    hostname[:port]
                                       LocalHost   Synonym für LocalAddr
                                       LocalPort   Lokal gebundener Host-Port     <service>[(<no>)] | <no>
                                       Proto       Name/Nummer des Protokolls     "tcp" | "udp" | ...
                                       Type        Socket-Typ                    SOCK_STREAM | SOCK_DGRAM | ...
                                       Listen      Queue-Größe für Listen
                                       Reuse       Setze SO_REUSEADDR vor Bindung.
                                       Timeout     Timeout-Wert für verschiedene Operationen
                                       
Ist Listen angegeben, wird ein Listen-Socket erzeugt. Handelt es sich beim Socket-Typ, der aus dem Protokoll abgeleitet wird, hingegen um SOCK_STREAM, dann wird connect() aufgerufen.
PeerAddr kann einen Hostnamen oder eine IP-Adresse der Form "xx.xx.xx.xx" enthalten. PeerPort kann eine Zahl oder ein symbolischer Dienstname sein. Dem Servicenamen kann in Klammern eine Zahl folgen, die verwendet wird, wenn das System den Dienst nicht kennt. Auch PeerPort kann in PeerAddr eingebettet werden, indem man ihm einen ":" voranstellt.
Geben Sie Proto nicht an, während Sie einen symbolischen PeerPort festlegen, versucht der Konstruktor, Proto aus dem Dienstnamen abzuleiten. Als letzter Ausweg wird Proto mit "tcp" angenommen. Der Type-Parameter wird aus Proto abgeleitet, wenn er nicht angegeben wird.
Wird dem Konstruktor nur ein einzelnes Argument übergeben, wird davon ausgegangen, daß es sich um PeerAddr handelt. Beispiele:
                                       $sock = IO::Socket::INET->new(PeerAddr => 'www.netzmafia.de',
                                                                     PeerPort => 'http(80)',
                                                                     Proto    => 'tcp');
                                       
                                       $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)');
                                       
                                       $sock = IO::Socket::INET->new(Listen    => 5,
                                                                     LocalAddr => 'localhost',
                                                                     LocalPort => 9000,
                                                                     Proto     => 'tcp');
                                       
                                       $sock = IO::Socket::INET->new('127.0.0.1:25');
                                       
Seit der Version 1.18 ist bei allen IO::Socket-Objekten das Autoflushing standardmäßig aktiviert. Bei früheren Releases ist das nicht der Fall.

Aktive Methoden

Diese Methoden dienen zum Aufbau bzw zur Annahme einer Verbindung. Alle Methoden liefern einen Wert zurück.
  • $conn_sock = $listen_socket->accept()
  • ($conn_sock,$remote_addr) = $listen_socket->accept()
    Diese Methode kann nur auf einen Socket im Zustand "listen", also bei einem Server, angewendet werden. Sie liefert für die nächste Anfrage aus der Warteschlange einen konnektierten Socket, der für die Kommunikation mit dem entfernten Host verwendet werden kann. Er erbt alle Eigenschaften des Server-Sockets. Im skalaren Kontext wird nur der konnektierte Socket geliefert, im Listenkontext zusätzlich die Adresse des entfernten Host im Binärformat.

  • $sock->connect($port,$host)
    $sock->bind($port,$host)
    Im Gegensatz zu den gleichnamigen Methoden unten wird hier eine bequeme Möglichkeit geboten connect und bindmit Portnummer und der ungepackten Hostadresse (dotted quad oder symbolischer Hostname) aufzurufen.

  • $sock->shutdown($how)
    Mit dieser Methode wird ein Socket geschlossen. shutdown() besitzt wesentlich höhere "Durchsetzungskraft" als close(). Es werden beispielsweise auch Sockets geschlossen, von denen offene Kopien in irgendwelchen Kindprozessen existieren. Der Parameter $how legt fest, was bei bidirektionalen Sockets geschlossen wird:
    0 : lesenden Socket schließen
    1 : schreibenden Socket schließen
    2 : Socket komplett schließen

  • $wert = $sock->sockopt($option_name [,$option_wert])
    Socketoption erfragen oder setzen. Es handet sich um ein Frontend für getsockopt() oder setsockopt() aus dem Modul Socket. Mit einem einzigen (numerischen) Parameter aufgerufen, liefert die Methode den Wert der entsprechenden Option. Wird sie mit zwei Parametern aufgerufen, wird der Wert der entsprechenden Option neu gesetzt. In diesem Fall liefert die Methode einen Integer-Resultatwert, der über Erfolg oder Mißerfolg Auskunft gibt.

  • $sock->send($data [,$flags,$destination])
    $sock->recv($data [,$flags,$destination])
    Frontend für die Funktionen send() und recv, die hauptsächlich für UDP-Verbindungen eingesetzt werden.

  • $sock->connect($dest_addr)
    $sock->bind($my_addr)
    $sock->listen($max_queue)
    Diese Aufrufe werden selten verwendet, da sie bereits bei new intern aufgerufen werden oder komfortablere Varianten besitzen. Sie sind nur vorhanden, falls man die Einstellungen "von Hand" vornehmen will. Man kann z. B. auch so einen Socket erzeugen:
                                           $sock = IO::Socket::INET->new(Proto=>'tcp');
                                           $dest_addr = sockaddr_in(...); # usw.
                                           $sock->connect($dest_addr);
                                           

Informations-Methoden

Die folgenden Methoden liefern Informationen über den lokalen und den entfernten Host.
  • $sock->connected()
    liefert "wahr", falls der Socket eine Verbindung zum entfernten Rechner hat - verwendet peername().

  • $sock->sockaddr()
    Gibt den Adreß-Teil der sockaddr-Struktur des Sockets zurück.

  • $sock->sockport()
    Gibt die Portnummer zurück, die das Socket auf dem lokalen Host verwendet.

  • $sock->sockhost()
    Gibt den Adreß-Teil der sockaddr-Struktur des Sockets in der Form "xx.xx.xx.xx" zurück.

  • $sock->sockname()
    gibt nicht den Namen, sondern die gepackte Binäradresse des lokalen Hosts zurück.

  • $sock->peeraddr()
    Gibt den Adreß-Teil der sockaddr-Struktur des Sockets auf dem entfernten Host zurück.

  • $sock->peerport()
    Gibt die Portnummer des Sockets auf dem entfernten Host zurück.

  • $sock->peerhost()
    Gibt den Adreß-Teil der sockaddr-Struktur des Sockets auf dem entfernten Host in der Form "xx.xx.xx.xx" zurück.

  • $sock->peername()
    gibt nicht den Namen, sondern die gepackte Binäradresse des entfernten Hosts zurück.

  • $sock->protocol()
    $sock->socktype()
    $sock->sockdomain
    liefern Basisinformationen über den entsprechenden Socket. Sie können nicht verwendet werden, um Eigenschaften des Socket zu ändern.

DIPLOMARBEITEN UND BÜCHER

Diplomarbeiten zum Runterladen:

Suche im Katalog:
Architektur / Raumplanung
Betriebswirtschaft - Funktional
Erziehungswissenschaften
Geowissenschaften
Geschichtswissenschaften
Informatik
Kulturwissenschaften
Medien- und Kommunikationswissenschaften
Medizin
Psychologie
Physik
Rechtswissenschaft
Soziale Arbeit
Sozialwissenschaften


JOBS
HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
Virtual University in: Italiano - Français - English - Español
VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere