Comment puis-je extraire une adresse IP dans une chaîne? Je ne trouve pas de référence qui m'indique comment char sa_data[14]
est codé.
Réponses
Trop de publicités? Il suffit de transtyper la structure sockaddr
entière dans un sockaddr_in . Ensuite, vous pouvez utiliser:
char *ip = inet_ntoa(their_addr.sin_addr)
Pour récupérer la représentation IP standard.
Emil réponse est bonne, mais c'est ma compréhension que inet_ntoa
est déprécié et qu'à la place vous devez utiliser inet_ntop
. Si vous utilisez IPv4, lancez votre struct sockaddr
de sockaddr_in
. Votre code devrait ressembler à quelque chose comme ceci:
struct addrinfo *res; // populated elsewhere in your code
struct sockaddr_in *ipv4 = (struct sockaddr_in *)res->ai_addr;
char ipAddress[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(ipv4->sin_addr), ipAddress, INET_ADDRSTRLEN);
printf("The IP address is: %s\n", ipAddress);
Jetez un oeil à cette grande ressource pour plus d'explication, y compris comment faire pour les adresses IPv6.
Cet article explique le contenu de la structure sockaddr:
http://h30097.www3.hp.com/docs/base%5Fdoc/DOCUMENTATION/V50A%5FHTML/MAN/MAN7/0052%5F%5F%5F%5F.HTM
Une fois lancé sur sockaddr_in, il devient ceci:
struct sockaddr_in {
u_short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};