Gegenanzeigen
Eine Reihe von Funktionen sollte der Programmierer unbedingt vermeiden, wenn er IPv6-kompatible Software schreiben möchte. Das sind alle Funktionen, die eine »struct in_addr«
als Parameter erwarten oder zurückliefern (siehe Listing 3). Für »inet_aton()«
und »inet_ntoa()«
, welche die numerische Ascii-Repräsentation und die »struct in_addr«
ineinander umwandeln, gibt es die alternativen Funktionen »inet_pton()«
und »inet_ntop()«
, die einen zusätzlichen Parameter für die Adressenfamile erwarten und auch mit »in6_addr«
-Strukturen umgehen können (Listing 4).
Listing 3
IPv6-inkompatible Funktionen
01 int inet_aton(const char *cp, struct in_addr *inp); 02 in_addr_t inet_addr(const char *cp); 03 in_addr_t inet_network(const char *cp); 04 char *inet_ntoa(struct in_addr in); 05 struct in_addr inet_makeaddr(int net, int host); 06 in_addr_t inet_lnaof(struct in_addr in); 07 in_addr_t inet_netof(struct in_addr in);
Listing 4
inet_pton und inet_ntop
01 int inet_pton(int af, const char *src, void *dst); 02 const char *inet_ntop(int af, const void *src, 03 char *dst, socklen_t size);
Python
Python enthält seit Version 2.2 die Funktion »getaddrinfo()«
im Standardmodul »socket«
[4]. Die Umsetzung auf eine Skriptsprache ist hier gut gelungen, weil die hässliche Eigenschaft von C, unbenutzte Parameter in der »hints«
- beziehungsweise »res«
-Struktur zu haben, in Python entfällt. Die Funktion der Hints-Struktur aus dem C-Interface übernehmen in Python optionale Parameter:
socket.getaddrinfo(host, port,family=0,socktype=0, proto=0, flags=0)
Die notwendigen »AF_«
- und »AI_«
-Konstanten befinden sich ebenfalls im Socketmodul. Als Rückgabewert liefert »socket.getaddrinfo()«
eine Liste von 5-Tupeln der folgenden Form zurück:
(family, socktype, proto, canonname, sockaddr)
Dabei sind die ersten drei Parameter jene, die der Programmierer an »socket.socket()«
weitergeben kann, um ein Socketobjekt zu erstellen. Der »canonname«
liefert den kanonischen Namen, falls über »flags«
angefordert.
Der letzte Parameter »sockaddr«
entspricht dem Feld »ai_addr«
, Python liefert ihn als Tupel zurück, das je nach Adressenfamilie eine andere Länge besitzt. Der erste Eintrag dieser Tupel ist immer ein String, der aus der IP-Adresse in numerischer Notation besteht, der zweite Eintrag ist stets die Portnummer. Für IPv6 kommen noch die Einträge »flow info«
und »scope id«
hinzu. In beiden Fällen kann man diese Tupel als Parameter für die Socketmethoden »bind()«
und »connect()«
verwenden.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 7 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





