Comment remplacer ioctl(SIOCGIFCONF) par if_nameindex() ?
7 réponses
Olivier Miakinen
Bonjour,
Parmi les bouts de code qui ne fonctionneront plus en IPv6,
j'en ai un qui détermine la liste des adresses IP du hôte.
Ce code utilise ioctl(..., SIOCGIFCONF, ...) sur Unix, et
un contournement utilisant gethostname() et gethostbyname()
existe pour Windows.
Une recherche sur la toile me laisse supposer que je devrais
pouvoir m'en sortir avec if_nameindex(), mais le man de cette
fonction ne me permet que de trouver les noms et numéros des
interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai
loupé quelque chose ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Erwan David
Olivier Miakinen <om+ écrivait :
Bonjour,
Parmi les bouts de code qui ne fonctionneront plus en IPv6, j'en ai un qui détermine la liste des adresses IP du hôte. Ce code utilise ioctl(..., SIOCGIFCONF, ...) sur Unix, et un contournement utilisant gethostname() et gethostbyname() existe pour Windows.
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Parmi les bouts de code qui ne fonctionneront plus en IPv6,
j'en ai un qui détermine la liste des adresses IP du hôte.
Ce code utilise ioctl(..., SIOCGIFCONF, ...) sur Unix, et
un contournement utilisant gethostname() et gethostbyname()
existe pour Windows.
Une recherche sur la toile me laisse supposer que je devrais
pouvoir m'en sortir avec if_nameindex(), mais le man de cette
fonction ne me permet que de trouver les noms et numéros des
interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai
loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo
http://en.wikipedia.org/wiki/Getaddrinfo
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Parmi les bouts de code qui ne fonctionneront plus en IPv6, j'en ai un qui détermine la liste des adresses IP du hôte. Ce code utilise ioctl(..., SIOCGIFCONF, ...) sur Unix, et un contournement utilisant gethostname() et gethostbyname() existe pour Windows.
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Olivier Miakinen
Le 25/05/2012 20:23, Erwan David m'a répondu :
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Cordialement, -- Olivier Miakinen
Le 25/05/2012 20:23, Erwan David m'a répondu :
Une recherche sur la toile me laisse supposer que je devrais
pouvoir m'en sortir avec if_nameindex(), mais le man de cette
fonction ne me permet que de trouver les noms et numéros des
interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai
loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo
http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface
dans cette fonction. Éventuellement ça pourrait être dans la
structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce
que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que
je mets selon le cas à AF_INET ou AF_INET6 ?
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Cordialement, -- Olivier Miakinen
Erwan David
Olivier Miakinen <om+ écrivait :
Le 25/05/2012 20:23, Erwan David m'a répondu :
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo) parceque tu avais mentionné gethostbyname, obsolète maintenant.
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Une recherche sur la toile me laisse supposer que je devrais
pouvoir m'en sortir avec if_nameindex(), mais le man de cette
fonction ne me permet que de trouver les noms et numéros des
interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai
loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo
http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface
dans cette fonction. Éventuellement ça pourrait être dans la
structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce
que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que
je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo)
parceque tu avais mentionné gethostbyname, obsolète maintenant.
--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Une recherche sur la toile me laisse supposer que je devrais pouvoir m'en sortir avec if_nameindex(), mais le man de cette fonction ne me permet que de trouver les noms et numéros des interfaces, pas leur adresse IP (v4 ou v6). Est-ce que j'ai loupé quelque chose ?
Point à côté :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo) parceque tu avais mentionné gethostbyname, obsolète maintenant.
-- Le travail n'est pas une bonne chose. Si ça l'était, les riches l'auraient accaparé
Olivier Miakinen
Le 25/05/2012 20:42, je répondais à Erwan David :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Si j'en crois la doc, ça ne peut pas fonctionner car nodename et servname ne peuvent pas être tous deux nuls. À moins qu'il n'y ait une exception à cette règle si l'on précise un numéro d'interface dans hints ?
Le 25/05/2012 20:42, je répondais à Erwan David :
En posix gethostbyname est remplacé par getaddrinfo
http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface
dans cette fonction. Éventuellement ça pourrait être dans la
structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce
que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que
je mets selon le cas à AF_INET ou AF_INET6 ?
Si j'en crois la doc, ça ne peut pas fonctionner car nodename et
servname ne peuvent pas être tous deux nuls. À moins qu'il n'y ait
une exception à cette règle si l'on précise un numéro d'interface
dans hints ?
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Si j'en crois la doc, ça ne peut pas fonctionner car nodename et servname ne peuvent pas être tous deux nuls. À moins qu'il n'y ait une exception à cette règle si l'on précise un numéro d'interface dans hints ?
Olivier Miakinen
Le 25/05/2012 20:59, Erwan David a écrit :
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo) parceque tu avais mentionné gethostbyname, obsolète maintenant.
Ah, ok. De toute manière la méthode Windows avec gethostname() et gethostbyname() n'était qu'une bidouille infâme, ne retournant qu'une seule adresse, et encore, seulement s'il en existe une de même nom que le nom de host (c'est souvent le cas, mais rien n'y oblige).
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Cordialement, -- Olivier Miakinen
Le 25/05/2012 20:59, Erwan David a écrit :
En posix gethostbyname est remplacé par getaddrinfo
http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface
dans cette fonction. Éventuellement ça pourrait être dans la
structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce
que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que
je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo)
parceque tu avais mentionné gethostbyname, obsolète maintenant.
Ah, ok. De toute manière la méthode Windows avec gethostname() et
gethostbyname() n'était qu'une bidouille infâme, ne retournant qu'une
seule adresse, et encore, seulement s'il en existe une de même nom
que le nom de host (c'est souvent le cas, mais rien n'y oblige).
Donc, la question reste posée : comment obtenir les adresses IP
(v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
En posix gethostbyname est remplacé par getaddrinfo http://en.wikipedia.org/wiki/Getaddrinfo
Certes, mais je ne vois nulle part où donner un numéro d'interface dans cette fonction. Éventuellement ça pourrait être dans la structure sockaddr_in6 (sin6_scope_id) de hints ? Si oui, est-ce que je mets tout à 0 sauf sin6_scope_id, et sauf sin6_family que je mets selon le cas à AF_INET ou AF_INET6 ?
Là je ne sais pas. Je mentionnais juste getaddrinfo (et getnameinfo) parceque tu avais mentionné gethostbyname, obsolète maintenant.
Ah, ok. De toute manière la méthode Windows avec gethostname() et gethostbyname() n'était qu'une bidouille infâme, ne retournant qu'une seule adresse, et encore, seulement s'il en existe une de même nom que le nom de host (c'est souvent le cas, mais rien n'y oblige).
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Cordialement, -- Olivier Miakinen
xavier
Olivier Miakinen <om+ wrote:
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de ipconfig /all
-- XAv In your pomp and all your glory you're a poorer man than me, as you lick the boots of death born out of fear. (Jethro Tull)
Olivier Miakinen <om+news@miakinen.net> wrote:
Donc, la question reste posée : comment obtenir les adresses IP
(v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de
ipconfig /all
--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de ipconfig /all
-- XAv In your pomp and all your glory you're a poorer man than me, as you lick the boots of death born out of fear. (Jethro Tull)
Olivier Miakinen
Le 25/05/2012 21:34, Xavier a écrit :
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de ipconfig /all
Ce sera ipconfig sur Windows, mais ifconfig sur Unix, et la sortie n'a rien de normalisé.
Je viens de trouver une fonction getifaddrs() qui existe au moins sur Linux, mais qui n'est malheureusement pas standard. <http://www.google.fr/search?hl=fr&q=getifaddrs+posix>. Je ne sais même pas si elle existe sur AIX, Sun et Windows.
:-(
Le 25/05/2012 21:34, Xavier a écrit :
Donc, la question reste posée : comment obtenir les adresses IP
(v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de
ipconfig /all
Ce sera ipconfig sur Windows, mais ifconfig sur Unix, et la sortie n'a
rien de normalisé.
Je viens de trouver une fonction getifaddrs() qui existe au moins sur
Linux, mais qui n'est malheureusement pas standard.
<http://www.google.fr/search?hl=fr&q=getifaddrs+posix>.
Je ne sais même pas si elle existe sur AIX, Sun et Windows.
Donc, la question reste posée : comment obtenir les adresses IP (v4 mais aussi v6) gérées par la machine sur laquelle on se trouve.
Mon script perl daily fait ça salement : il parse la sortie de ipconfig /all
Ce sera ipconfig sur Windows, mais ifconfig sur Unix, et la sortie n'a rien de normalisé.
Je viens de trouver une fonction getifaddrs() qui existe au moins sur Linux, mais qui n'est malheureusement pas standard. <http://www.google.fr/search?hl=fr&q=getifaddrs+posix>. Je ne sais même pas si elle existe sur AIX, Sun et Windows.