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 *prev = NULL;
if (ip_cache_head == NULL) return 0; // 如果 ip_cache_head == NULLcurrent->next 可能导致段错误 (Segmentation Fault)。
while (current != NULL) {
// 如果 IP 匹配并且未过期
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)
{
// 地域白名单
char _region_list[WHITELIST_IP_NUM][WHITELIST_IP_NUM] = { { 0 }, { 0 } };
char _REGION_LIST[BUFFER] = { 0 };
@@ -108,11 +109,11 @@ void Processing_IP_addresses(char *src_ip)
fprintf(stderr, "Failed to parse JSON.\n");
}
if (p != NULL)
if (p != NULL) {
free(p);
}
}
if (ip2region_area != NULL) {
free(ip2region_area);
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)
{
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);
if (ip_header->ip_v != 4) return; // 只处理 IPv4
char src_ip[INET_ADDRSTRLEN] = { 0 };
inet_ntop(AF_INET, &(ip_header->ip_src), src_ip, INET_ADDRSTRLEN);
Processing_IP_addresses(src_ip);