优化
This commit is contained in:
2
cache.c
2
cache.c
@@ -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 == NULL,current->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
10
cap.c
@@ -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,10 +109,10 @@ 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);
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user