summaryrefslogtreecommitdiff
path: root/detection/vpn_detector.py
diff options
context:
space:
mode:
Diffstat (limited to 'detection/vpn_detector.py')
-rw-r--r--detection/vpn_detector.py66
1 files changed, 32 insertions, 34 deletions
diff --git a/detection/vpn_detector.py b/detection/vpn_detector.py
index 36ec6e4..d5de299 100644
--- a/detection/vpn_detector.py
+++ b/detection/vpn_detector.py
@@ -74,7 +74,7 @@ class VpnDetector:
config = Config().config
return config
- def save_to_knowledgebase(self, object_list, object_type, vpn_service_name, plugin_id, plugin_name, output_filename, confidence='suspected'):
+ def save_results(self, object_list, object_type, vpn_service_name, plugin_id, plugin_name, output_filename, confidence='suspected'):
"""
Write data to local file and knowledge base
:param object_type: ip or domain
@@ -86,27 +86,25 @@ class VpnDetector:
:param confidence: 3 kinds of confidence level, confirmed, suspect, tentative
:return:
"""
- if object_type == 'ip':
- library_name = self.config['knowledgebase']['ip_library_name']
- else:
- library_name = self.config['knowledgebase']['domain_library_name']
- knowledge_id = self.kb.get_library_id(library_name)
# convert result data into required format https://docs.geedge.net/pages/viewpage.action?pageId=104760257
- result_df = pd.DataFrame()
+ result_df = pd.DataFrame(columns=['type', 'source_id', 'source_name', 'ip_addr_format', 'ip1', 'ip2', 'domain', 'method', 'confidence', 'tags', 'description', 'first_seen_time', 'last_seen_time'])
+
if object_type == 'ip':
result_df['ip1'] = object_list
result_df['ip2'] = object_list
- result_df.insert(0, 'addr_format', 'Single')
+ result_df['type'] = 'IP'
+ result_df['ip_addr_format'] = 'Single'
+
if object_type == 'domain':
- result_df['domain'] = object_list
+ result_df['domain'] = ['$'+i for i in object_list]
+ result_df['type'] = 'Domain'
- result_df['plugin_id'] = plugin_id
- result_df['plugin_name'] = plugin_name
- result_df['vpn_service_name'] = vpn_service_name
+ result_df['source_id'] = plugin_id
+ result_df['source_name'] = plugin_name
+ result_df['tags'] = vpn_service_name
result_df['method'] = 'passive_ml'
result_df['confidence'] = confidence
- result_df['is_valid'] = 1
# result save
if len(result_df) > 0:
@@ -124,7 +122,9 @@ class VpnDetector:
knowledge_api = KnowledgeApi(self.config['knowledgebase'])
self.logger.info('[{}] - [Updating knowledgebase]- {} num:{}'.format(plugin_name, object_type, len(object_list)))
description_str = "Update {} record(s).".format(len(object_list))
- knowledge_api.file_import(result_file, knowledge_id, 'update', description_str)
+ knowledge_api.file_import(result_file, 'update', description_str)
+ self.logger.info(
+ '[{}] - Write to knowledgebase successfully.'.format(plugin_name))
@@ -201,9 +201,7 @@ class VpnDetector:
return [i for i in original_ip_list if ':' not in i]
-# 入口函数定义
-if __name__ == '__main__':
-
+def main():
parser = argparse.ArgumentParser(description='VPN detection')
parser.add_argument('-p', '--plugin', type=str, help='plugin name')
parser.add_argument('-m', '--mode', type=str, default='recent', help='recent or fixed')
@@ -232,7 +230,8 @@ if __name__ == '__main__':
exit()
# 根据当前时间向前取整小时
end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:00:00")
- start_time = (datetime.datetime.now() - datetime.timedelta(hours=recent_interval)).strftime("%Y-%m-%d %H:00:00")
+ start_time = (datetime.datetime.now() - datetime.timedelta(hours=recent_interval)).strftime(
+ "%Y-%m-%d %H:00:00")
elif mode == 'fixed':
if start_time == '' or end_time == '':
print('Please input correct time format')
@@ -242,7 +241,6 @@ if __name__ == '__main__':
print('Please input correct time mode')
exit()
-
detector = None
if plugin_name == 'hotspotvpn':
from vpnservices.hotspotvpn import Hotspotvpn
@@ -275,31 +273,31 @@ if __name__ == '__main__':
print('Please input correct plugin name')
exit()
-
result_group = detector.find_server()
for server_group in result_group:
result_list = server_group.server_list
detector.logger.debug('[{}] - result list before filter: {}.'.format(detector.plugin_name, result_list))
if server_group.object_type == 'ip':
# 日志记录IP数量
- detector.logger.info('[{}] - {} {} found.'.format(detector.plugin_name, len(result_list), server_group.object_type))
+ detector.logger.info(
+ '[{}] - {} {} found.'.format(detector.plugin_name, len(result_list), server_group.object_type))
result_list = detector.filtered_by_isp(result_list, detector.config['common']['protected_isp_list'])
result_list = detector.filtered_by_ip(result_list, detector.config['common']['protected_ip_list'])
result_list = detector.filter_ipv6(result_list)
detector.logger.debug(
- '[{}] - filtered list {}.'.format(detector.plugin_name, [i for i in server_group.server_list if i not in result_list]))
- detector.logger.info('[{}] - Filtered by ISP and IP, {} {} left.'.format(detector.plugin_name, len(result_list), server_group.object_type))
- if len(result_list) > 0:
- detector.save_to_knowledgebase(result_list, server_group.object_type,
- detector.vpn_service_name, detector.plugin_id,
- detector.plugin_name,
- server_group.output_file_name,
- detector.confidence)
-
- # Output logs to record the amount of data written, plugin id, plugin name and other information
+ '[{}] - filtered list {}.'.format(detector.plugin_name,
+ [i for i in server_group.server_list if i not in result_list]))
detector.logger.info(
- '[{}] - Write {} {} to knowledgebase successfully.'.format(detector.plugin_name,
- len(result_list),
- server_group.object_type))
+ '[{}] - Filtered by ISP and IP, {} {} left.'.format(detector.plugin_name, len(result_list),
+ server_group.object_type))
+ if len(result_list) > 0:
+ detector.save_results(result_list, server_group.object_type,
+ detector.vpn_service_name, detector.plugin_id,
+ detector.plugin_name,
+ server_group.output_file_name,
+ detector.confidence)
+# 入口函数定义
+if __name__ == '__main__':
+ main() \ No newline at end of file