From e1ef100119e613371fb8bfcc63db29513faf7f8c Mon Sep 17 00:00:00 2001 From: sushen339 Date: Tue, 18 Nov 2025 14:05:51 +0800 Subject: [PATCH] --- blockip/bip | Bin 58288 -> 58344 bytes blockip/src/ban.c | 12 ++++++++++-- blockip/src/stats.c | 42 ++++++++++++++++++++++++++++++++---------- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/blockip/bip b/blockip/bip index 22007d29bcc22b163d0f009846c0867487791141..1a451ef962e996faf884d0a1fd042543b81a3d98 100644 GIT binary patch delta 16457 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 delta 16115 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 diff --git a/blockip/src/ban.c b/blockip/src/ban.c index 1231e11..cc20501 100644 --- a/blockip/src/ban.c +++ b/blockip/src/ban.c @@ -281,8 +281,16 @@ void show_persist_list(void) { msg(C_CYAN, "=== 📋 本地持久化封禁列表 ==="); FILE *fp = fopen(PERSIST_FILE, "r"); - if (!fp || fseek(fp, 0, SEEK_END) == 0) { - if (fp) fclose(fp); + if (!fp) { + printf("(暂无持久化记录)\n"); + return; + } + + /* 检查文件是否为空 */ + fseek(fp, 0, SEEK_END); + long file_size = ftell(fp); + if (file_size <= 0) { + fclose(fp); printf("(暂无持久化记录)\n"); return; } diff --git a/blockip/src/stats.c b/blockip/src/stats.c index cf4bbcf..7135aaf 100644 --- a/blockip/src/stats.c +++ b/blockip/src/stats.c @@ -186,23 +186,45 @@ void show_subnet_aggregation(void) { } } - /* 输出聚合结果,只显示count>=2的 */ + /* 输出聚合结果,只显示count>=2的,并去重:如果大段和小段数量相同则只显示小段 */ bool has_output = false; int show_count = 0; for (int i = 0; i < agg_count && show_count < 10; ++i) { if (agg[i].count >= 2) { - has_output = true; + /* 检查是否有更小掩码的段具有相同count */ + bool skip = false; if (agg[i].mask == 8) { - printf(" - %-18s %s(%d 个)%s\n", - strcat(agg[i].subnet, ".0.0.0/8"), C_RED, agg[i].count, C_RESET); + for (int j = 0; j < agg_count; ++j) { + if (agg[j].mask > 8 && agg[j].count == agg[i].count && + strncmp(agg[j].subnet, agg[i].subnet, strlen(agg[i].subnet)) == 0) { + skip = true; + break; + } + } } else if (agg[i].mask == 16) { - printf(" - %-18s %s(%d 个)%s\n", - strcat(agg[i].subnet, ".0.0/16"), C_RED, agg[i].count, C_RESET); - } else if (agg[i].mask == 24) { - printf(" - %-18s %s(%d 个)%s\n", - strcat(agg[i].subnet, ".0/24"), C_RED, agg[i].count, C_RESET); + for (int j = 0; j < agg_count; ++j) { + if (agg[j].mask > 16 && agg[j].count == agg[i].count && + strncmp(agg[j].subnet, agg[i].subnet, strlen(agg[i].subnet)) == 0) { + skip = true; + break; + } + } + } + + if (!skip) { + has_output = true; + if (agg[i].mask == 8) { + printf(" - %-18s %s(%d 个)%s\n", + strcat(agg[i].subnet, ".0.0.0/8"), C_RED, agg[i].count, C_RESET); + } else if (agg[i].mask == 16) { + printf(" - %-18s %s(%d 个)%s\n", + strcat(agg[i].subnet, ".0.0/16"), C_RED, agg[i].count, C_RESET); + } else if (agg[i].mask == 24) { + printf(" - %-18s %s(%d 个)%s\n", + strcat(agg[i].subnet, ".0/24"), C_RED, agg[i].count, C_RESET); + } + show_count++; } - show_count++; } }