在C语言中,可以使用正则表达式或字符串处理来检查是否是合法的IPv4地址、IPv6地址、IPv4网段或者IPv6网段。以下是一个示例函数,用于检查给定的字符串是否是合法的IPv4地址、IPv6地址、IPv4网段或者IPv6网段。
”`c
#include
// 检查是否为合法的IP地址(包括IPv4和IPv6) int isValidIP(const char *ip) {
struct sockaddr_in sa;
struct sockaddr_in6 sa6;
if (inet_pton(AF_INET, ip, &(sa.sin_addr)) == 1) {
return 1; // 是合法的IPv4地址
}
if (inet_pton(AF_INET6, ip, &(sa6.sin6_addr)) == 1) {
return 2; // 是合法的IPv6地址
}
return 0; // 不是合法的IP地址
}
// 检查是否为合法的IP网段(包括IPv4网段和IPv6网段) int isValidSubnet(const char *subnet) {
regex_t regex;
int ret = regcomp(®ex, "^([0-9a-fA-F:.]+)/(\\d+)$", REG_EXTENDED);
if (ret != 0) {
printf("Failed to compile regular expression.\n");
return 0;
}
ret = regexec(®ex, subnet, 0, NULL, 0);
regfree(®ex);
if (ret == REG_NOERROR) {
return 1; // 是合法的IP网段
}
return 0; // 不是合法的IP网段
}
int main() {
const char *ipv4 = "192.168.1.1";
const char *ipv6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
const char *ipv4_subnet = "192.168.0.0/24";
const char *ipv6_subnet = "2001:db8::/32";
int result;
result = isValidIP(ipv4);
if (result == 1) {
printf("%s is a valid IPv4 address.\n", ipv4);
} else if (result == 2) {
printf("%s is a valid IPv6 address.\n", ipv4);
} else {
printf("%s is not a valid IP address.\n", ipv4);
}
result = isValidIP(ipv6);
if (result == 1) {
printf("%s is a valid IPv4 address.\n", ipv6);
} else if (result == 2) {
printf("%s is a valid IPv6 address.\n", ipv6);
} else {
printf("%s is not a valid IP address.\n", ipv6);
}
if (isValidSubnet(ipv4_subnet)) {
printf("%s is a valid IPv4 subnet.\n", ipv4_subnet);
内容由零声教学AI助手提供,问题来源于学员提问