Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL

von: Markus Zahn

Springer-Verlag, 2006

ISBN: 9783540383024 , 434 Seiten

Format: PDF, OL

Kopierschutz: Wasserzeichen

Windows PC,Mac OSX für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 6,28 EUR

Mehr zum Inhalt

Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL


 

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