buecher.lingoworld.de
sascha kersken

buecher.lingoworld - Startseite

    buchinfo

    inhalt

    leseprobe







    info bei:

    Addison-Wesley
    amazon.de















Inhalt
 
 

Inhaltsverzeichnis

1   Ein- und Ausgabe-Grundlagen

1.1   Perl und der Netzwerkbetrieb    33
   1.1.1   Eine Sprache, wie geschaffen für Interprozess-Kommunikation    33
   1.1.2   Eine Sprache, wie geschaffen für Textverarbeitung    34
   1.1.3   Ein Open-Source-Projekt    34
   1.1.4   Objektorientierte Netzwerk-Erweiterungen    34
   1.1.5   Sicherheit    34
   1.1.6   Performance    35
1.2   Netzwerkbetrieb leicht gemacht    35
1.3   Dateihandles    37
   1.3.1   Die Standard-Dateihandles    37
   1.3.2   Ein- und Ausgabeoperationen    38
   1.3.3   Das Dateiende finden    41
   1.3.4   Dateien öffnen und schließen    44
   1.3.5   Puffern und Blockieren    49
   1.3.6   Dateihandles übergeben und speichern    52
   1.3.7   Fehler finden    54
   1.3.8   Die objektorientierte Syntax der Module IO::Handle und IO::File verwenden    55
1.4   Zusammenfassung    61

2   Prozesse, Pipes und Signale

2.1   Prozesse    63
   2.1.1   Die Funktion fork()    64
   2.1.2   Die Funktionen system() und exec()    66
2.2   Pipes    67
   2.2.1   Eine Pipe öffnen    68
   2.2.2   Pipes verwenden    68
   2.2.3   Pipes leicht gemacht: Der Backtick-Operator    70
   2.2.4   Pipes mit mehr Möglichkeiten: Die Funktion pipe()    71
   2.2.5   Bidirektionale Pipes    74
   2.2.6   Zwischen Pipes und einfachen Dateihandles unterscheiden    75
   2.2.7   Der gefürchtete PIPE-Fehler    75
2.3   Signale    77
   2.3.1   Gebräuchliche Signale    77
   2.3.2   Signale abfangen    79
   2.3.3   Behandlung von PIPE-Ausnahmen    81
   2.3.4   Signale senden    83
   2.3.5   Beachtenswertes über Signalhandler    84
   2.3.6   Timeout langsamer Systemaufrufe    85
2.4   Zusammenfassung    86

3   Einführung in Berkeley Sockets

3.1   Clients, Server und Protokolle    89
   3.1.1   Protokolle    89
   3.1.2   Binäre Protokolle im Vergleich zu textorientierten Protokollen    91
3.2   Berkeley Sockets    92
   3.2.1   Der Aufbau eines Sockets    93
   3.2.2   Datagramm-Sockets    95
   3.2.3   Stream-Sockets    96
   3.2.4   Datagramme kontra Stream-Sockets    97
3.3   Socket-Adressierung    98
   3.3.1   IP-Adressen    98
   3.3.2   Reservierte IP-Adressen, Subnetze und Netzmasken    99
   3.3.3   IPv6    101
   3.3.4   Netzwerk-Ports    101
   3.3.5   Die sockaddr_in-Struktur    102
3.4   Ein einfacher Netzwerk-Client    103
3.5   Netzwerknamen und -dienste    105
   3.5.1   Hostnamen in IP-Adressen umwandeln    105
   3.5.2   Beispiele für die Hostnamen-Umwandlung    106
   3.5.3   Informationen über Protokolle und Dienste erhalten    107
   3.5.4   Der verbesserte Daytime-Client    108
   3.5.5   Andere Quellen für Netzwerkinformationen    109
3.6   Netzwerkanalyse-Tools    110
   3.6.1   ping    110
   3.6.2   nslookup    111
   3.6.3   traceroute    111
   3.6.4   netstat    112
   3.6.5   tcpdump    113
   3.6.6   MacTCP Watcher    113
   3.6.7   scanner.exe    113
   3.6.8   net-toolbox.exe    113
3.7   Zusammenfassung    113

4   Das TCP-Protokoll

4.1   Ein TCP-Echo-Client    115
4.2   Socket-Funktionen zur Bearbeitung ausgehender Verbindungen    118
4.3   Ein TCP-Echo-Server    119
   4.3.1   Socket-Funktionen zur Bearbeitung ankommender Verbindungen    124
   4.3.2   Einschränkungen von tcp_echo_serv1.pl    125
4.4   Socket-Optionen anpassen    126
   4.4.1   Gängige Socket-Optionen    127
   4.4.2   Die Socket-Option SO_REUSEADDR    128
   4.4.3   Die Funktionen fcntl() und ioctl()    129
4.5   Weitere Socket-bezogene Funktionen    129
   4.5.1   Vom Modul Socket exportierte Zeilenende-Konstanten    130
4.6   Ausnahmezustände während der TCP-Kommunikation    131
   4.6.1   Ausnahmen während des Verbindens    131
   4.6.2   Ausnahmen bei Lese- und Schreiboperationen    132
4.7   Zusammenfassung    133

5   Die IO::Socket-API

5.1   IO::Socket verwenden    135
   5.1.1   Ein Daytime-Client    135
   5.1.2   TCP-Echo-Client    136
5.2   IO::Socket-Methoden    138
   5.2.1   Die IO::Handle-Klassenhierarchie    138
   5.2.2   IO::Socket::INET-Objekte erzeugen    138
   5.2.3   IO::Socket-Objektmethoden    142
5.3   Praktischere Beispiele    144
   5.3.1   Der verbesserte Echo-Umkehr-Server    145
   5.3.2   Ein Web-Client    147
5.4   Performance und Stil    150
5.5   Zusammentreffen von Clients    151
   5.5.1   Ein Dialog-Client, erster Versuch    151
   5.5.2   Ein Dialog-Client, zweiter Versuch    153
5.6   Zusammenfassung    158

6   FTP und Telnet

6.1   Net::FTP    161
   6.1.1   Ein Net::FTP-Beispiel    161
   6.1.2   FTP und befehlsorientierte Protokolle    163
   6.1.3   Die Net::FTP-API    165
   6.1.4   Ein Verzeichnis-Mirror-Skript    168
6.2   Net::Telnet    176
   6.2.1   Ein einfaches Net::Telnet-Beispiel    177
   6.2.2   Die Net::Telnet-API    178
   6.2.3   Ein Programm zur Änderung entfernter Passwörter    182
   6.2.4   Net::Telnet mit Nicht-Telnet-Protokollen verwenden    186
   6.2.5   Das Modul Expect    191
6.3   Zusammenfassung    192

7   SMTP: Mail versenden

7.1   Einführung in die Mail-Module    193
7.2   Net::SMTP    193
   7.2.1   Das SMTP-Protokoll    194
   7.2.2   Die Net::SMTP-API    195
   7.2.3   Net::SMTP verwenden    198
7.3   MailTools    200
   7.3.1   MailTools verwenden    200
   7.3.2   Mail::Header    201
   7.3.3   Mail::Internet    204
   7.3.4   Ein Mail-Autoreply-Programm    206
   7.3.5   Mail::Mailer    209
7.4   MIME-Tools    211
   7.4.1   Eine kurze Einführung in MIME    211
   7.4.2   Organisation der MIME::*-Module    215
   7.4.3   MIME::Entity    217
   7.4.4   MIME::Head    223
   7.4.5   MIME::Body    223
   7.4.6   MIME::Parser    225
   7.4.7   MIME-Beispiel: Die neuesten CPAN-Einträge versenden    230
7.5   Zusammenfassung    234

8   POP, IMAP und NNTP - Mail und Netnews verarbeiten

8.1   Das Post Office Protocol    235
   8.1.1   Übersicht einer POP3-Mailbox erstellen    235
   8.1.2   Net::POP3-API    238
   8.1.3   MIME-Nachrichten mittels POP abholen und verarbeiten    240
   8.1.4   Das Skript pop_fetch.pl    242
   8.1.5   Das Modul PopParser    250
8.2   Das IMAP-Protokoll    252
   8.2.1   Übersicht einer IMAP-Mailbox erstellen    253
   8.2.2   Die Net::IMAP::Simpe-API    255
8.3   Internet News Clients    258
   8.3.1   Net::NNTP    260
   8.3.2   Die Net::NNTP-API    262
8.4   Ein News-Mail-Gateway    269
8.5   Zusammenfassung    278

9   Web-Clients

9.1   LWP installieren    279
9.2   LWP-Grundlagen    281
   9.2.1   HTTP::Request    283
   9.2.2   HTTP::Response    287
   9.2.3   LWP::UserAgent    290
9.3   LWP-Beispiele    295
   9.3.1   Eine Liste von RFCs holen    295
   9.3.2   Eine Liste von RFCs spiegeln    296
   9.3.3   Formulare simulieren    298
   9.3.4   HTTP::Request::Common für den Formularversand benutzen    303
   9.3.5   Datei-Uploads mit Hilfe von multipart/form-data    305
   9.3.6   Eine passwortgeschützte Seite abholen    310
9.4   Parsing von HTML und XML    312
   9.4.1   HTML formatieren    313
   9.4.2   Die HTML::Formatter-API    314
   9.4.3   Die HTML::TreeBuilder-API    315
   9.4.4   Formatiertes HTML aus dem Skript get_url.pl zurückgeben    317
   9.4.5   Das Modul HTML::Parser    319
   9.4.6   HTML::Parser verwenden    320
   9.4.7   Die HTML::Parser-API    322
   9.4.8   search_rfc.pl unter Verwendung von HTML::Parser    324
   9.4.9   Bilder von einem entfernten URL extrahieren    327
9.5   Zusammenfassung    331

10   Forking-Server und der inetd-Daemon

10.1   Standardverfahren für die Gleichzeitigkeit    335
   10.1.1   Forking-Server    335
   10.1.2   Multithreading-Server    336
   10.1.3   Multiplex-Server    337
10.2   Funktionierendes Beispiel: Ein Psychotherapie-Server    337
10.3   Der Psychotherapeut als Forking-Server    338
   10.3.1   Zombies    339
   10.3.2   Reaping von Child-Prozessen im CHLD-Handler    340
   10.3.3   Psychotherapie-Server mit Forking    341
   10.3.4   Den Psychotherapie-Server auf der Windows-Plattform verwenden    345
10.4   Ein Client-Skript für den Psychotherapie-Server    345
10.5   UNIX-Server zu Daemons machen    348
   10.5.1   Automatischer Wechsel in den Hintergrund    349
   10.5.2   PID-Dateien    350
10.6   Netzwerkserver automatisch starten    355
   10.6.1   Hintergrundprozesse auf Windows- und Macintosh-Systemen    357
10.7   Den inetd-Superdaemon benutzen    358
   10.7.1   inetd einsetzen    360
   10.7.2   inetd im wait-Modus verwenden    362
10.8   Zusammenfassung    365

11   Multithreading-Anwendungen

11.1   Über Threads    367
   11.1.1   Threads sind experimentell    367
   11.1.2   Die Thread-API    368
   11.1.3   Eine einfache Multithreading-Anwendung    369
   11.1.4   Sperren    369
   11.1.5   Thread-Modulfunktionen und -Methoden    372
   11.1.6   Threads und Signale    374
11.2   Ein Multithreading-Psychiatrie-Server    374
   11.2.1   Die Klasse Chatbot::Eliza::Server    376
11.3   Ein Multithreading-Client    377
11.4   Zusammenfassung    379

12   Multiplex-Anwendungen

12.1   Ein Multiplex-Client    381
12.2   Das Modul IO::Select    383
   12.2.1   Die eingebaute Funktion select()    385
   12.2.2   Wann ist ein Dateihandle I/O-bereit?    385
   12.2.3   select() mit Standard-I/O kombinieren    387
   12.2.4   Die »Niedrigwassermarken« anpassen    387
12.3   Ein Multiplex-Psychiatrie-Server    387
   12.3.1   Das Server-Hauptprogramm    388
   12.3.2   Das Modul Chatbot::Eliza::Polite    391
   12.3.3   Probleme mit dem Psychiatrie-Server    393
   12.3.4   Win32-Probleme    394
12.4   Zusammenfassung    394

13   Nicht blockierende Ein- und Ausgabe

13.1   Nicht blockierende I/O-Handles erzeugen    395
   13.1.1   Nicht blockierende Handles erzeugen: Die Funktionsschnittstelle    396
   13.1.2   Nicht blockierende Handles erzeugen: Die objektorientierte Schnittstelle 13.2   Nicht blockierende Handles verwenden    398
   13.2.1   sysread() mit nicht blockierenden Dateihandles    398
   13.2.2   syswrite() mit nicht blockierenden Dateihandles    399
13.3   Nicht blockierende Handles mit zeilenorientiertem I/O verwenden    400
   13.3.1   IO::Getline verwenden    402
   13.3.2   Das Modul IO::Getline    403
13.4   Ein allgemeingültiges, nicht blockierendes I/O-Modul    407
   13.4.1   Ein nicht blockierender Echo-Server    407
   13.4.2   Ein nicht blockierender, zeilenorientierter Server    409
   13.4.3   Das Modul IO::SessionData    412
   13.4.4   Das Modul IO::SessionSet    421
   13.4.5   Die Klassen IO::LineBufferedSet und IO::LineBufferedSessionData    428
   13.4.6   IO::SessionSet mit Handles verwenden, die keine Sockets sind    430
13.5   Nicht blockierende connect()- und accept()-Aufrufe    433
   13.5.1   Der IO::Socket-Parameter Timeout    433
   13.5.2   Nicht blockierendes connect()    434
   13.5.3   Mehrere gleichzeitige connect()-Aufrufe    437
   13.5.4   Ein einfacher HTTP-Client    437
   13.5.5   Das Modul HTTPFetch    441
   13.5.6   Nicht blockierende accept()-Aufrufe    447
13.6   Zusammenfassung    448

14   Absichern von Servern

14.1   Das System Log verwenden    449
   14.1.1   Über UNIX-Syslog    450
   14.1.2   Sys::Syslog    452
   14.1.3   Logging zum Psychotherapie-Server hinzufügen    453
   14.1.4   Logging mit warn() und die()    459
   14.1.5   Event Log auf der Win32-Plattform verwenden    460
   14.1.6   Direktes Logging in eine Datei    461
14.2   Benutzerprivilegien setzen    465
   14.2.1   User- und Group-ID ändern    465
   14.2.2   Den Psychotherapie-Server als Root starten    467
14.3   Der Taint-Modus    470
   14.3.1   Den Taint-Modus verwenden    472
14.4   chroot() verwenden    473
   14.4.1   chroot() zum Psychotherapie-Server hinzufügen    473
14.5   Die Verarbeitung von HUP und anderen Signalen    475
   14.5.1   Änderungen am Haupt-Skript    476
   14.5.2   Änderungen am Modul Daemon    479
14.6   Zusammenfassung    486

15   Preforking und Prethreading

15.1   Preforking    489
   15.1.1   Ein Webserver    491
   15.1.2   Ein Webserver, der Anfragen nacheinander verarbeitet    497
   15.1.3   Ein Webserver mit Akzeptieren und Forking    497
   15.1.4   Der Preforking-Webserver, Version 1    500
   15.1.5   Der Preforking-Webserver, Version 2    502
   15.1.6   Ein anpassungsfähiger Preforking-Server    506
   15.1.7   Ein anpassungsfähiger Preforking-Server, der gemeinsamen Speicher verwendet    514
15.2   Prethreading    521
   15.2.1   Ein Threading-Webserver    521
   15.2.2   Ein einfacher Prethreading-Server    523
   15.2.3   Anpassungsfähiges Prethreading    524
   15.2.4   Das Modul NetServer::Generic    529
15.3   Performance-Messungen    530
15.4   Zusammenfassung    531

16   IO::Poll

16.1   IO::Poll verwenden    533
16.2   IO::Poll-Ereignisse    535
   16.2.1   IO::Poll-Methoden    536
   16.2.2   Ein nicht blockierender TCP-Client, der IO::Poll verwendet    537
16.3   Zusammenfassung    541

17   TCP Urgent Data

17.1   »Out-of-Band«-Daten und der Urgent-Zeiger    545
17.2   TCP Urgent Data verwenden    547
   17.2.1   Die Option SO_OOBLINE    550
   17.2.2   select() mit Urgent Data verwenden    552
17.3   Die Funktion sockatmark()    553
   17.3.1   sockatmark() implementieren    554
17.4   Ein Travesty-Server    556
   17.4.1   Das Modul Text::Travesty    557
   17.4.2   Das Travesty-Server-Design    558
   17.4.3   Der Travesty-Client    564
   17.4.4   Den Travesty-Server testen    569
   17.4.5   Das Modul IO::Sockatmark    570
17.5   Zusammenfassung    570

18   Das UDP-Protokoll

18.1   Ein Daytime-Client    573
18.2   UDP-Sockets erzeugen und verwenden    576
   18.2.1   UDP-Socket-Erzeugung    576
18.3   Die Funktionen send() und recv()    576
   18.3.1   Ein UDP-Socket binden    577
   18.3.2   Ein UDP-Socket »verbinden«    577
18.4   UDP-Fehler    578
   18.4.1   Asynchrone Fehler    578
   18.4.2   Ausgelassene Pakete und Fragmentierung    579
18.5   UDP-Sockets mit IO::Socket verwenden    579
   18.5.1   Daytime-Client, der IO::Socket verwendet    580
18.6   Senden an mehrere Hosts    581
18.7   UDP-Server    584
   18.7.1   Ein UDP-Umkehr-Echo-Server    585
   18.7.2   UDP-Echo-Client    586
18.8   Die Stabilität von UDP-Anwendungen steigern    588
   18.8.1   Timeout beim Empfang von UDP    589
   18.8.2   Duplikate und Datagramme in der falschen Reihenfolge    591
18.9   Zusammenfassung    597

19   UDP-Server

19.1   Ein Internet-Chat-System    599
   19.1.1   Eine Beispiel-Sitzung    599
   19.1.2   Chat-System-Aufbau    601
19.2   Der Chat-Client    603
   19.2.1   Das Modul ChatObjects::Comm    611
   19.2.2   Das Modul ChatObjects::ChatCodes    613
19.3   Der Chat-Server    614
   19.3.1   Das Hauptskript des Servers    614
   19.3.2   Die Klasse ChatObjects::User    617
   19.3.3   Die Klasse ChatObjects::Channel    623
19.4   Beendete Clients ausfindig machen    626
   19.4.1   STILL_HERE-Ereignisse zum Chat-System hinzufügen    627
   19.4.2   Änderungen an ChatObjects::ChatCodes    627
   19.4.3   Die Unterklasse ChatObjects::TimedUser    628
   19.4.4   Das geänderte Programm chat_client.pl    628
   19.4.5   Das geänderte Programm chat_server.pl    630
19.5   Zusammenfassung    633

20   Broadcasting

20.1   Unicasting kontra Broadcasting    635
20.2   Broadcasting näher erklärt    636
   20.2.1   Broadcast-Anwendungen    637
20.3   Broadcasts senden und empfangen    637
   20.3.1   Broadcasts senden    638
   20.3.2   Broadcasts empfangen    641
20.4   Broadcasting ohne Broadcast-Adresse    642
   20.4.1   Die »Nur-Einser«-Broadcast-Adresse    642
   20.4.2   Broadcast-fähige Schnittstellen während der Laufzeit ermitteln    643
   20.4.3   Das Modul IO::Interface    644
   20.4.4   Schrittweise Erläuterung von IO::Interface    646
20.5   Den Chat-Client mit der Fähigkeit der Ressourcen-Findung ausstatten    654
20.6   Zusammenfassung    656

21   Multicasting

21.1   Multicasting-Grundlagen    659
   21.1.1   Reservierte Multicast-Adressen    660
   21.1.2   Multicast-Adressen und Hardwarefilterung    661
   21.1.3   Multicasting durch WANs    662
   21.1.4   Multicast-TTLs    663
21.2   Multicast verwenden    665
   21.2.1   Multicast-Nachrichten versenden    665
   21.2.2   Socket-Optionen für den Multicast-Versand    666
   21.2.3   Multicast-Nachrichten erhalten    668
   21.2.4   Das Modul IO::Socket::Multicast    669
21.3   Multicast-Beispielanwendungen    674
   21.3.1   Multicasting-Daytime-Server    675
   21.3.2   Multicast-Daytime-Client    676
   21.3.3   Multicast-Chat-System    678
   21.3.4   Zusammenfassung    690

22   UNIX-Domain-Sockets

22.1   UNIX-Domain-Sockets verwenden    691
   22.1.1   Die funktionsorientierte Schnittstelle für UNIX-Domain-Sockets    692
   22.1.2   Die objektorientierte Schnittstelle für UNIX-Domain-Sockets    694
   22.1.3   UNIX-Domain-Sockets und Dateirechte    695
22.2   Ein »Umbruch«-Server    696
   22.2.1   Der Text::Wrap-Server    696
   22.2.2   Der Text::Wrap-Client    699
22.3   Die Verwendung von UNIX-Domain-Sockets für Datagramme    700
   22.3.1   UNIX-Domain-Daytime-Server    701
   22.3.2   UNIX-Domain-Daytime-Client    703
22.4   Zusammenfassung    705

Anhang A   Zusätzlicher Quellcode

A.1   Net::NetmaskLite (Kapitel 3)    707
A.2   PromptUtil.pm (Kapitel 8 und 9)    710
A.3   IO::LineBufferedSet (Kapitel 13)    714
A.4   IO::LineBufferedSessionData (Kapitel 13)    717
A.5   DaemonDebug (Kapitel 14)    725
A.6   Text::Travesty (Kapitel 17)    727
A.7   mchat_client.pl (Kapitel 21)    731

Anhang B   Perl-Fehlercodes und spezielle Variablen

B.1   Systemfehler-Konstanten    737
B.2   Magische Variablen, die I/O betreffen    741
B.3   Weitere globale Perl-Variablen    742

Anhang C   Internet-Referenztabellen

C.1   Zugewiesene Port-Nummern    745
C.2   Registrierte Portnummern    766
C.3   Internet-Multicast-Adressen    784

Anhang D   Bibliographie

D.1   Perl-Programmierung    787
   D.1.1   Bücher    787
   D.1.2   Online-Ressourcen    787
D.2   TCP/IP und Berkeley Sockets    787
   D.2.1   Bücher    787
   D.2.2   Online-Ressourcen    788
D.3   Netzwerk-Server-Design    788
D.4   Multicasting    788
   D.4.1   Bücher    788
   D.4.2   Online-Ressourcen    789
D.5   Anwendungsprotokolle    789
   D.5.1   FTP    789
   D.5.2   Telnet    789
   D.5.3   Secure Shell    789
   D.5.4   SMTP    790
   D.5.5   MIME    790
   D.5.6   POP    790
   D.5.7   IMAP    791
   D.5.8   NNTP    791
   D.5.9   HTTP, HTML und XML    791
   D.5.10   Netzwerk-Sicherheit    792

No Software Patents!

Ihre Werbung hier?
    
    www.lingoworld.de
    webmaster@lingoworld.de
    © Copyright 2004-2007 by Lingoworld IT Services, Köln
    designed by Tülay Kersken
    Impressum