使用Linux C 实现过滤非法IP的函数
时间: 2024-05-11 18:15:14 浏览: 146
可以使用正则表达式来检查IP地址格式是否合法,然后通过将IP地址转换成整型数并逐位比较来过滤非法IP。以下是一个实现过滤非法IP的参考函数:
```c
#include <regex.h>
#include <arpa/inet.h>
int is_valid_ip(const char* ip)
{
regex_t regex;
int ret;
// 检查IP地址格式是否合法
ret = regcomp(®ex, "^\\d+\\.\\d+\\.\\d+\\.\\d+$", REG_EXTENDED);
if (ret != 0) {
return 0;
}
ret = regexec(®ex, ip, 0, NULL, 0);
regfree(®ex);
if (ret != 0) {
return 0;
}
// 将IP地址转换成整型数并逐位比较
struct in_addr addr;
ret = inet_pton(AF_INET, ip, &addr);
if (ret != 1) {
return 0;
}
uint32_t ip_int = ntohl(addr.s_addr);
if ((ip_int & 0xff000000) == 0x7f000000) { // 127.0.0.0/8 是环回地址
return 0;
}
if ((ip_int & 0xf0000000) == 0xe0000000 || // 224.0.0.0/4 是多播地址
(ip_int & 0xf0000000) == 0xf0000000) { // 240.0.0.0/4 是保留地址
return 0;
}
return 1;
}
```
这个函数接收一个字符串表示IP地址,返回一个整数表示该IP地址是否合法(合法返回1,非法返回0)。
阅读全文