要判断IP地址是否合法,可以使用inet_pton函数。该函数将一个字符串表示的IP地址转换成网络字节序的二进制形式。
如果该字符串是合法的IP地址,则inet_pton返回1;如果该字符串不是合法的IP地址,则inet_pton返回0。
下面是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
const char *ip_addr = "192.168.0.1";
struct in_addr ipv4;
struct in6_addr ipv6;
int ret = inet_pton(AF_INET, ip_addr, &ipv4);
if (ret == 1) {
printf("This is a valid IPv4 address\n");
} else if (ret == 0) {
ret = inet_pton(AF_INET6, ip_addr, &ipv6);
if (ret == 1) {
printf("This is a valid IPv6 address\n");
} else if (ret == 0) {
printf("Invalid IP address\n");
} else {
perror("inet_pton");
exit(EXIT_FAILURE);
}
} else {
perror("inet_pton");
exit(EXIT_FAILURE);
}
return 0;
}
这个示例代码将一个字符串表示的IP地址转换成了两种格式:结构体in_addr表示的IPv4地址和结构体in6_addr表示的IPv6地址。然后,使用inet_pton函数判断这个字符串是否为合法IP,并打印相应信息。