以下是一个使用 inet_pton
解析 IPv6 地址的 Linux C 示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <IPv6 address>\n", argv[0]);
exit(EXIT_FAILURE);
}
const char *ipv6_str = argv[1];
struct in6_addr ipv6_bin;
// 使用inet_pton将IPv6字符串转换为二进制格式
int ret = inet_pton(AF_INET6, ipv6_str, &ipv6_bin);
if (ret == 1) {
printf("Successfully parsed IPv6 address: %s\n", ipv6_str);
// 打印转换后的二进制形式(16字节)
printf("Binary format (network byte order): ");
for (int i = 0; i < 16; i++) {
printf("%02x", ipv6_bin.s6_addr[i]);
if (i != 15) printf(":");
}
printf("\n");
} else if (ret == 0) {
fprintf(stderr, "Error: Invalid IPv6 address format\n");
return EXIT_FAILURE;
} else {
perror("inet_pton failed");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
编译和运行:
gcc -o ipv6_parser ipv6_parser.c
./ipv6_parser "2001:0db8:85a3::8a2e:0370:7334"
关键点说明:
inet_pton
(presentation to network)函数将可读的IP地址字符串转换为二进制网络字节序格式。AF_INET6
表示处理的是IPv6地址。struct in6_addr
是存储IPv6地址的结构体,其中s6_addr
是16字节的数组。- 返回值:
1
:转换成功0
:输入不是有效格式-1
:系统调用失败(可通过perror查看原因)
注意:此代码需要Linux/Unix环境支持IPv6头文件。
内容由零声教学AI助手提供,问题来源于学员提问