[diapublication, avec suivi vers fr.comp.reseaux.ip seul]
Bonjour,
Pour remplacer un gethostbyaddr en C, je voudrais savoir si les deux
méthodes suivantes sont équivalentes, et sinon quelle diffà ©rence
il y a entre les deux :
1) faire un getaddrinfo suivi d'un getnameinfo du premier résultat ;
2) faire un getaddrinfo avec AI_CANONNAME et récupérer le ai_ca nonname.
Cordialement,
[diapublication, avec suivi vers fr.comp.reseaux.ip seul]
Bonjour,
Pour remplacer un gethostbyaddr en C, je voudrais savoir si les deux
méthodes suivantes sont équivalentes, et sinon quelle diffà ©rence
il y a entre les deux :
1) faire un getaddrinfo suivi d'un getnameinfo du premier résultat ;
2) faire un getaddrinfo avec AI_CANONNAME et récupérer le ai_ca nonname.
Cordialement,
[diapublication, avec suivi vers fr.comp.reseaux.ip seul]
Bonjour,
Pour remplacer un gethostbyaddr en C, je voudrais savoir si les deux
méthodes suivantes sont équivalentes, et sinon quelle diffà ©rence
il y a entre les deux :
1) faire un getaddrinfo suivi d'un getnameinfo du premier résultat ;
2) faire un getaddrinfo avec AI_CANONNAME et récupérer le ai_ca nonname.
Cordialement,
C'est traité dans la RFC 2553.
C'est traité dans la RFC 2553.
C'est traité dans la RFC 2553.
getnameinfo() permet (entre autres) de récupérer un enregistrement PTR
relatif à une adresse. L'équivalent de gethostbyaddr(), en d'autres
mots.
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire après éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est traité dans la RFC 2553 [remplacée par la RFC 3493]
getnameinfo() permet (entre autres) de récupérer un enregistrement PTR
relatif à une adresse. L'équivalent de gethostbyaddr(), en d'autres
mots.
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire après éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est traité dans la RFC 2553 [remplacée par la RFC 3493]
getnameinfo() permet (entre autres) de récupérer un enregistrement PTR
relatif à une adresse. L'équivalent de gethostbyaddr(), en d'autres
mots.
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire après éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est traité dans la RFC 2553 [remplacée par la RFC 3493]
De plus, on me dit dans l'oreillette que ce module[1] Perl vient avec
deux scripts, getaddrinfo et getnameinfo.
De plus, on me dit dans l'oreillette que ce module[1] Perl vient avec
deux scripts, getaddrinfo et getnameinfo.
De plus, on me dit dans l'oreillette que ce module[1] Perl vient avec
deux scripts, getaddrinfo et getnameinfo.
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dès que
je serai arrivé au boulot.
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dès que
je serai arrivé au boulot.
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dès que
je serai arrivé au boulot.
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire apr ès éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est là que je m'aperçois que j'avais oublié un déta il important dans
ma question : je ne m'intéresse qu'au cas où la requête po rte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire apr ès éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est là que je m'aperçois que j'avais oublié un déta il important dans
ma question : je ne m'intéresse qu'au cas où la requête po rte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
AI_CANONNAME permet d'avoir, en plus de l'adresse, le nom exact sous
lequel le résolveur a trouvé l'adresse, c'est à dire apr ès éventuel
ajout d'un suffixe DNS et processing d'alias.
Je pense qu'on peut formuler ça de manière plus claire et plus précise,
mais ça s'illustre bien comme ça :
~$ # ajout d'un suffixe DNS
~$ ./gani www
getaddrinfo + AI_CANONNAME: www.wxcvbn.org
getnameinfo: coloc.wxcvbn.org
~$ # processing d'un alias (CNAME)
~$ ./gani www.kame.net
getaddrinfo + AI_CANONNAME: orange.kame.net
getnameinfo: orange.kame.net
~$
C'est là que je m'aperçois que j'avais oublié un déta il important dans
ma question : je ne m'intéresse qu'au cas où la requête po rte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
Le 24/01/2013 09:12, je répondais à Jérémie :
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dà ¨s que
je serai arrivé au boulot.
Je l'ai lue.
Non seulement je n'y ai pas trouvé la réponse à ma questio n, mais
cela m'a fait me poser deux autres questions. Bon, il y en a une
pour laquelle je pense avoir trouvé la réponse.
======================== ========================= ======================
1)
<http://tools.ietf.org/html/rfc3493#page-25>
The ai_flags field to which hints parameter points shall be set to
zero or be the bitwise-inclusive OR of one or more of the values
AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST, AI_NUMERICSERV,
AI_V4MAPPED, AI_ALL, and AI_ADDRCONFIG.
</>
Je viens de regarder les fichiers netdb.h de plusieurs Linux et
plusieurs SunOS (je n'arrive pas à me connecter sur les AIX en ce
moment), et tous ont AI_NUMERICHOST mais pas AI_NUMERICSERV.
Je ne comprenais pas pourquoi jusqu'à ce que je voie que ce n'é tait
pas prévu dans la RFC 2553, et que les OS des machines en question
sont assez vieux.
======================== ========================= ======================
2)
<http://tools.ietf.org/html/rfc3493#page-24>
If hints is a null pointer, the behavior
shall be as if it referred to a structure containing the value zero
for the ai_flags, ai_socktype and ai_protocol fields, and AF_UNSPEC
for the ai_family field.
</>
<http://tools.ietf.org/html/rfc2553#page-28>
If the third argument to
getaddrinfo() is a NULL pointer, this is the same as if the caller
had filled in an addrinfo structure initialized to zero with
ai_family set to PF_UNSPEC.
</>
Ceci est en contradiction avec la page de man suivante :
<http://manpagesfr.free.fr/man/man3/getaddrinfo.3.html>
Spécifier hints à NULL est équivalent à définir ai_socktype et
ai_protocol à 0, ai_family à AF_UNSPEC et ai_flags à (AI_V 4MAPPED |
AI_ADDRCONFIG).
</>
C'est aussi un problème de version ?
======================== ========================= ======================
Cordialement,
Le 24/01/2013 09:12, je répondais à Jérémie :
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dà ¨s que
je serai arrivé au boulot.
Je l'ai lue.
Non seulement je n'y ai pas trouvé la réponse à ma questio n, mais
cela m'a fait me poser deux autres questions. Bon, il y en a une
pour laquelle je pense avoir trouvé la réponse.
======================== ========================= ======================
1)
<http://tools.ietf.org/html/rfc3493#page-25>
The ai_flags field to which hints parameter points shall be set to
zero or be the bitwise-inclusive OR of one or more of the values
AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST, AI_NUMERICSERV,
AI_V4MAPPED, AI_ALL, and AI_ADDRCONFIG.
</>
Je viens de regarder les fichiers netdb.h de plusieurs Linux et
plusieurs SunOS (je n'arrive pas à me connecter sur les AIX en ce
moment), et tous ont AI_NUMERICHOST mais pas AI_NUMERICSERV.
Je ne comprenais pas pourquoi jusqu'à ce que je voie que ce n'é tait
pas prévu dans la RFC 2553, et que les OS des machines en question
sont assez vieux.
======================== ========================= ======================
2)
<http://tools.ietf.org/html/rfc3493#page-24>
If hints is a null pointer, the behavior
shall be as if it referred to a structure containing the value zero
for the ai_flags, ai_socktype and ai_protocol fields, and AF_UNSPEC
for the ai_family field.
</>
<http://tools.ietf.org/html/rfc2553#page-28>
If the third argument to
getaddrinfo() is a NULL pointer, this is the same as if the caller
had filled in an addrinfo structure initialized to zero with
ai_family set to PF_UNSPEC.
</>
Ceci est en contradiction avec la page de man suivante :
<http://manpagesfr.free.fr/man/man3/getaddrinfo.3.html>
Spécifier hints à NULL est équivalent à définir ai_socktype et
ai_protocol à 0, ai_family à AF_UNSPEC et ai_flags à (AI_V 4MAPPED |
AI_ADDRCONFIG).
</>
C'est aussi un problème de version ?
======================== ========================= ======================
Cordialement,
Le 24/01/2013 09:12, je répondais à Jérémie :
Merci pour le pointeur vers la RFC 3493, je vais regarder ça dà ¨s que
je serai arrivé au boulot.
Je l'ai lue.
Non seulement je n'y ai pas trouvé la réponse à ma questio n, mais
cela m'a fait me poser deux autres questions. Bon, il y en a une
pour laquelle je pense avoir trouvé la réponse.
======================== ========================= ======================
1)
<http://tools.ietf.org/html/rfc3493#page-25>
The ai_flags field to which hints parameter points shall be set to
zero or be the bitwise-inclusive OR of one or more of the values
AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST, AI_NUMERICSERV,
AI_V4MAPPED, AI_ALL, and AI_ADDRCONFIG.
</>
Je viens de regarder les fichiers netdb.h de plusieurs Linux et
plusieurs SunOS (je n'arrive pas à me connecter sur les AIX en ce
moment), et tous ont AI_NUMERICHOST mais pas AI_NUMERICSERV.
Je ne comprenais pas pourquoi jusqu'à ce que je voie que ce n'é tait
pas prévu dans la RFC 2553, et que les OS des machines en question
sont assez vieux.
======================== ========================= ======================
2)
<http://tools.ietf.org/html/rfc3493#page-24>
If hints is a null pointer, the behavior
shall be as if it referred to a structure containing the value zero
for the ai_flags, ai_socktype and ai_protocol fields, and AF_UNSPEC
for the ai_family field.
</>
<http://tools.ietf.org/html/rfc2553#page-28>
If the third argument to
getaddrinfo() is a NULL pointer, this is the same as if the caller
had filled in an addrinfo structure initialized to zero with
ai_family set to PF_UNSPEC.
</>
Ceci est en contradiction avec la page de man suivante :
<http://manpagesfr.free.fr/man/man3/getaddrinfo.3.html>
Spécifier hints à NULL est équivalent à définir ai_socktype et
ai_protocol à 0, ai_family à AF_UNSPEC et ai_flags à (AI_V 4MAPPED |
AI_ADDRCONFIG).
</>
C'est aussi un problème de version ?
======================== ========================= ======================
Cordialement,
C'est là que je m'aperçois que j'avais oublié un détail important dans
ma question : je ne m'intéresse qu'au cas où la requête porte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
[...]
Il peut retourner à peu près tout ce qui est une valeur acceptable pour
un enregistrement PTR, une entrée de table hosts, etc. Exemple (g4 est
une machine sur mon lan).
~$ # avant modifs
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: g4.wxcvbn.org
~$ # bidouillage du /etc/hosts
~$ ./gani g4
getaddrinfo + AI_CANONNAME: foo
getnameinfo: foo
~$ # bidouillage du PTR
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: bar
La plupart du temps, quand une application vérifie le nom d'un client,
elle récupère le reverse avec getnameinfo() puis fait une requête sur ce
reverse avec getaddrinfo(), et regarde si l'adresse obtenue est la même.
C'est simplifié, car un système peut avoir plusieurs adresses et une
adresse peut avoir plusieurs enregistrements PTR.
C'est là que je m'aperçois que j'avais oublié un détail important dans
ma question : je ne m'intéresse qu'au cas où la requête porte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
[...]
Il peut retourner à peu près tout ce qui est une valeur acceptable pour
un enregistrement PTR, une entrée de table hosts, etc. Exemple (g4 est
une machine sur mon lan).
~$ # avant modifs
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: g4.wxcvbn.org
~$ # bidouillage du /etc/hosts
~$ ./gani g4
getaddrinfo + AI_CANONNAME: foo
getnameinfo: foo
~$ # bidouillage du PTR
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: bar
La plupart du temps, quand une application vérifie le nom d'un client,
elle récupère le reverse avec getnameinfo() puis fait une requête sur ce
reverse avec getaddrinfo(), et regarde si l'adresse obtenue est la même.
C'est simplifié, car un système peut avoir plusieurs adresses et une
adresse peut avoir plusieurs enregistrements PTR.
C'est là que je m'aperçois que j'avais oublié un détail important dans
ma question : je ne m'intéresse qu'au cas où la requête porte sur une
adresse IP (v4 ou v6) et pas sur un nom DNS. Est-ce que dans ce cas
le getnameinfo pourrait retourner un nom sans suffixe DNS, ou un alias,
au lieu de l'adresse canonique ?
[...]
Il peut retourner à peu près tout ce qui est une valeur acceptable pour
un enregistrement PTR, une entrée de table hosts, etc. Exemple (g4 est
une machine sur mon lan).
~$ # avant modifs
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: g4.wxcvbn.org
~$ # bidouillage du /etc/hosts
~$ ./gani g4
getaddrinfo + AI_CANONNAME: foo
getnameinfo: foo
~$ # bidouillage du PTR
~$ ./gani g4
getaddrinfo + AI_CANONNAME: g4.wxcvbn.org
getnameinfo: bar
La plupart du temps, quand une application vérifie le nom d'un client,
elle récupère le reverse avec getnameinfo() puis fait une requête sur ce
reverse avec getaddrinfo(), et regarde si l'adresse obtenue est la même.
C'est simplifié, car un système peut avoir plusieurs adresses et une
adresse peut avoir plusieurs enregistrements PTR.
[ai_flags par défaut vaut 0 selon les RFC, mais
(AI_V4MAPPED | AI_ADDRCONFIG) selon un man(3)]
C'est aussi un problème de version ?
Je dirais plutôt un choix d'implémentation de la part des développeurs
de la glibc. AI_ADDRCONFIG (par défaut) a sans doute du sens, par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].
Perso j'aime utiliser mes propres hints même pour des petites applis,
entre autres pour supporter des options telles que -4 ou -6 (choix de la
famille d'adresse).
[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
[ai_flags par défaut vaut 0 selon les RFC, mais
(AI_V4MAPPED | AI_ADDRCONFIG) selon un man(3)]
C'est aussi un problème de version ?
Je dirais plutôt un choix d'implémentation de la part des développeurs
de la glibc. AI_ADDRCONFIG (par défaut) a sans doute du sens, par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].
Perso j'aime utiliser mes propres hints même pour des petites applis,
entre autres pour supporter des options telles que -4 ou -6 (choix de la
famille d'adresse).
[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
[ai_flags par défaut vaut 0 selon les RFC, mais
(AI_V4MAPPED | AI_ADDRCONFIG) selon un man(3)]
C'est aussi un problème de version ?
Je dirais plutôt un choix d'implémentation de la part des développeurs
de la glibc. AI_ADDRCONFIG (par défaut) a sans doute du sens, par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].
Perso j'aime utiliser mes propres hints même pour des petites applis,
entre autres pour supporter des options telles que -4 ou -6 (choix de la
famille d'adresse).
[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
[...] par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
Deux liens très intéressants, un grand merci pour cela.
[...] par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].
[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
Deux liens très intéressants, un grand merci pour cela.
[...] par contre
les adresses v6 mappées font un peu moins consensus[1] et cette valeur
par défaut (AI_V4MAPPED) n'a pas de sens[2].[1] http://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful
[2] http://sourceware.org/bugzilla/show_bug.cgi?id415
Deux liens très intéressants, un grand merci pour cela.