This commit is contained in:
2025-03-07 09:38:51 +08:00
parent 5e441c068f
commit 1e00348e84
3 changed files with 10 additions and 2 deletions

BIN
a.out

Binary file not shown.

View File

@@ -48,6 +48,8 @@ int is_ip_in_cache(const char *ip)
struct ip_cache_node *current = ip_cache_head; struct ip_cache_node *current = ip_cache_head;
struct ip_cache_node *prev = NULL; struct ip_cache_node *prev = NULL;
if (ip_cache_head == NULL) return 0; // 如果 ip_cache_head == NULLcurrent->next 可能导致段错误 (Segmentation Fault)。
while (current != NULL) { while (current != NULL) {
// 如果 IP 匹配并且未过期 // 如果 IP 匹配并且未过期
if (strcmp(current->ip, ip) == 0) { if (strcmp(current->ip, ip) == 0) {

10
cap.c
View File

@@ -23,6 +23,7 @@ char *command_result = NULL; // 执行命令的结果
void Processing_IP_addresses(char *src_ip) void Processing_IP_addresses(char *src_ip)
{ {
// 地域白名单 // 地域白名单
char _region_list[WHITELIST_IP_NUM][WHITELIST_IP_NUM] = { { 0 }, { 0 } }; char _region_list[WHITELIST_IP_NUM][WHITELIST_IP_NUM] = { { 0 }, { 0 } };
char _REGION_LIST[BUFFER] = { 0 }; char _REGION_LIST[BUFFER] = { 0 };
@@ -108,11 +109,11 @@ void Processing_IP_addresses(char *src_ip)
fprintf(stderr, "Failed to parse JSON.\n"); fprintf(stderr, "Failed to parse JSON.\n");
} }
if (p != NULL) if (p != NULL) {
free(p); free(p);
}
} }
if (ip2region_area != NULL) { if (ip2region_area != NULL) {
free(ip2region_area); free(ip2region_area);
ip2region_area = NULL; ip2region_area = NULL;
@@ -125,9 +126,14 @@ void Processing_IP_addresses(char *src_ip)
void packet_handler(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) void packet_handler(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{ {
int ethernet_header_len = 14; int ethernet_header_len = 14;
//struct ip *ip_header = (struct ip *)(packet + ethernet_header_len);
struct ip *ip_header = (struct ip *)(packet + ethernet_header_len); struct ip *ip_header = (struct ip *)(packet + ethernet_header_len);
if (ip_header->ip_v != 4) return; // 只处理 IPv4
char src_ip[INET_ADDRSTRLEN] = { 0 }; char src_ip[INET_ADDRSTRLEN] = { 0 };
inet_ntop(AF_INET, &(ip_header->ip_src), src_ip, INET_ADDRSTRLEN); inet_ntop(AF_INET, &(ip_header->ip_src), src_ip, INET_ADDRSTRLEN);
Processing_IP_addresses(src_ip); Processing_IP_addresses(src_ip);