[C++] 纯文本查看 复制代码
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
struct in_addr addr4;
struct in6_addr addr6;
int domain, s, i;
char str[INET6_ADDRSTRLEN];
if (argc != 3) {
fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);
exit(EXIT_FAILURE);
}
domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);
if (domain == 4 || domain == AF_INET) {
domain = AF_INET;
s = inet_pton(domain, argv[2], &addr4);
if (s <= 0) {
if (s == 0)
fprintf(stderr, "Not in presentation format");
else
perror("inet_pton");
exit(EXIT_FAILURE);
}
fprintf(stdout, "Network byte order: %u\n",addr4.s_addr);
}
else if (domain == 6 || domain == AF_INET6) {
domain = AF_INET6;
s = inet_pton(domain, argv[2], &addr6);
if (s <= 0) {
if (s == 0)
fprintf(stderr, "Not in presentation format");
else
perror("inet_pton");
exit(EXIT_FAILURE);
}
fprintf(stdout, "Network byte order: ");
for (i = 0; i < 16; i++)
fprintf(stdout, "%u ", addr6.__in6_u.__u6_addr8);
printf ("\n");
}
else {
fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);
exit(EXIT_FAILURE);
}
if (domain == AF_INET) {
if (inet_ntop(domain, &addr4, str, INET6_ADDRSTRLEN) == NULL) {
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
} else if (domain == AF_INET6) {
if (inet_ntop(domain, &addr6, str, INET6_ADDRSTRLEN) == NULL) {
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
}
exit(EXIT_SUCCESS);
}
[C++] 纯文本查看 复制代码
/* IPv6 address */
struct in6_addr
{
union
{
uint8_t __u6_addr8[16];
#if defined __USE_MISC || defined __USE_GNU
uint16_t __u6_addr16[8];
uint32_t __u6_addr32[4];
#endif
} __in6_u;
#define s6_addr __in6_u.__u6_addr8
#if defined __USE_MISC || defined __USE_GNU
# define s6_addr16 __in6_u.__u6_addr16
# define s6_addr32 __in6_u.__u6_addr32
#endif
};