C语言检测IP合法性
时间: 2024-10-11 20:08:22 浏览: 45
在C语言中,检测IP地址是否合法通常需要对IP地址进行解析,并检查它是否符合IPv4或IPv6的特定格式。这里是一个简单的步骤说明:
1. **IPv4地址验证**:
- 验证IP地址由四个整数组成,每个介于0到255之间,中间由点"."分隔。
- 使用`sscanf`函数尝试解析输入字符串,如果不符合格式,可以返回错误。
```c
#include <stdio.h>
int is_valid_ipv4(char *ip) {
char part[4];
int i;
sscanf(ip, "%d.%d.%d.%d", &part[0], &part[1], &part[2], &part[3]);
for (i = 0; i < 4; i++) {
if (part[i] < 0 || part[i] > 255) return 0;
}
return 1;
}
```
2. **IPv6地址验证**:
- IPv6更复杂,因为它有八组十六进制数字,每组由冒号":"分隔。
- 可以使用`strtok_r`函数将IP分割成各个部分,然后逐一检查。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_valid_ipv6(char *ip) {
char *token;
token = strtok_r(ip, ":", &ip);
while (token != NULL) {
if (!isxdigit(*token)) return 0;
token = strtok_r(NULL, ":", &ip);
}
// 其他条件如检查整个地址长度等
return 1;
}
int main() {
char ip[] = "192.168.1.1"; // IPv4示例
if (is_valid_ipv4(ip)) printf("Valid IPv4.\n");
else printf("Invalid IPv4.\n");
ip[3] = '\0'; // 假设从IPv4转换到IPv6
if (is_valid_ipv6(ip)) printf("Valid IPv6.\n");
else printf("Invalid IPv6.\n");
return 0;
}
```
阅读全文