Suchen und Finden
Vorwort
5
Inhaltsverzeichnis
9
Beispielprogramme
13
1 Einführung
16
1.1 TCP/IP-Grundlagen
17
1.1.1 Netzwerkschicht
18
1.1.2 Internet-Schicht
19
1.1.3 Transportschicht
20
1.1.4 Anwendungsschicht
21
1.2 Internet-Standards
21
1.3 Unix-Standards
22
2 Programmieren mit Unix-Prozessen
24
2.1 Unix-Prozesse
24
2.1.1 Prozeßgruppen und Sessions
25
2.1.2 Kontrollierendes Terminal
27
2.1.3 Verwaiste Prozesse und verwaiste Prozeßgruppen
28
2.1.4 Prozeßumgebung
29
2.1.5 Lebenszyklus
30
2.1.6 User- und Gruppen-ID
35
2.2 Ein- und Ausgabe
36
2.2.1 Dateideskriptoren
36
2.2.2 Elementare Ein- und Ausgabe
39
2.2.3 Standardeingabe und -ausgabe
50
2.2.4 Ausgabe über den Syslog- Dienst
56
2.3 Buffer-Overflows und Format-String-Schwachstellen
60
2.3.1 Buffer-Overflows
62
2.3.2 Format-String-Schwachstellen
69
2.3.3 Geeignete Gegenmaßnahmen
72
2.4 Signale
73
2.4.1 Signale behandeln
74
2.4.2 Signale blockieren
83
2.4.3 Signale annehmen
87
2.4.4 Signale generieren
89
2.5 Prozeflkontrolle
91
2.5.1 Was bin ich? Prozeß-IDs und mehr
92
2.5.2 Neue Prozesse erzeugen
94
2.5.3 Prozesse synchronisieren
98
2.5.4 Zombie-Prozesse
104
2.5.5 Andere Programme ausführen
105
2.5.6 User- und Group-IDs wechseln
109
2.6 Dæmon-Prozesse
111
3 Programmieren mit POSIX-Threads
118
3.1 Grundlagen
119
Ready:
124
Running:
124
Blocked:
124
Terminated:
124
3.2 Synchronisation
130
3.2.1 Race Conditions und kritische Bereiche
131
3.2.2 Gegenseitiger Ausschluß
135
Mutexe erstellen und verwerfen
135
Mutexe sperren und wieder freigeben
136
Mutexe praktisch einsetzen
137
3.2.3 Bedingungsvariablen
141
Bedingungsvariablen erstellen und verwerfen
141
Auf Bedingungsvariablen warten
142
Bedingungsvariablen signalisieren
144
Mutexe und Bedingungsvariablen einsetzen
145
3.3 Pthreads und Unix-Prozesse
150
3.3.1 Threadsichere und eintrittsinvariante Funktionen
150
Threadsicherheit:
150
Eintrittsinvarianz:
150
3.3.2 Fehlerbehandlung und errno
152
3.3.3 Signalverarbeitung
153
3.3.4 fork() und exec() in Pthreads-Programmen
159
4 Grundlagen der Socket-Programmierung
162
4.1 Erste Schritte mit telnet und inetd
162
4.1.1 Das telnet-Kommando als Netzwerk-Client
162
Beliebige Dienste ansprechen
163
Kommunikation mit einem Mailserver
164
Zusammenfassung
166
4.1.2 Einfache Netzwerkdienste mit dem inetd
167
4.2 IP-Namen und IP-Adressen
171
4.2.1 Das Domain Name System
172
4.2.2 IPv4-Adressen
174
Klasse A:
175
Klasse B:
176
Klasse C:
176
Klasse D:
176
Klasse E:
177
CIDR – Classless Inter-Domain Routing
177
Private IP-Adressen
178
4.2.3 IPv6-Adressen
179
4.3 Sockets
194
4.3.1 Socket anlegen
195
4.3.2 Socket-Strukturen
197
IPv4 Socket-Adreßstruktur
197
IPv6 Socket-Adreßstruktur
197
Generische Socket-Adreßstrukturen
198
4.3.3 Client-seitiger TCP-Verbindungsaufbau
199
4.3.4 Socket-Adressen zuweisen
204
4.3.5 Annehmende Sockets
207
4.3.6 TCP-Verbindungen annehmen
209
4.3.7 Drei-Wege-Handshake und TCP-Zustandsübergänge
214
4.3.8 Kommunikation über UDP
220
4.3.9 Standardeingabe und -ausgabe über Sockets
227
4.3.10 Socket-Adressen ermitteln
228
4.3.11 Multiplexing von Netzwerkverbindungen
233
4.3.12 Socket-Optionen
238
4.4 Namensaulösung
242
5 Netzwerkprogrammierung in der Praxis
250
5.1 Aufbau der Testumgebung
251
5.1.1 Funktionsumfang der Testumgebung
252
5.1.2 Hilfsfunktionen für die Socket- Kommunikation
253
5.1.3 Der Test-Client
264
5.2 Iterative Server
270
5.2.1 Sequentielle Verarbeitung der Anfragen
271
5.2.2 Clientbehandlung
274
5.2.3 Hilfsfunktionen zur Laufzeitmessung
277
5.2.4 Eigenschaften und Einsatzgebiete
279
5.3 Nebenläufige Server mit mehreren Threads
281
5.3.1 Abgewandelte Signalbehandlung
282
5.3.2 Ein neuer Thread pro Client
283
5.3.3 Das Hauptprogramm als Signalverarbeiter
285
5.3.4 Eigenschaften und Einsatzgebiete
287
5.4 Nebenläufige Server mit Prethreading
289
5.4.1 Clientbehandlung mittels paralleler Accept-Handler
290
5.4.2 Das Hauptprogramm als Signalverarbeiter
292
5.4.3 Eigenschaften und Einsatzgebiete
294
5.5 Nebenläufige Server mit mehreren Prozessen
296
5.5.1 Anpassung der Signalbehandlung
297
5.5.2 Ein neuer Prozeß pro Client
299
5.5.3 Das Hauptprogramm
301
5.5.4 Eigenschaften und Einsatzgebiete
302
5.6 Nebenläufige Server mit Preforking
304
5.6.1 Buchführende Signalbehandlung
305
5.6.2 Parallele Accept-Handler in mehreren Prozessen
307
5.6.3 Preforking im Hauptprogramm
309
5.6.4 Eigenschaften und Einsatzgebiete
311
5.7 Zusammenfassung
313
6 Netzwerkprogrammierung mit SSL
316
6.1 Strategien zur Absicherung des Datenverkehrs
317
6.1.1 Datenverschlüsselung
319
6.1.2 Hashfunktionen und Message Authentication Codes
322
6.1.3 Digitale Signaturen
323
6.1.4 Zertifizierungsstellen und digitale Zertifikate
324
6.1.5 Praktische Absicherung des Datenverkehrs
325
6.2 SSL-Grundlagen
328
6.2.1 Datentransfer über SSL
329
6.2.2 Anwendungsprotokolle um SSL erweitern
332
6.2.3 SSL-Verbindungen interaktiv testen
336
6.3 OpenSSL-Basisfunktionalität
338
6.3.1 Das Konzept der BIO-API
339
6.3.2 Lebenszyklus von BIO-Objekten
340
6.3.3 Ein-/Ausgabe über BIO-Objekte
341
6.3.4 BIO-Quellen/Senken und BIO-Filter
344
6.3.5 Fehlerbehandlung
357
6.3.6 Thread-Support
360
6.3.7 Pseudozufallszahlengenerator
367
7 Client-/Server-Programmierung mit OpenSSL
372
7.1 Initialisierung der ssl-Bibliothek
372
7.2 Der SSL-Kontext
374
7.2.1 Ein unvollständiger SSMTP- Client
375
7.2.2 SSL-Optionen, SSL-Modi und Chiffrenfolgen
379
7.3 Sicherer Umgang mit X.509-Zertifikaten
383
7.3.1 Zertifikatsüberprüfung aktivieren
387
7.3.2 Zertifikatsüberprüfung per Callback nachbereiten
389
7.3.3 Identitätsabgleich mit digitalen Zertifikaten
395
7.3.4 SSL-Kommunikation mit eigener Identität
402
7.4 Client-/Server-Beispiel: SMTP mit SARTTLS
404
7.4.1 Ein SMTP-Client mit STARTTLS
404
7.4.2 Ein SMTP-Server mit STARTTLS
412
7.5 Zusammenfassung
421
Anhang
424
A.1 Zertifikate erstellen mit OpenSSL
424
A.1.1 Aufbau einer Zerti.zierungsstelle
424
Erzeugen eines geheimen CA-Schl ¨ ussels
425
Erzeugen des CA-Zerti.kats
425
CA-Dateien speichern
426
A.1.2 Neue Zerti.kate ausstellen
427
Certi.cate Signing Request erzeugen
427
Certi.cate Signing Request signieren
428
A.1.3 Vertrauensw ¨ urdige Zerti . zierungsstellen
429
A.2 Barrieren mit POSIX-Threads
430
Literaturverzeichnis
438
Sachverzeichnis
442
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.