05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

174 4 Gr<strong>und</strong>lagen der Socket-Programmierung<br />

$ ./bitwise ::ffff:c0a8:102<br />

IPv6 Adresse: ::ffff:c0a8:102<br />

00000000 00000000 00000000 00000000<br />

00000000 00000000 00000000 00000000<br />

00000000 00000000 11111111 11111111<br />

11000000 10101000 00000001 00000010<br />

IPv6 Adresse: ::ffff:192.168.1.2<br />

Ältere Funktionen zur Adreßumwandlung<br />

Vor der Verabschiedung von IEEE Std 1003.1-2001 mußte man zur Umwandlung<br />

von IP-Adressen zwischen der Text- <strong>und</strong> Netzwerkdarstellung auf die<br />

Funktionen inet_aton(), inet_addr() <strong>und</strong> inet_ntoa() zurückgreifen. Die<br />

drei Funktionen sind allerdings nur in der Lage, IPv4-Adressen zu behandeln,<br />

weshalb sie hier nur aus Gründen der Vollständigkeit kurz besprochen werden.<br />

In neuen Anwendungen sollten Sie anstatt der alten Funktionen immer die<br />

neuen Varianten inet_pton() <strong>und</strong> inet_ntop() einsetzen.<br />

#include<br />

<br />

int inet_aton( const char *cp, struct in_addr *inp );<br />

in_addr_t inet_addr( const char *cp );<br />

char *inet_ntoa( struct in_addr in );<br />

Wie schon beim Funktionenpaar inet_pton() <strong>und</strong> inet_ntop() lassen sich<br />

die Aufgaben der drei Funktionen an ihren Namen ableiten: Mit inet_aton()<br />

wird eine IPv4-Adresse aus der ASCII-Darstellung in die zugehörige Netzwerkdarstellung<br />

transformiert. Die gleiche Aufgabe übernimmt inet_addr(). Umgekehrt<br />

wandelt inet_ntoa() eine in Netzwerkdarstellung vorliegende IPv4-<br />

Adresse wieder in ein lesbares ASCII-Format um.<br />

inet_addr() erwartet als einziges Argument eine IPv4-Adresse in Textdarstellung,<br />

d. h. in der typischen gepunkteten Dezimaldarstellung. Die Funktion<br />

liefert im Erfolgsfall eine 32 Bit lange IPv4-Adresse in Netzwerkdarstellung.<br />

Andernfalls wird von inet_addr() der Wert (in_addr_t)(-1) zurückgegeben.<br />

Unglücklicherweise entspricht dieser Rückgabewert (alle 32 Bits<br />

sind auf 1 gesetzt) gleichzeitig der Netzwerkdarstellung der IPv4-Broadcast-<br />

Adresse 255.255.255.255, was eine Behandlung der Broadcast-Adresse <strong>mit</strong><br />

inet_addr() verhindert.<br />

Die Funktion inet_aton() umkurvt dieses Problem, indem sie die Übergabe<br />

der IP-Adresse vom Rückgabewert der Funktion entkoppelt. In einem<br />

zweiten Argument erwartet inet_aton() einen Zeiger auf eine in_addr-<br />

Datenstruktur. Darin wird bei erfolgreicher Bearbeitung die in Netzwerkdarstellung<br />

transformierte IPv4-Adresse hinterlegt. Im Erfolgsfall liefert die Umwandlungsfunktion<br />

den Wert 1, andernfalls den Wert 0 zurück.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!