Bonjour,
Je dois faire un tchat multi-utlisateurs en ipv6 et j'aimerais savoir si il y a en langage c une fonction qui permet de récupérer sa propre ipv6? si oui laquelle?
Merci de votre compréhension
Bonjour,
Je dois faire un tchat multi-utlisateurs en ipv6 et j'aimerais savoir si il y a en langage c une fonction qui permet de récupérer sa propre ipv6? si oui laquelle?
Merci de votre compréhension
En C, il n'y a rien de prévu, il n'y a rien de portable, il faut demander au système d'exploitation. Indique nous ton OS.
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbe Un logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Les information de mon OS sont les suivantes :
Distributor ID: Ubuntu
Description: Ubuntu 10.10
Release: 10.10
Codename: maverick
Donc, tu utilises les sockets.
Lorsque tu te connectes en tant que client à un serveur, tu n'es pas obligé de nommer ta socket (ce qui se traduit, sur un réseau IP, par l'affecter à une adresse explicite). C'est le système qui la choisit pour toi. Pour la récupérer, il faut donc utiliser getsockname().
getsockname() te renvoie un « nom de socket » qui correspond au domaine dans lequel ton socket existe. Ça veut dire que c'est la même fonction, que tu travailles en IPv4, en IPv6 ou avec des sockets UNIX.
Par contre, il y a de fortes chances pour que ce ne soit pas celle que tu cherches à récupérer : l'adresse que tu vas recevoir est celle que le système d'exploitation t'a affectée, donc ton adresse locale. Si tu es derrière un routeur, tu auras une adresse interne en 192.168.x.x. L'adresse qui est vue par le serveur, elle, dépend de l'équipement qui se trouve tout au long du chemin entre ta machine et le serveur. Pour l'obtenir de façon fiable, il n'y a donc pas d'autre moyen que la demander au serveur (même traceroute peut être filtré sur le trajet). Et, ça, ça ne relève pas de la programmation système, mais du protocole que tu utilises pour communiquer avec ton serveur.
j'utilise TCP comme protocole de communication, donc sachant ceci, y-a-t-il un moyen de récupérer son ipv6 en programmation?
Relis mon précédent post.
Bonjour,
Il faut que tu utilises la fonction getaddrinfo(), avec un champs ai_family valant AF_INET6.
Sous Unix/Linux, l'utilisation des IPv6 est moins intuitives que l'utilisation des adressses IPv4, notamment parce que tu dois utiliser des fonctions de plus haut niveau, qui font plus de choses a ta place.
getaddrinfo() va te donner l'adresse IP d'un hôte distant ou lui indiquer sur quelles adresses se binder si on veut se mettre en serveur, mais ça ne lui donnera pas l'adresse locale d'une connexion établie…
Ben, ne serait-ce que parce qu'on ne peut pas passer son socket dans les arguments de getaddrinfo(). Donc, soit c'est pour implémenter « dig » ou « host » et obtenir des infos sur une adresse écrite sous forme canonique ou dans le DNS, soit c'est pour avoir des infos sur l'hôte local en particulier, et savoir notamment quelles adresses sont indiquées pour s'y mettre à l'écoute.
Mais ça ne te donnera pas l'adresse locale d'une connexion établie (ça, c'est le nom du socket) et ça ne te servira pas non plus pour faire une application serveur ordinaire car, en général et sauf configuration explicite de l'administrateur, on écoute en général INADDR_ANY.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager