去除aliyun IP位置API, 优化地域解析
This commit is contained in:
parent
da8473a3ec
commit
333f0ff2d2
79
rhost.c
79
rhost.c
@ -111,45 +111,19 @@ char *process_json(char *buff, char *api)
|
|||||||
{
|
{
|
||||||
char *area = NULL;
|
char *area = NULL;
|
||||||
int area_len = 0;
|
int area_len = 0;
|
||||||
char *p;
|
char *p = NULL;
|
||||||
|
|
||||||
|
if (buff == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
cJSON *cjson_init = cJSON_Parse(buff);
|
cJSON *cjson_init = cJSON_Parse(buff);
|
||||||
|
|
||||||
if (cjson_init == NULL) {
|
if (cjson_init == NULL) {
|
||||||
perror("cJSON_Parse");
|
perror("cJSON_Parse");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if ((p = strstr(api, "baidu")) != NULL) { // baidu Api
|
||||||
p = strstr(api, "aliyun"); // aliyun Api
|
|
||||||
if (p) {
|
|
||||||
cJSON *data = cJSON_GetObjectItem(cjson_init, "data");
|
|
||||||
if (data != NULL) {
|
|
||||||
cJSON *region = cJSON_GetObjectItem(data, "region");
|
|
||||||
|
|
||||||
if (region) {
|
|
||||||
cJSON *isp = cJSON_GetObjectItem(data, "isp");
|
|
||||||
cJSON *city = cJSON_GetObjectItem(data, "city");
|
|
||||||
cJSON *country = cJSON_GetObjectItem(data, "country");
|
|
||||||
cJSON *district = cJSON_GetObjectItem(data, "district");
|
|
||||||
|
|
||||||
area_len = strlen(country->valuestring) + strlen(city->valuestring) + strlen(region->valuestring) + strlen(district->valuestring) + strlen(isp->valuestring);
|
|
||||||
area = (char *)alloca(area_len + 1);
|
|
||||||
if (buff == NULL)
|
|
||||||
perror("out of memory.");
|
|
||||||
memset(area, 0, area_len + 1);
|
|
||||||
sprintf(area, "%s%s%s%s%s", isp->valuestring, country->valuestring, city->valuestring, region->valuestring, district->valuestring);
|
|
||||||
} else {
|
|
||||||
cJSON *msg = cJSON_GetObjectItem(cjson_init, "msg");
|
|
||||||
|
|
||||||
area_len = strlen(msg->valuestring);
|
|
||||||
area = (char *)alloca(area_len + 1);
|
|
||||||
if (buff == NULL)
|
|
||||||
perror("out of memory.");
|
|
||||||
memset(area, 0, area_len + 1);
|
|
||||||
sprintf(area, "%s", msg->valuestring);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if ((p = strstr(api, "baidu")) != NULL) { // baidu Api
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
cJSON *data = cJSON_GetObjectItem(cjson_init, "data");
|
cJSON *data = cJSON_GetObjectItem(cjson_init, "data");
|
||||||
@ -157,24 +131,25 @@ char *process_json(char *buff, char *api)
|
|||||||
for (i = 0; i < cJSON_GetArraySize(data); i++) {
|
for (i = 0; i < cJSON_GetArraySize(data); i++) {
|
||||||
cJSON *svalue = cJSON_GetArrayItem(data, i);
|
cJSON *svalue = cJSON_GetArrayItem(data, i);
|
||||||
cJSON *location = cJSON_GetObjectItem(svalue, "location");
|
cJSON *location = cJSON_GetObjectItem(svalue, "location");
|
||||||
|
|
||||||
area_len = strlen(location->valuestring);
|
area_len = strlen(location->valuestring);
|
||||||
|
|
||||||
area = (char *)alloca(area_len + 1);
|
area = (char *)alloca(area_len + 1);
|
||||||
if (buff == NULL)
|
if (area == NULL)
|
||||||
perror("out of memory.");
|
perror("out of memory.");
|
||||||
memset(area, 0, area_len + 1);
|
memset(area, 0, area_len + 1);
|
||||||
sprintf(area, "%s", location->valuestring);
|
|
||||||
|
snprintf(area, area_len+1, "%s", location->valuestring);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
area = (char *)alloca(270 + 1);
|
return NULL;
|
||||||
if (buff == NULL)
|
|
||||||
perror("out of memory.");
|
|
||||||
memset(area, 0, 270);
|
|
||||||
|
|
||||||
strcpy(area, "获取位置错误!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cJSON_Delete(cjson_init);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
cJSON_Delete(cjson_init);
|
cJSON_Delete(cjson_init);
|
||||||
return strdup(area);
|
return strdup(area);
|
||||||
@ -644,14 +619,9 @@ int rule(conf * conf)
|
|||||||
memset(URL, 0, conf->REGION_URL_LEN + 32);
|
memset(URL, 0, conf->REGION_URL_LEN + 32);
|
||||||
sprintf(URL, conf->REGION_URL, buffer);
|
sprintf(URL, conf->REGION_URL, buffer);
|
||||||
|
|
||||||
location_json = GET_PUBLIC_IP(URL);
|
|
||||||
if (location_json == NULL) {
|
|
||||||
printf("获取地域错误\n");
|
|
||||||
goto BLOCKED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conf->IP2REGION == 1) { // ip2region 地址定位库
|
if (conf->IP2REGION == 1) { // ip2region 地址定位库
|
||||||
printf("使用ip2region!!\n");
|
printf("Use ip2region !!!\n");
|
||||||
|
|
||||||
if (-1 == access(xdb_path, F_OK)) // 判断 ip2region 地址定位库是否存在
|
if (-1 == access(xdb_path, F_OK)) // 判断 ip2region 地址定位库是否存在
|
||||||
{
|
{
|
||||||
@ -663,7 +633,6 @@ int rule(conf * conf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
area = ip2region(xdb_path, buffer);
|
area = ip2region(xdb_path, buffer);
|
||||||
if (area == NULL) {
|
if (area == NULL) {
|
||||||
printf("ip2region解析地域错误\n");
|
printf("ip2region解析地域错误\n");
|
||||||
@ -671,6 +640,12 @@ int rule(conf * conf)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AREA:
|
AREA:
|
||||||
|
location_json = GET_PUBLIC_IP(URL);
|
||||||
|
if (location_json == NULL) {
|
||||||
|
printf("获取地域错误\n");
|
||||||
|
goto BLOCKED;
|
||||||
|
}
|
||||||
|
|
||||||
area = process_json(location_json, conf->REGION_URL);
|
area = process_json(location_json, conf->REGION_URL);
|
||||||
if (area == NULL) {
|
if (area == NULL) {
|
||||||
printf("解析地域错误\n");
|
printf("解析地域错误\n");
|
||||||
@ -680,13 +655,16 @@ AREA:
|
|||||||
|
|
||||||
|
|
||||||
if (isregion(area, region_list) == 1) {
|
if (isregion(area, region_list) == 1) {
|
||||||
printf("Ip: %s, 地域白名单: %s\n", buffer, area);
|
printf("Ip Address: %s, 地域白名单: %s\n", buffer, area);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("攻击者IP地址:%s, %s\n", buffer, area);
|
||||||
|
|
||||||
|
|
||||||
if (conf->IS_DING_WEBHOOK == 1) // 钉钉告警
|
if (conf->IS_DING_WEBHOOK == 1) // 钉钉告警
|
||||||
{
|
{
|
||||||
dingding_warning(area, public_ip, buffer, conf);
|
dingding_warning(area, public_ip, buffer, conf);
|
||||||
@ -1186,6 +1164,7 @@ goto_daemon:
|
|||||||
|
|
||||||
// 扫描病毒前,更新病毒库
|
// 扫描病毒前,更新病毒库
|
||||||
update_freshclam(argc, argv);
|
update_freshclam(argc, argv);
|
||||||
|
|
||||||
r = _clamscan(head_argc, head_argvs);
|
r = _clamscan(head_argc, head_argvs);
|
||||||
virus_files = get_clamav_log("clamscan.log");
|
virus_files = get_clamav_log("clamscan.log");
|
||||||
|
|
||||||
|
@ -23,8 +23,7 @@ global {
|
|||||||
|
|
||||||
REGION = 1; // 是否启用地域白名单(1开启,非1关闭)
|
REGION = 1; // 是否启用地域白名单(1开启,非1关闭)
|
||||||
IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用)
|
IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用)
|
||||||
//REGION_URL = "http://opendata.baidu.com/api.php?query=%s&co=&resource_id=6006&oe=utf8"; // 获取IP地域(aliyun付费API, 弃用)
|
REGION_URL = "http://opendata.baidu.com/api.php?query=%s&co=&resource_id=6006&oe=utf8"; // 获取IP地域API
|
||||||
REGION_URL = "https://api01.aliyun.venuscn.com/ip?ip=%s -H Authorization:APPCODE a1d842b8afda418c8ea24271a4e16b1f";
|
|
||||||
REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开)
|
REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user