增加白名单支持,还未大量测试
This commit is contained in:
47
libipset.c
47
libipset.c
@@ -150,6 +150,53 @@ int add_ip_to_ipset(char *set_name, char *ip)
|
||||
return 0; // 始终返回 0,表示执行成功
|
||||
}
|
||||
|
||||
// 向指定的 ipset 删除 IP
|
||||
int del_ip_to_ipset(char *set_name, char *ip)
|
||||
{
|
||||
struct ipset *ipset = NULL;
|
||||
struct ipset_session *session = NULL;
|
||||
|
||||
// 初始化 ipset 和 session
|
||||
ipset = ipset_init();
|
||||
if (!ipset) {
|
||||
fprintf(stderr, "初始化 IPSet 失败\n");
|
||||
return -1; // 返回 -1,但不退出
|
||||
}
|
||||
|
||||
ipset_load_types();
|
||||
|
||||
session = ipset_session(ipset);
|
||||
if (!session) {
|
||||
fprintf(stderr, "创建 IPSet 会话失败\n");
|
||||
ipset_fini(ipset);
|
||||
return -1; // 返回 -1,但不退出
|
||||
}
|
||||
// 设置 IPSet 名称
|
||||
if (ipset_session_data_set(session, IPSET_SETNAME, set_name) != 0) {
|
||||
fprintf(stderr, "设置 IPSet 名称失败\n");
|
||||
ipset_session_fini(session);
|
||||
ipset_fini(ipset);
|
||||
return -1; // 返回 -1,但不退出
|
||||
}
|
||||
// 设置自定义错误和输出处理函数
|
||||
if (ipset_custom_printf(ipset, custom_error_handler, NULL, custom_output_handler_, NULL) != 0) {
|
||||
fprintf(stderr, "设置自定义打印函数失败。\n");
|
||||
ipset_fini(ipset);
|
||||
return -1;
|
||||
}
|
||||
// 将ip添加到集合
|
||||
char *args[] = { "ipset", "del", set_name, ip, NULL };
|
||||
if (ipset_parse_argv(ipset, 4, args) != 0) {
|
||||
ipset_fini(ipset);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ipset_session_fini(session);
|
||||
ipset_fini(ipset);
|
||||
|
||||
return 0; // 始终返回 0,表示执行成功
|
||||
}
|
||||
|
||||
// 定义一个函数来清空指定名称的 ipset 集合
|
||||
int flush_ipset(char *set_name)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user