diff --git a/backend/apps/engine/management/commands/init_fingerprints.py b/backend/apps/engine/management/commands/init_fingerprints.py
new file mode 100644
index 00000000..43f6b6a5
--- /dev/null
+++ b/backend/apps/engine/management/commands/init_fingerprints.py
@@ -0,0 +1,111 @@
+"""初始化内置指纹库
+
+- EHole 指纹: ehole.json -> 导入到数据库
+
+可重复执行:如果数据库已有数据则跳过,只在空库时导入。
+"""
+
+import json
+import logging
+from pathlib import Path
+
+from django.conf import settings
+from django.core.management.base import BaseCommand
+
+from apps.engine.models import EholeFingerprint
+from apps.engine.services.fingerprints import EholeFingerprintService
+
+
+logger = logging.getLogger(__name__)
+
+
+# 内置指纹配置
+DEFAULT_FINGERPRINTS = [
+ {
+ "type": "ehole",
+ "filename": "ehole.json",
+ "model": EholeFingerprint,
+ "service": EholeFingerprintService,
+ "data_key": "fingerprint", # JSON 中指纹数组的 key
+ },
+ # TODO: 后续添加 Goby, Wappalyzer
+]
+
+
+class Command(BaseCommand):
+ help = "初始化内置指纹库"
+
+ def handle(self, *args, **options):
+ project_base = Path(settings.BASE_DIR).parent # /app/backend -> /app
+ fingerprints_dir = project_base / "backend" / "fingerprints"
+
+ initialized = 0
+ skipped = 0
+ failed = 0
+
+ for item in DEFAULT_FINGERPRINTS:
+ fp_type = item["type"]
+ filename = item["filename"]
+ model = item["model"]
+ service_class = item["service"]
+ data_key = item["data_key"]
+
+ # 检查数据库是否已有数据
+ existing_count = model.objects.count()
+ if existing_count > 0:
+ self.stdout.write(self.style.SUCCESS(
+ f"[{fp_type}] 数据库已有 {existing_count} 条记录,跳过初始化"
+ ))
+ skipped += 1
+ continue
+
+ # 查找源文件
+ src_path = fingerprints_dir / filename
+ if not src_path.exists():
+ self.stdout.write(self.style.WARNING(
+ f"[{fp_type}] 未找到内置指纹文件: {src_path},跳过"
+ ))
+ failed += 1
+ continue
+
+ # 读取并解析 JSON
+ try:
+ with open(src_path, "r", encoding="utf-8") as f:
+ json_data = json.load(f)
+ except (json.JSONDecodeError, OSError) as exc:
+ self.stdout.write(self.style.ERROR(
+ f"[{fp_type}] 读取指纹文件失败: {exc}"
+ ))
+ failed += 1
+ continue
+
+ # 提取指纹数据
+ fingerprints = json_data.get(data_key, [])
+ if not fingerprints:
+ self.stdout.write(self.style.WARNING(
+ f"[{fp_type}] 指纹文件中没有有效数据,跳过"
+ ))
+ failed += 1
+ continue
+
+ # 使用 Service 批量导入
+ try:
+ service = service_class()
+ result = service.batch_create_fingerprints(fingerprints)
+ created = result.get("created", 0)
+ failed_count = result.get("failed", 0)
+
+ self.stdout.write(self.style.SUCCESS(
+ f"[{fp_type}] 导入成功: 创建 {created} 条,失败 {failed_count} 条"
+ ))
+ initialized += 1
+ except Exception as exc:
+ self.stdout.write(self.style.ERROR(
+ f"[{fp_type}] 导入失败: {exc}"
+ ))
+ failed += 1
+ continue
+
+ self.stdout.write(self.style.SUCCESS(
+ f"指纹初始化完成: 成功 {initialized}, 已存在跳过 {skipped}, 失败 {failed}"
+ ))
diff --git a/backend/apps/engine/models/__init__.py b/backend/apps/engine/models/__init__.py
new file mode 100644
index 00000000..0631d10f
--- /dev/null
+++ b/backend/apps/engine/models/__init__.py
@@ -0,0 +1,17 @@
+"""Engine Models
+
+导出所有 Engine 模块的 Models
+"""
+
+from .engine import WorkerNode, ScanEngine, Wordlist, NucleiTemplateRepo
+from .fingerprints import EholeFingerprint
+
+__all__ = [
+ # 核心 Models
+ "WorkerNode",
+ "ScanEngine",
+ "Wordlist",
+ "NucleiTemplateRepo",
+ # 指纹 Models
+ "EholeFingerprint",
+]
diff --git a/backend/apps/engine/models.py b/backend/apps/engine/models/engine.py
similarity index 98%
rename from backend/apps/engine/models.py
rename to backend/apps/engine/models/engine.py
index d7e48b8c..4359af1d 100644
--- a/backend/apps/engine/models.py
+++ b/backend/apps/engine/models/engine.py
@@ -1,3 +1,8 @@
+"""Engine 模块核心 Models
+
+包含 WorkerNode, ScanEngine, Wordlist, NucleiTemplateRepo
+"""
+
from django.db import models
@@ -78,6 +83,7 @@ class ScanEngine(models.Model):
indexes = [
models.Index(fields=['-created_at']),
]
+
def __str__(self):
return str(self.name or f'ScanEngine {self.id}')
diff --git a/backend/apps/engine/models/fingerprints.py b/backend/apps/engine/models/fingerprints.py
new file mode 100644
index 00000000..8248785e
--- /dev/null
+++ b/backend/apps/engine/models/fingerprints.py
@@ -0,0 +1,43 @@
+"""指纹相关 Models
+
+包含 EHole、Goby、Wappalyzer 等指纹格式的数据模型
+"""
+
+from django.db import models
+
+
+class EholeFingerprint(models.Model):
+ """EHole 格式指纹规则(字段与 ehole.json 一致)"""
+
+ cms = models.CharField(max_length=200, help_text='产品/CMS名称')
+ method = models.CharField(max_length=200, default='keyword', help_text='匹配方式')
+ location = models.CharField(max_length=200, default='body', help_text='匹配位置')
+ keyword = models.JSONField(default=list, help_text='关键词列表')
+ is_important = models.BooleanField(default=False, help_text='是否重点资产')
+ type = models.CharField(max_length=100, blank=True, default='-', help_text='分类')
+ created_at = models.DateTimeField(auto_now_add=True)
+
+ class Meta:
+ db_table = 'ehole_fingerprint'
+ verbose_name = 'EHole 指纹'
+ verbose_name_plural = 'EHole 指纹'
+ ordering = ['-created_at']
+ indexes = [
+ # 搜索过滤字段索引
+ models.Index(fields=['cms']),
+ models.Index(fields=['method']),
+ models.Index(fields=['location']),
+ models.Index(fields=['type']),
+ # 排序字段索引
+ models.Index(fields=['-created_at']),
+ ]
+ constraints = [
+ # 唯一约束:cms + method + location 组合不能重复
+ models.UniqueConstraint(
+ fields=['cms', 'method', 'location'],
+ name='unique_ehole_fingerprint'
+ ),
+ ]
+
+ def __str__(self) -> str:
+ return f"{self.cms} ({self.method}@{self.location})"
diff --git a/backend/apps/engine/serializers/fingerprints/__init__.py b/backend/apps/engine/serializers/fingerprints/__init__.py
new file mode 100644
index 00000000..3505cbd0
--- /dev/null
+++ b/backend/apps/engine/serializers/fingerprints/__init__.py
@@ -0,0 +1,10 @@
+"""指纹管理 Serializers
+
+导出所有指纹相关的 Serializer 类
+"""
+
+from .ehole import EholeFingerprintSerializer
+
+__all__ = [
+ "EholeFingerprintSerializer",
+]
diff --git a/backend/apps/engine/serializers/fingerprints/ehole.py b/backend/apps/engine/serializers/fingerprints/ehole.py
new file mode 100644
index 00000000..4376bb1a
--- /dev/null
+++ b/backend/apps/engine/serializers/fingerprints/ehole.py
@@ -0,0 +1,27 @@
+"""EHole 指纹 Serializer"""
+
+from rest_framework import serializers
+
+from apps.engine.models import EholeFingerprint
+
+
+class EholeFingerprintSerializer(serializers.ModelSerializer):
+ """EHole 指纹序列化器"""
+
+ class Meta:
+ model = EholeFingerprint
+ fields = ['id', 'cms', 'method', 'location', 'keyword',
+ 'is_important', 'type', 'created_at']
+ read_only_fields = ['id', 'created_at']
+
+ def validate_cms(self, value):
+ """校验 cms 字段"""
+ if not value or not value.strip():
+ raise serializers.ValidationError("cms 字段不能为空")
+ return value.strip()
+
+ def validate_keyword(self, value):
+ """校验 keyword 字段"""
+ if not isinstance(value, list):
+ raise serializers.ValidationError("keyword 必须是数组")
+ return value
diff --git a/backend/apps/engine/services/fingerprints/__init__.py b/backend/apps/engine/services/fingerprints/__init__.py
new file mode 100644
index 00000000..64083e87
--- /dev/null
+++ b/backend/apps/engine/services/fingerprints/__init__.py
@@ -0,0 +1,12 @@
+"""指纹管理 Services
+
+导出所有指纹相关的 Service 类
+"""
+
+from .base import BaseFingerprintService
+from .ehole import EholeFingerprintService
+
+__all__ = [
+ "BaseFingerprintService",
+ "EholeFingerprintService",
+]
diff --git a/backend/apps/engine/services/fingerprints/base.py b/backend/apps/engine/services/fingerprints/base.py
new file mode 100644
index 00000000..54b25df1
--- /dev/null
+++ b/backend/apps/engine/services/fingerprints/base.py
@@ -0,0 +1,143 @@
+"""指纹管理基类 Service
+
+提供通用的批量操作和缓存逻辑,供 EHole/Goby/Wappalyzer 等子类继承
+"""
+
+import json
+import logging
+from typing import Any
+
+logger = logging.getLogger(__name__)
+
+
+class BaseFingerprintService:
+ """指纹管理基类 Service,提供通用的批量操作和缓存逻辑"""
+
+ model = None # 子类必须指定
+ BATCH_SIZE = 1000 # 每批处理数量
+
+ def validate_fingerprint(self, item: dict) -> bool:
+ """
+ 校验单条指纹,子类必须实现
+
+ Args:
+ item: 单条指纹数据
+
+ Returns:
+ bool: 是否有效
+ """
+ raise NotImplementedError("子类必须实现 validate_fingerprint 方法")
+
+ def validate_fingerprints(self, raw_data: list) -> tuple[list, list]:
+ """
+ 批量校验指纹数据
+
+ Args:
+ raw_data: 原始指纹数据列表
+
+ Returns:
+ tuple: (valid_items, invalid_items)
+ """
+ valid, invalid = [], []
+ for item in raw_data:
+ if self.validate_fingerprint(item):
+ valid.append(item)
+ else:
+ invalid.append(item)
+ return valid, invalid
+
+ def to_model_data(self, item: dict) -> dict:
+ """
+ 转换为 Model 字段,子类必须实现
+
+ Args:
+ item: 原始指纹数据
+
+ Returns:
+ dict: Model 字段数据
+ """
+ raise NotImplementedError("子类必须实现 to_model_data 方法")
+
+ def bulk_create(self, fingerprints: list) -> int:
+ """
+ 批量创建指纹记录(已校验的数据)
+
+ Args:
+ fingerprints: 已校验的指纹数据列表
+
+ Returns:
+ int: 成功创建数量
+ """
+ if not fingerprints:
+ return 0
+
+ objects = [self.model(**self.to_model_data(item)) for item in fingerprints]
+ created = self.model.objects.bulk_create(objects, ignore_conflicts=True)
+ return len(created)
+
+ def batch_create_fingerprints(self, raw_data: list) -> dict:
+ """
+ 完整流程:分批校验 + 批量创建
+
+ Args:
+ raw_data: 原始指纹数据列表
+
+ Returns:
+ dict: {'created': int, 'failed': int}
+ """
+ total_created = 0
+ total_failed = 0
+
+ for i in range(0, len(raw_data), self.BATCH_SIZE):
+ batch = raw_data[i:i + self.BATCH_SIZE]
+ valid, invalid = self.validate_fingerprints(batch)
+ total_created += self.bulk_create(valid)
+ total_failed += len(invalid)
+
+ logger.info(
+ "批量创建指纹完成: created=%d, failed=%d, total=%d",
+ total_created, total_failed, len(raw_data)
+ )
+ return {'created': total_created, 'failed': total_failed}
+
+ def get_export_data(self) -> dict:
+ """
+ 获取导出数据,子类必须实现
+
+ Returns:
+ dict: 导出的 JSON 数据
+ """
+ raise NotImplementedError("子类必须实现 get_export_data 方法")
+
+ def export_to_file(self, output_path: str) -> str:
+ """
+ 导出所有指纹到 JSON 文件
+
+ Args:
+ output_path: 输出文件路径
+
+ Returns:
+ str: 导出的文件路径
+ """
+ data = self.get_export_data()
+ with open(output_path, 'w', encoding='utf-8') as f:
+ json.dump(data, f, ensure_ascii=False)
+ logger.info("导出指纹文件: %s", output_path)
+ return output_path
+
+ def get_fingerprint_version(self) -> str:
+ """
+ 获取指纹库版本标识(用于缓存校验)
+
+ Returns:
+ str: 版本标识,格式 "{count}_{latest_timestamp}"
+
+ 版本变化场景:
+ - 新增记录 → count 变化
+ - 删除记录 → count 变化
+ - 清空全部 → count 变为 0
+ """
+ count = self.model.objects.count()
+ latest = self.model.objects.order_by('-created_at').first()
+ latest_ts = int(latest.created_at.timestamp()) if latest else 0
+ return f"{count}_{latest_ts}"
diff --git a/backend/apps/engine/services/fingerprints/ehole.py b/backend/apps/engine/services/fingerprints/ehole.py
new file mode 100644
index 00000000..674a2cfe
--- /dev/null
+++ b/backend/apps/engine/services/fingerprints/ehole.py
@@ -0,0 +1,84 @@
+"""EHole 指纹管理 Service
+
+实现 EHole 格式指纹的校验、转换和导出逻辑
+"""
+
+from apps.engine.models import EholeFingerprint
+from .base import BaseFingerprintService
+
+
+class EholeFingerprintService(BaseFingerprintService):
+ """EHole 指纹管理服务(继承基类,实现 EHole 特定逻辑)"""
+
+ model = EholeFingerprint
+
+ def validate_fingerprint(self, item: dict) -> bool:
+ """
+ 校验单条 EHole 指纹
+
+ 校验规则:
+ - cms 字段必须存在且非空
+ - keyword 字段必须是数组
+
+ Args:
+ item: 单条指纹数据
+
+ Returns:
+ bool: 是否有效
+ """
+ cms = item.get('cms', '')
+ keyword = item.get('keyword')
+ return bool(cms and str(cms).strip()) and isinstance(keyword, list)
+
+ def to_model_data(self, item: dict) -> dict:
+ """
+ 转换 EHole JSON 格式为 Model 字段
+
+ 字段映射:
+ - isImportant (JSON) → is_important (Model)
+
+ Args:
+ item: 原始 EHole JSON 数据
+
+ Returns:
+ dict: Model 字段数据
+ """
+ return {
+ 'cms': str(item.get('cms', '')).strip(),
+ 'method': item.get('method', 'keyword'),
+ 'location': item.get('location', 'body'),
+ 'keyword': item.get('keyword', []),
+ 'is_important': item.get('isImportant', False),
+ 'type': item.get('type', '-'),
+ }
+
+ def get_export_data(self) -> dict:
+ """
+ 获取导出数据(EHole JSON 格式)
+
+ Returns:
+ dict: EHole 格式的 JSON 数据
+ {
+ "fingerprint": [
+ {"cms": "...", "method": "...", "location": "...",
+ "keyword": [...], "isImportant": false, "type": "..."},
+ ...
+ ],
+ "version": "1000_1703836800"
+ }
+ """
+ fingerprints = self.model.objects.all()
+ data = []
+ for fp in fingerprints:
+ data.append({
+ 'cms': fp.cms,
+ 'method': fp.method,
+ 'location': fp.location,
+ 'keyword': fp.keyword,
+ 'isImportant': fp.is_important, # 转回 JSON 格式
+ 'type': fp.type,
+ })
+ return {
+ 'fingerprint': data,
+ 'version': self.get_fingerprint_version(),
+ }
diff --git a/backend/apps/engine/urls.py b/backend/apps/engine/urls.py
index 46679a24..151071f6 100644
--- a/backend/apps/engine/urls.py
+++ b/backend/apps/engine/urls.py
@@ -7,6 +7,7 @@ from .views import (
WordlistViewSet,
NucleiTemplateRepoViewSet,
)
+from .views.fingerprints import EholeFingerprintViewSet
# 创建路由器
@@ -15,6 +16,8 @@ router.register(r"engines", ScanEngineViewSet, basename="engine")
router.register(r"workers", WorkerNodeViewSet, basename="worker")
router.register(r"wordlists", WordlistViewSet, basename="wordlist")
router.register(r"nuclei/repos", NucleiTemplateRepoViewSet, basename="nuclei-repos")
+# 指纹管理
+router.register(r"fingerprints/ehole", EholeFingerprintViewSet, basename="ehole-fingerprint")
urlpatterns = [
path("", include(router.urls)),
diff --git a/backend/apps/engine/views/fingerprints/__init__.py b/backend/apps/engine/views/fingerprints/__init__.py
new file mode 100644
index 00000000..6f69f39a
--- /dev/null
+++ b/backend/apps/engine/views/fingerprints/__init__.py
@@ -0,0 +1,12 @@
+"""指纹管理 ViewSets
+
+导出所有指纹相关的 ViewSet 类
+"""
+
+from .base import BaseFingerprintViewSet
+from .ehole import EholeFingerprintViewSet
+
+__all__ = [
+ "BaseFingerprintViewSet",
+ "EholeFingerprintViewSet",
+]
diff --git a/backend/apps/engine/views/fingerprints/base.py b/backend/apps/engine/views/fingerprints/base.py
new file mode 100644
index 00000000..13e04bc2
--- /dev/null
+++ b/backend/apps/engine/views/fingerprints/base.py
@@ -0,0 +1,194 @@
+"""指纹管理基类 ViewSet
+
+提供通用的 CRUD 和批量操作,供 EHole/Goby/Wappalyzer 等子类继承
+"""
+
+import json
+import logging
+
+from django.http import HttpResponse
+from rest_framework import viewsets, status, filters
+from rest_framework.decorators import action
+from rest_framework.response import Response
+from rest_framework.exceptions import ValidationError
+
+from apps.common.pagination import BasePagination
+from apps.common.utils.filter_utils import apply_filters
+
+logger = logging.getLogger(__name__)
+
+
+class BaseFingerprintViewSet(viewsets.ModelViewSet):
+ """指纹管理基类 ViewSet,供 EHole/Goby/Wappalyzer 等子类继承
+
+ 提供的 API:
+
+ 标准 CRUD(继承自 ModelViewSet):
+ - GET / 列表查询(分页 + 智能过滤)
+ - POST / 创建单条
+ - GET /{id}/ 获取详情
+ - PUT /{id}/ 更新
+ - DELETE /{id}/ 删除
+
+ 批量操作(本类实现):
+ - POST /batch_create/ 批量创建(JSON body)
+ - POST /import_file/ 文件导入(multipart/form-data,适合 10MB+ 大文件)
+ - POST /bulk-delete/ 批量删除
+ - POST /delete-all/ 删除所有
+ - GET /export/ 导出下载
+
+ 智能过滤语法(filter 参数):
+ - field="value" 模糊匹配(包含)
+ - field=="value" 精确匹配
+ - 多条件空格分隔 AND 关系
+ - || 或 or OR 关系
+
+ 子类必须实现:
+ - service_class Service 类
+ - parse_import_data 解析导入数据格式
+ - get_export_filename 导出文件名
+ """
+
+ pagination_class = BasePagination
+ filter_backends = [filters.OrderingFilter]
+ ordering = ['-created_at']
+
+ # 子类必须指定
+ service_class = None # Service 类
+
+ # 智能过滤字段映射,子类必须覆盖
+ FILTER_FIELD_MAPPING = {}
+
+ def get_queryset(self):
+ """支持智能过滤语法"""
+ queryset = super().get_queryset()
+ filter_query = self.request.query_params.get('filter', None)
+ if filter_query:
+ queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)
+ return queryset
+
+ def get_service(self):
+ """获取 Service 实例"""
+ if self.service_class is None:
+ raise NotImplementedError("子类必须指定 service_class")
+ return self.service_class()
+
+ def parse_import_data(self, json_data: dict) -> list:
+ """
+ 解析导入数据,子类必须实现
+
+ Args:
+ json_data: 解析后的 JSON 数据
+
+ Returns:
+ list: 指纹数据列表
+ """
+ raise NotImplementedError("子类必须实现 parse_import_data 方法")
+
+ def get_export_filename(self) -> str:
+ """
+ 导出文件名,子类必须实现
+
+ Returns:
+ str: 文件名
+ """
+ raise NotImplementedError("子类必须实现 get_export_filename 方法")
+
+ @action(detail=False, methods=['post'])
+ def batch_create(self, request):
+ """
+ 批量创建指纹规则
+ POST /api/engine/fingerprints/{type}/batch_create/
+
+ 请求格式:
+ {
+ "fingerprints": [
+ {"cms": "WordPress", "method": "keyword", ...},
+ ...
+ ]
+ }
+
+ 返回:
+ {
+ "created": 2,
+ "failed": 0
+ }
+ """
+ fingerprints = request.data.get('fingerprints', [])
+ if not fingerprints:
+ raise ValidationError('fingerprints 不能为空')
+ if not isinstance(fingerprints, list):
+ raise ValidationError('fingerprints 必须是数组')
+
+ result = self.get_service().batch_create_fingerprints(fingerprints)
+ return Response(result, status=status.HTTP_201_CREATED)
+
+ @action(detail=False, methods=['post'])
+ def import_file(self, request):
+ """
+ 文件导入(适合大文件,10MB+)
+ POST /api/engine/fingerprints/{type}/import_file/
+
+ 请求格式:multipart/form-data
+ - file: JSON 文件
+
+ 返回:同 batch_create
+ """
+ file = request.FILES.get('file')
+ if not file:
+ raise ValidationError('缺少文件')
+
+ try:
+ json_data = json.load(file)
+ except json.JSONDecodeError as e:
+ raise ValidationError(f'无效的 JSON 格式: {e}')
+
+ fingerprints = self.parse_import_data(json_data)
+ if not fingerprints:
+ raise ValidationError('文件中没有有效的指纹数据')
+
+ result = self.get_service().batch_create_fingerprints(fingerprints)
+ return Response(result, status=status.HTTP_201_CREATED)
+
+ @action(detail=False, methods=['post'], url_path='bulk-delete')
+ def bulk_delete(self, request):
+ """
+ 批量删除
+ POST /api/engine/fingerprints/{type}/bulk-delete/
+
+ 请求格式:{"ids": [1, 2, 3]}
+ 返回:{"deleted": 3}
+ """
+ ids = request.data.get('ids', [])
+ if not ids:
+ raise ValidationError('ids 不能为空')
+ if not isinstance(ids, list):
+ raise ValidationError('ids 必须是数组')
+
+ deleted_count = self.queryset.model.objects.filter(id__in=ids).delete()[0]
+ return Response({'deleted': deleted_count})
+
+ @action(detail=False, methods=['post'], url_path='delete-all')
+ def delete_all(self, request):
+ """
+ 删除所有指纹
+ POST /api/engine/fingerprints/{type}/delete-all/
+
+ 返回:{"deleted": 1000}
+ """
+ deleted_count = self.queryset.model.objects.all().delete()[0]
+ return Response({'deleted': deleted_count})
+
+ @action(detail=False, methods=['get'])
+ def export(self, request):
+ """
+ 导出指纹(前端下载)
+ GET /api/engine/fingerprints/{type}/export/
+
+ 返回:JSON 文件下载
+ """
+ data = self.get_service().get_export_data()
+ content = json.dumps(data, ensure_ascii=False, indent=2)
+ response = HttpResponse(content, content_type='application/json')
+ response['Content-Disposition'] = f'attachment; filename="{self.get_export_filename()}"'
+ return response
diff --git a/backend/apps/engine/views/fingerprints/ehole.py b/backend/apps/engine/views/fingerprints/ehole.py
new file mode 100644
index 00000000..9e6f796d
--- /dev/null
+++ b/backend/apps/engine/views/fingerprints/ehole.py
@@ -0,0 +1,66 @@
+"""EHole 指纹管理 ViewSet"""
+
+from apps.common.pagination import BasePagination
+from apps.engine.models import EholeFingerprint
+from apps.engine.serializers.fingerprints import EholeFingerprintSerializer
+from apps.engine.services.fingerprints import EholeFingerprintService
+
+from .base import BaseFingerprintViewSet
+
+
+class EholeFingerprintViewSet(BaseFingerprintViewSet):
+ """EHole 指纹管理 ViewSet
+
+ 继承自 BaseFingerprintViewSet,提供以下 API:
+
+ 标准 CRUD(ModelViewSet):
+ - GET / 列表查询(分页)
+ - POST / 创建单条
+ - GET /{id}/ 获取详情
+ - PUT /{id}/ 更新
+ - DELETE /{id}/ 删除
+
+ 批量操作(继承自基类):
+ - POST /batch_create/ 批量创建(JSON body)
+ - POST /import_file/ 文件导入(multipart/form-data)
+ - POST /bulk-delete/ 批量删除
+ - POST /delete-all/ 删除所有
+ - GET /export/ 导出下载
+
+ 智能过滤语法(filter 参数):
+ - cms="word" 模糊匹配 cms 字段
+ - cms=="WordPress" 精确匹配
+ - type="CMS" 按类型筛选
+ - method="keyword" 按匹配方式筛选
+ - location="body" 按匹配位置筛选
+ """
+
+ queryset = EholeFingerprint.objects.all()
+ serializer_class = EholeFingerprintSerializer
+ pagination_class = BasePagination
+ service_class = EholeFingerprintService
+
+ # 排序配置
+ ordering_fields = ['created_at', 'cms']
+ ordering = ['-created_at']
+
+ # EHole 过滤字段映射
+ FILTER_FIELD_MAPPING = {
+ 'cms': 'cms',
+ 'method': 'method',
+ 'location': 'location',
+ 'type': 'type',
+ }
+
+ def parse_import_data(self, json_data: dict) -> list:
+ """
+ 解析 EHole JSON 格式的导入数据
+
+ 输入格式:{"fingerprint": [...]}
+ 返回:指纹列表
+ """
+ return json_data.get('fingerprint', [])
+
+ def get_export_filename(self) -> str:
+ """导出文件名"""
+ return 'ehole.json'
diff --git a/backend/apps/scan/utils/fingerprint_helpers.py b/backend/apps/scan/utils/fingerprint_helpers.py
new file mode 100644
index 00000000..686f652e
--- /dev/null
+++ b/backend/apps/scan/utils/fingerprint_helpers.py
@@ -0,0 +1,73 @@
+"""指纹文件本地缓存工具
+
+提供 Worker 侧的指纹文件缓存和版本校验功能,用于:
+- 指纹识别扫描 (fingerprint_scan_flow)
+"""
+
+import logging
+import os
+
+from django.conf import settings
+
+logger = logging.getLogger(__name__)
+
+
+def ensure_ehole_fingerprint_local() -> str:
+ """
+ 确保本地存在最新的 EHole 指纹文件(带缓存)
+
+ 流程:
+ 1. 获取当前指纹库版本
+ 2. 检查缓存文件是否存在且版本匹配
+ 3. 版本不匹配则重新导出
+
+ Returns:
+ str: 本地指纹文件路径
+
+ 使用场景:
+ Worker 执行扫描任务前调用,获取最新指纹文件路径
+ """
+ from apps.engine.services.fingerprints import EholeFingerprintService
+
+ service = EholeFingerprintService()
+ current_version = service.get_fingerprint_version()
+
+ # 缓存目录和文件
+ base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')
+ os.makedirs(base_dir, exist_ok=True)
+ cache_file = os.path.join(base_dir, 'ehole.json')
+ version_file = os.path.join(base_dir, 'ehole.version')
+
+ # 检查缓存版本
+ cached_version = None
+ if os.path.exists(version_file):
+ try:
+ with open(version_file, 'r') as f:
+ cached_version = f.read().strip()
+ except OSError as e:
+ logger.warning("读取版本文件失败: %s", e)
+
+ # 版本匹配,直接返回缓存
+ if cached_version == current_version and os.path.exists(cache_file):
+ logger.info("EHole 指纹文件缓存有效(版本匹配): %s", cache_file)
+ return cache_file
+
+ # 版本不匹配,重新导出
+ logger.info(
+ "EHole 指纹文件需要更新: cached=%s, current=%s",
+ cached_version, current_version
+ )
+ service.export_to_file(cache_file)
+
+ # 写入版本文件
+ try:
+ with open(version_file, 'w') as f:
+ f.write(current_version)
+ except OSError as e:
+ logger.warning("写入版本文件失败: %s", e)
+
+ logger.info("EHole 指纹文件已更新: %s", cache_file)
+ return cache_file
+
+
+__all__ = ["ensure_ehole_fingerprint_local"]
diff --git a/backend/fingerprints/ehole.json b/backend/fingerprints/ehole.json
new file mode 100644
index 00000000..b7941af0
--- /dev/null
+++ b/backend/fingerprints/ehole.json
@@ -0,0 +1,4793 @@
+{
+ "fingerprint": [{
+ "cms": "致远OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/seeyon/USER-DATA/IMAGES/LOGIN/login.gif"]
+ }, {
+ "cms": "致远OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/seeyon/common/"]
+ }, {
+ "cms": "通用企业管理软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/cwbase/web/Login.aspx"]
+ }, {
+ "cms": "致远OA M3 Server",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["M3 Server"]
+ }, {
+ "cms": "iDS联网数字标牌管理系统",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["iDS联网数字标牌管理系统"]
+ }, {
+ "cms": "Nexus Repository Manager",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Nexus Repository Manager"]
+ }, {
+ "cms": "网动统一通信平台(Active UC)",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["网动统一通信平台(Active UC)"]
+ }, {
+ "cms": "禅道 zentao",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Welcome to use zentao"]
+ }, {
+ "cms": "快云服务器小助手",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["快云服务器助手"]
+ }, {
+ "cms": "禅道 zentao",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Welcome to zentao"]
+ }, {
+ "cms": "富通天下外贸ERP",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["用户登录_富通天下外贸ERP"]
+ }, {
+ "cms": "海翔D8药业云平台",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["登录海翔"]
+ }, {
+ "cms": "Kibana",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Kibana"]
+ }, {
+ "cms": "永中在线编辑软件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Web Office","img/eio.png"]
+ }, {
+ "cms": "南方数码交易一体化系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/SouthUIContent/themes/easydropdown.css"]
+ }, {
+ "cms": "朗新天霁人力资源管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["hrsoft.com.cn","chkLogindiv","CustStyle"]
+ }, {
+ "cms": "科荣 AIO 运营管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["style1/css/ListRange.css","主账套","login.jsp"]
+ }, {
+ "cms": "联达动力医院综合办公管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["login.aspx?Method=AJAX&UserName=","Login_Return_XML.aspx"]
+ }, {
+ "cms": "中农信达三资云平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["技术支持:北京中农信达信息技术有限公司"]
+ }, {
+ "cms": "电子申请客户端管理系统(EAC)",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["script/css/gwssi.css"]
+ }, {
+ "cms": "青纺联物联查询平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["青纺联物联查询平台","Themes/default/login.css"]
+ }, {
+ "cms": "致梦科技-管家婆物联通",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["HtmlPages/Vue/vue.js","GetLoginValidate"]
+ }, {
+ "cms": "广联达 Glodon",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/ConsoleCommon/Content/weebox.css","广联达"]
+ }, {
+ "cms": "任我行 CRM",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/Handlers/IdentifyingCode.ashx"]
+ }, {
+ "cms": "广联达 广讯通",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["gtp.standard","JS/gxtAutoLogin.js"]
+ }, {
+ "cms": "智能表综合管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["js/jsCore.js","Ajax_Code/Login.ashx","login.css"]
+ }, {
+ "cms": "科德电子智慧水务平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["山东科德电子有限公司","J_LoginSub"]
+ }, {
+ "cms": "秦川燃气综合管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["系统登录","res/icon/key.png","login"]
+ }, {
+ "cms": "东胜物流软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["js/dhtmlxcombo_whp.js","login.aspx"]
+ }, {
+ "cms": "九思 OA 协同办公系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/jsoa/login.jsp"]
+ }, {
+ "cms": "润申信息企业标准化管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["润申信息","企业标准化管理系统","loginForm"]
+ }, {
+ "cms": "银达汇智智慧综合管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["福州银达云创信息科技有限公司","miniui/crypto/CodeManage.js"]
+ }, {
+ "cms": "同鑫T9eHR信息化管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["T9eHR-iconfont","Authentication/Login"]
+ }, {
+ "cms": "NortekControlLineareMerge",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["img/emerge.ico","login_pw"]
+ }, {
+ "cms": "致远OA M1 Server",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["M1-Server"]
+ }, {
+ "cms": "顶讯科技-易宝OA系统",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["欢迎登录易宝OA系统"]
+ }, {
+ "cms": "惠商+管理系统",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["惠商+管理系统"]
+ }, {
+ "cms": "红帆-ioffice OA",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["iOffice.net"]
+ }, {
+ "cms": "管家婆全渠道业务同步中心",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["管家婆全渠道业务同步中心"]
+ }, {
+ "cms": "Spring env",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["servletContextInitParams"]
+ }, {
+ "cms": "微三云管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["WSY_logo","管理系统 MANAGEMENT SYSTEM"]
+ }, {
+ "cms": "日志易",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["auth/passwordReset","yw-login-","yw-login-logo"]
+ }, {
+ "cms": "思迪数据池管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Ajax/Login","思迪","canvas"]
+ }, {
+ "cms": "科迈 RAS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["科迈RAS","CmxGoUrl.php"]
+ }, {
+ "cms": "Spring env",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["logback"]
+ }, {
+ "cms": "Weblogic",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Error 404--Not Found"]
+ }, {
+ "cms": "Weblogic",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Error 403--"]
+ }, {
+ "cms": "Weblogic",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/console/framework/skins/wlsconsole/images/login_WebLogic_branding.png"]
+ }, {
+ "cms": "TWCMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["href=\"/twcms/theme/default/css/global.css"]
+ }, {
+ "cms": "Weblogic",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Welcome to Weblogic Application Server"]
+ }, {
+ "cms": "Weblogic",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Hypertext Transfer Protocol -- HTTP/1.1"]
+ }, {
+ "cms": "Sangfor SSL VPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/por/login_psw.csp"]
+ }, {
+ "cms": "Sangfor SSL VPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["loginPageSP/loginPrivacy.js"]
+ }, {
+ "cms": "e-mobile",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["weaver,e-mobile"]
+ }, {
+ "cms": "ecology",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["ecology_JSessionid"]
+ }, {
+ "cms": "天融信VPN设备",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["topsecsvportalname"]
+ }, {
+ "cms": "PbootCMS",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["PbootSystem"]
+ }, {
+ "cms": "启明某VPN设备",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["cover_admin.css","SSLVPN LOGIN"]
+ }, {
+ "cms": "天玥运维安全网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["css/fw/full.css","js/p/login.js","login"]
+ }, {
+ "cms": "TP-LINK 产品",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["TP-LINK"]
+ }, {
+ "cms": "Influxdb",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["X-Influxdb"]
+ }, {
+ "cms": "微宏 OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["wh/servlet/MainServer"]
+ }, {
+ "cms": "Shiro",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["rememberMe="]
+ }, {
+ "cms": "Dreamer CMS-Shiro",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["dreamer-"]
+ }, {
+ "cms": "Dreamer CMS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-748565678"]
+ }, {
+ "cms": "慧星自来水营业管理信息系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1704826498"]
+ }, {
+ "cms": "Bonobo Git Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-219625874"]
+ }, {
+ "cms": "晶奇科技救助管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1185226132"]
+ }, {
+ "cms": "用友BIP 数据应用服务",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1183274548"]
+ }, {
+ "cms": "流量通 流量平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["325583172"]
+ }, {
+ "cms": "北京朗新天霁人力资源系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1143915194"]
+ }, {
+ "cms": "护卫神·主机大师",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1188645141"]
+ }, {
+ "cms": "友加畅捷U+财会通",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2049187099"]
+ }, {
+ "cms": "万户ezOFFICE",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1827521324"]
+ }, {
+ "cms": "信锐物联平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["147973611"]
+ }, {
+ "cms": "WiseGrid慧敏应用交付网关",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["910523681"]
+ }, {
+ "cms": "Dreamer CMS",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["dreamer-cms"]
+ }, {
+ "cms": "Shiro",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["=deleteMe"]
+ }, {
+ "cms": "重庆佰鼎-佰鼎OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["default.aspx","Style/Style.css","Skin2017","TxtUserPwd"]
+ }, {
+ "cms": "PbootCMS",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["PbootCMS"]
+ }, {
+ "cms": "泛微云桥 e-Bridge",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["wx.weaver"]
+ }, {
+ "cms": "泛微 OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1578525679"]
+ }, {
+ "cms": "泛微云桥 e-Bridge",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["e-Bridge"]
+ }, {
+ "cms": "Swagger UI",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Swagger UI"]
+ }, {
+ "cms": "Ruijie",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["4008 111 000"]
+ }, {
+ "cms": "Huawei SMC",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Script/SmcScript.js?version="]
+ }, {
+ "cms": "H3C Router",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/wnm/ssl/web/frame/login.html"]
+ }, {
+ "cms": "Cisco SSLVPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/+CSCOE+/logon.html"]
+ }, {
+ "cms": "通达OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/images/tongda.ico"]
+ }, {
+ "cms": "通达OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Office Anywhere"]
+ }, {
+ "cms": "通达OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["通达OA","login"]
+ }, {
+ "cms": "深信服 waf",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["rsa.js", "commonFunction.js"]
+ }, {
+ "cms": "深信服防火墙数据中心",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Redirect to...", "/LogInOut.php"]
+ }, {
+ "cms": "深信服一体化网关 MIG",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["cgi-bin/login.cgi", "/html/wz_tooltip.js"]
+ }, {
+ "cms": "天融信防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TOPSEC", "image/aaa.png","username"]
+ }, {
+ "cms": "天融信TopAPP负载均衡系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TopAPP负载均衡系统", "天融信"]
+ }, {
+ "cms": "网御 vpn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/vpn/common/js/leadsec.js", "/vpn/user/common/custom/auth_home.css"]
+ }, {
+ "cms": "Typecho",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["typecho", "usr/themes"]
+ }, {
+ "cms": "401 登陆认证",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["401 Authorization"]
+ }, {
+ "cms": "唯德科创 IPEasy 知易通",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["_IPEasy知易通"]
+ }, {
+ "cms": "Apache Airflow",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Airflow - Login"]
+ }, {
+ "cms": "启明星辰天清汉马USG防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/cgi-bin/webui?op=get_product_model"]
+ }, {
+ "cms": "蓝凌 OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["sys/ui/extend/theme/default/style/icon.css", "sys/ui/extend/theme/default/style/profile.css"]
+ }, {
+ "cms": "蓝凌 OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["蓝凌软件", "App_Themes/Login"]
+ }, {
+ "cms": "飞鱼星上网行为管理",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["css/R1Login.css", "share.ti_username","login_logo"]
+ }, {
+ "cms": "深信服上网行为管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["utccjfaewjb = function(str, key)"]
+ }, {
+ "cms": "深信服上网行为管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["document.write(WRFWWCSFBXMIGKRKHXFJ"]
+ }, {
+ "cms": "深信服应用交付报表系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/reportCenter/index.php?cls_mode=cluster_mode_others"]
+ }, {
+ "cms": "群晖 NAS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Synology","webman/"]
+ }, {
+ "cms": "金蝶云星空",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["HTML5/content/themes/kdcss.min.css"]
+ }, {
+ "cms": "金蝶云星空",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/ClientBin/Kingdee.BOS.XPF.App.xap"]
+ }, {
+ "cms": "CoreMail",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["coremail/common"]
+ }, {
+ "cms": "启明星辰天清汉马USG防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["天清汉马USG"]
+ }, {
+ "cms": "Jboss",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["jboss.css"]
+ }, {
+ "cms": "Gitlab",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["assets/gitlab_logo"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["入口校验失败"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["没有找到站点","可能原因","CDN产品","Web服务","检查端口是否正确"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["
恭喜,站点创建成功","面板系统后台","系统自动生成"]
+ }, {
+ "cms": "DouPHP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Powered by DouPHP","DouPHP","theme"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["扫码登录更安全","bt.cn","/login"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["站点创建成功","bt.cn"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["站点创建成功","宝塔"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-386189083"]
+ }, {
+ "cms": "禅道",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["self.location", "Lw=="]
+ }, {
+ "cms": "禅道",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/theme/default/images/main/zt-logo.png"]
+ }, {
+ "cms": "禅道",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["zentaosid"]
+ }, {
+ "cms": "用友软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["UFIDA Software CO.LTD all rights reserved"]
+ }, {
+ "cms": "用友NC",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["logo/images/ufida_nc.png","用友NC"]
+ }, {
+ "cms": "YONYOU NC",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["uclient.yonyou.com", "UClient"]
+ }, {
+ "cms": "宝塔-BT.cn",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["宝塔Linux面板"]
+ }, {
+ "cms": "RabbitMQ",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["RabbitMQ Management"]
+ }, {
+ "cms": "Zabbix",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["zabbix", "Zabbix SIA"]
+ }, {
+ "cms": "联软准入",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["网络准入", "leagsoft", "redirect"]
+ }, {
+ "cms": "列目录",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Index of /"]
+ }, {
+ "cms": "列目录",
+ "method": "keyword",
+ "location": "body",
+ "keyword": [" - /"]
+ }, {
+ "cms": "浪潮服务器IPMI管理口",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["img/inspur_logo.png", "Management System"]
+ }, {
+ "cms": "RegentApi_v2.0",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["RegentApi_v2.0"]
+ }, {
+ "cms": "Tomcat默认页面",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/manager/status", "/manager/html"]
+ }, {
+ "cms": "slack-instance",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["99395752"]
+ }, {
+ "cms": "spring-boot",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["116323821"]
+ }, {
+ "cms": "Jenkins",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["81586312"]
+ }, {
+ "cms": "Cnservers LLC",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-235701012"]
+ }, {
+ "cms": "Atlassian",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["743365239"]
+ }, {
+ "cms": "Chainpoint",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2128230701"]
+ }, {
+ "cms": "LaCie",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1277814690"]
+ }, {
+ "cms": "Parse",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["246145559"]
+ }, {
+ "cms": "Atlassian",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["628535358"]
+ }, {
+ "cms": "JIRA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["855273746"]
+ }, {
+ "cms": "Avigilon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1318124267"]
+ }, {
+ "cms": "Atlassian – Confluence",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-305179312"]
+ }, {
+ "cms": "OpenStack",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["786533217"]
+ }, {
+ "cms": "Pi Star",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["432733105"]
+ }, {
+ "cms": "Atlassian",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["705143395"]
+ }, {
+ "cms": "Angular IO (AngularJS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1255347784"]
+ }, {
+ "cms": "XAMPP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1275226814"]
+ }, {
+ "cms": "React",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2009722838"]
+ }, {
+ "cms": "Atlassian – JIRA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["981867722"]
+ }, {
+ "cms": "OpenStack",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-923088984"]
+ }, {
+ "cms": "Aplikasi",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["494866796"]
+ }, {
+ "cms": "Ubiquiti Aircube",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1249285083"]
+ }, {
+ "cms": "Atlassian – Bamboo",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1379982221"]
+ }, {
+ "cms": "Exostar – Managed Access Gateway",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["420473080"]
+ }, {
+ "cms": "Atlassian – Confluence",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1642532491"]
+ }, {
+ "cms": "Cisco Meraki",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["163842882"]
+ }, {
+ "cms": "Archivematica",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1378182799"]
+ }, {
+ "cms": "TCN",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-702384832"]
+ }, {
+ "cms": "CX",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-532394952"]
+ }, {
+ "cms": "Ace",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-183163807"]
+ }, {
+ "cms": "Atlassian – JIRA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["552727997"]
+ }, {
+ "cms": "NetData",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1302486561"]
+ }, {
+ "cms": "OpenGeo Suite",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-609520537"]
+ }, {
+ "cms": "Dgraph Ratel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1961046099"]
+ }, {
+ "cms": "Atlassian – JIRA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1581907337"]
+ }, {
+ "cms": "Material Dashboard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1913538826"]
+ }, {
+ "cms": "Form.io",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1319699698"]
+ }, {
+ "cms": "Kubeflow",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1203021870"]
+ }, {
+ "cms": "netdata dashboard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-182423204"]
+ }, {
+ "cms": "CapRover",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["988422585"]
+ }, {
+ "cms": "WiJungle",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2113497004"]
+ }, {
+ "cms": "Onera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1234311970"]
+ }, {
+ "cms": "SmartPing",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["430582574"]
+ }, {
+ "cms": "OpenStack",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1232596212"]
+ }, {
+ "cms": "netdata dashboard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1585145626"]
+ }, {
+ "cms": "FRITZ!Box",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-219752612"]
+ }, {
+ "cms": "fortinet-forticlient",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["945408572"]
+ }, {
+ "cms": "Ubiquiti – AirOS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-697231354"]
+ }, {
+ "cms": "Fortinet – Forticlient",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["945408572"]
+ }, {
+ "cms": "Outlook Web Application",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1768726119"]
+ }, {
+ "cms": "Huawei – Claro",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2109473187"]
+ }, {
+ "cms": "ASUS AiCloud",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["552592949"]
+ }, {
+ "cms": "SonicWALL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["631108382"]
+ }, {
+ "cms": "Google",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["708578229"]
+ }, {
+ "cms": "Plesk",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-134375033"]
+ }, {
+ "cms": "Dahua Storm (IP Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2019488876"]
+ }, {
+ "cms": "Huawei – ADSL/Router",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1395400951"]
+ }, {
+ "cms": "Sophos Cyberoam (appliance)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1601194732"]
+ }, {
+ "cms": "LANCOM Systems",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-325082670"]
+ }, {
+ "cms": "Plesk",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1050786453"]
+ }, {
+ "cms": "TilginAB (HomeGateway)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1346447358"]
+ }, {
+ "cms": "Supermicro Intelligent Management (IPMI)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1410610129"]
+ }, {
+ "cms": "Zyxel ZyWALL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-440644339"]
+ }, {
+ "cms": "Dell SonicWALL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["363324987"]
+ }, {
+ "cms": "Ubiquiti Login Portals",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1446794564"]
+ }, {
+ "cms": "Sophos User Portal/VPN Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1045696447"]
+ }, {
+ "cms": "Apache Tomcat",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-297069493"]
+ }, {
+ "cms": "OpenVPN",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["396533629"]
+ }, {
+ "cms": "Cyberoam",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1462981117"]
+ }, {
+ "cms": "Technicolor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1594377337"]
+ }, {
+ "cms": "Vodafone (Technicolor)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["165976831"]
+ }, {
+ "cms": "UBNT Router UI",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1677255344"]
+ }, {
+ "cms": "Intelbras Wireless",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-359621743"]
+ }, {
+ "cms": "Kerio Connect (Webmail)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-677167908"]
+ }, {
+ "cms": "BIG-IP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["878647854"]
+ }, {
+ "cms": "Microsoft OWA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["442749392"]
+ }, {
+ "cms": "pfSense",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1405460984"]
+ }, {
+ "cms": "iKuai Networks",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-271448102"]
+ }, {
+ "cms": "Dlink Webcam",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["31972968"]
+ }, {
+ "cms": "3CX Phone System",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["970132176"]
+ }, {
+ "cms": "Bluehost",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1119613926"]
+ }, {
+ "cms": "Sangfor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["123821839"]
+ }, {
+ "cms": "ZTE Corporation (Gateway/Appliance)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["459900502"]
+ }, {
+ "cms": "Ruckus Wireless",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2069844696"]
+ }, {
+ "cms": "Bitnami",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1607644090"]
+ }, {
+ "cms": "Juniper Device Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2141724739"]
+ }, {
+ "cms": "Technicolor Gateway",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1835479497"]
+ }, {
+ "cms": "Gitlab",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1278323681"]
+ }, {
+ "cms": "NETASQ - Secure / Stormshield",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1929912510"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1255992602"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1895360511"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-991123252"]
+ }, {
+ "cms": "Vmware Secure File Transfer",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1642701741"]
+ }, {
+ "cms": "SAP Netweaver",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-266008933"]
+ }, {
+ "cms": "SAP ID Service: Log On",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1967743928"]
+ }, {
+ "cms": "SAP Conversational AI",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1347937389"]
+ }, {
+ "cms": "Palo Alto Login Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["602431586"]
+ }, {
+ "cms": "Palo Alto Networks",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-318947884"]
+ }, {
+ "cms": "Outlook Web Application",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1356662359"]
+ }, {
+ "cms": "Webmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1453890729"]
+ }, {
+ "cms": "Docker",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1814887000"]
+ }, {
+ "cms": "Docker",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1937209448"]
+ }, {
+ "cms": "Amazon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1544605732"]
+ }, {
+ "cms": "Amazon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["716989053"]
+ }, {
+ "cms": "phpMyAdmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1010568750"]
+ }, {
+ "cms": "Zhejiang Uniview Technologies Co.",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1240222446"]
+ }, {
+ "cms": "ISP Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-986678507"]
+ }, {
+ "cms": "AXIS (network cameras)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1616143106"]
+ }, {
+ "cms": "Roundcube Webmail",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-976235259"]
+ }, {
+ "cms": "UniFi Video Controller (airVision)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["768816037"]
+ }, {
+ "cms": "pfSense",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1015545776"]
+ }, {
+ "cms": "Freebox OS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1838417872"]
+ }, {
+ "cms": "Keenetic",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["547282364"]
+ }, {
+ "cms": "Sierra Wireless Ace Manager (Airlink)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1571472432"]
+ }, {
+ "cms": "Synology DiskStation",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["149371702"]
+ }, {
+ "cms": "INSTAR IP Cameras",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1169314298"]
+ }, {
+ "cms": "Webmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1038557304"]
+ }, {
+ "cms": "Octoprint (3D printer)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1307375944"]
+ }, {
+ "cms": "Webmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1280907310"]
+ }, {
+ "cms": "Vesta Hosting Control Panel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1954835352"]
+ }, {
+ "cms": "Farming Simulator Dedicated Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["509789953"]
+ }, {
+ "cms": "Residential Gateway",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1933493443"]
+ }, {
+ "cms": "cPanel Login",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1993518473"]
+ }, {
+ "cms": "Arris",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1477563858"]
+ }, {
+ "cms": "PLEX Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-895890586"]
+ }, {
+ "cms": "Dlink Webcam",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1354933624"]
+ }, {
+ "cms": "Deluge",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["944969688"]
+ }, {
+ "cms": "Webmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["479413330"]
+ }, {
+ "cms": "Cambium Networks",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-435817905"]
+ }, {
+ "cms": "Plesk",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-981606721"]
+ }, {
+ "cms": "Dahua Storm (IP Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["833190513"]
+ }, {
+ "cms": "Parallels Plesk Panel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-652508439"]
+ }, {
+ "cms": "Fireware Watchguard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-569941107"]
+ }, {
+ "cms": "Shock&Innovation!! netis setup",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1326164945"]
+ }, {
+ "cms": "cacaoweb",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1738184811"]
+ }, {
+ "cms": "Loxone (Automation)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["904434662"]
+ }, {
+ "cms": "HP Printer / Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["905744673"]
+ }, {
+ "cms": "Netflix",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["902521196"]
+ }, {
+ "cms": "Linksys Smart Wi-Fi",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2063036701"]
+ }, {
+ "cms": "lwIP (A Lightweight TCP/IP stack)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1205024243"]
+ }, {
+ "cms": "Hitron Technologies",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["607846949"]
+ }, {
+ "cms": "Dahua Storm (DVR)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1281253102"]
+ }, {
+ "cms": "MOBOTIX Camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["661332347"]
+ }, {
+ "cms": "Blue Iris (Webcam)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-520888198"]
+ }, {
+ "cms": "Vigor Router",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["104189364"]
+ }, {
+ "cms": "Alibaba Cloud (Block Page)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1227052603"]
+ }, {
+ "cms": "DD WRT (DD-WRT milli_httpd)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["252728887"]
+ }, {
+ "cms": "Mitel Networks (MiCollab End User Portal)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1922044295"]
+ }, {
+ "cms": "Dlink Webcam",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1221759509"]
+ }, {
+ "cms": "Dlink Router",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1037387972"]
+ }, {
+ "cms": "PRTG Network Monitor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-655683626"]
+ }, {
+ "cms": "Elastic (Database)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1611729805"]
+ }, {
+ "cms": "Dlink Webcam",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1144925962"]
+ }, {
+ "cms": "Wildfly",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1666561833"]
+ }, {
+ "cms": "Cisco Meraki Dashboard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["804949239"]
+ }, {
+ "cms": "Workday",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-459291760"]
+ }, {
+ "cms": "JustHost",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1734609466"]
+ }, {
+ "cms": "Baidu (IP error page)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1507567067"]
+ }, {
+ "cms": "Intelbras SA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2006716043"]
+ }, {
+ "cms": "Yii PHP Framework (Default Favicon)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1298108480"]
+ }, {
+ "cms": "truVision NVR (interlogix)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1782271534"]
+ }, {
+ "cms": "SOYAL Serial Device Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1777351344"]
+ }, {
+ "cms": "Redmine",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["603314"]
+ }, {
+ "cms": "phpMyAdmin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-476231906"]
+ }, {
+ "cms": "Cisco (eg:Conference Room Login Page)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-646322113"]
+ }, {
+ "cms": "Jetty 404",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-629047854"]
+ }, {
+ "cms": "Luma Surveillance",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1351901211"]
+ }, {
+ "cms": "Parallels Plesk Panel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-519765377"]
+ }, {
+ "cms": "HP Printer / Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2144363468"]
+ }, {
+ "cms": "Metasploit",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-127886975"]
+ }, {
+ "cms": "Metasploit",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1139788073"]
+ }, {
+ "cms": "Metasploit",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1235192469"]
+ }, {
+ "cms": "ALIBI NVR",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1876585825"]
+ }, {
+ "cms": "Sangfor 应用交付报表系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1810847295"]
+ }, {
+ "cms": "Websockets test page (eg: port 5900)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-291579889"]
+ }, {
+ "cms": "macOS Server (Apple)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1629518721"]
+ }, {
+ "cms": "OpenRG",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-986816620"]
+ }, {
+ "cms": "Cisco Router",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-299287097"]
+ }, {
+ "cms": "Sangfor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1926484046"]
+ }, {
+ "cms": "HeroSpeed Digital Technology Co. (NVR/IPC/XVR)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-873627015"]
+ }, {
+ "cms": "Nomadix Access Gateway",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2071993228"]
+ }, {
+ "cms": "Gitlab",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["516963061"]
+ }, {
+ "cms": "Magento",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-38580010"]
+ }, {
+ "cms": "MK-AUTH",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1490343308"]
+ }, {
+ "cms": "Shoutcast Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-632583950"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["95271369"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1476335317"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-842192932"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["105083909"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["240606739"]
+ }, {
+ "cms": "FireEye",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2121539357"]
+ }, {
+ "cms": "Adobe Campaign Classic",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-333791179"]
+ }, {
+ "cms": "XAMPP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1437701105"]
+ }, {
+ "cms": "Niagara Web Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-676077969"]
+ }, {
+ "cms": "Technicolor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2138771289"]
+ }, {
+ "cms": "Hitron Technologies Inc.",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["711742418"]
+ }, {
+ "cms": "IBM Notes",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["728788645"]
+ }, {
+ "cms": "Barracuda",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1436966696"]
+ }, {
+ "cms": "ServiceNow",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["86919334"]
+ }, {
+ "cms": "Openfire Admin Console",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1211608009"]
+ }, {
+ "cms": "HP iLO",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2059618623"]
+ }, {
+ "cms": "Sunny WebBox",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1975413433"]
+ }, {
+ "cms": "ZyXEL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["943925975"]
+ }, {
+ "cms": "Huawei",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["281559989"]
+ }, {
+ "cms": "Tenda Web Master",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2145085239"]
+ }, {
+ "cms": "Prometheus Time Series Collection and Processing Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1399433489"]
+ }, {
+ "cms": "wdCP 云主机面板",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1786752597"]
+ }, {
+ "cms": "Domoticz (Home Automation)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["90680708"]
+ }, {
+ "cms": "Tableau",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1441956789"]
+ }, {
+ "cms": "openWRT Luci",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-675839242"]
+ }, {
+ "cms": "Ubiquiti – AirOS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1020814938"]
+ }, {
+ "cms": "MDaemon Webmail",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-766957661"]
+ }, {
+ "cms": "Teltonika",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["119741608"]
+ }, {
+ "cms": "Entrolink",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1973665246"]
+ }, {
+ "cms": "WindRiver-WebServer",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["74935566"]
+ }, {
+ "cms": "Microhard Systems",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1723752240"]
+ }, {
+ "cms": "Skype",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1807411396"]
+ }, {
+ "cms": "Teltonika",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1612496354"]
+ }, {
+ "cms": "Eltex (Router)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1877797890"]
+ }, {
+ "cms": "bintec elmeg",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-375623619"]
+ }, {
+ "cms": "SyncThru Web Service (Printers)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1483097076"]
+ }, {
+ "cms": "BoaServer",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1169183049"]
+ }, {
+ "cms": "Securepoint",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1051648103"]
+ }, {
+ "cms": "Moodle",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-438482901"]
+ }, {
+ "cms": "RADIX",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1492966240"]
+ }, {
+ "cms": "CradlePoint Technology (Router)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1466912879"]
+ }, {
+ "cms": "Drupal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-167656799"]
+ }, {
+ "cms": "Blackboard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1593651747"]
+ }, {
+ "cms": "Jupyter Notebook",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-895963602"]
+ }, {
+ "cms": "HostMonster - Web hosting",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-972810761"]
+ }, {
+ "cms": "D-Link (router/network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1703788174"]
+ }, {
+ "cms": "Rocket Chat",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["225632504"]
+ }, {
+ "cms": "mofinetwork",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1702393021"]
+ }, {
+ "cms": "Zabbix",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["892542951"]
+ }, {
+ "cms": "TOTOLINK (network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["547474373"]
+ }, {
+ "cms": "Ossia (Provision SR) | Webcam/IP Camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-374235895"]
+ }, {
+ "cms": "cPanel Login",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1544230796"]
+ }, {
+ "cms": "D-Link (router/network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["517158172"]
+ }, {
+ "cms": "Jeedom (home automation)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["462223993"]
+ }, {
+ "cms": "JBoss Application Server 7",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["937999361"]
+ }, {
+ "cms": "Niagara Web Server / Tridium",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1991562061"]
+ }, {
+ "cms": "Solarwinds Serv-U FTP Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["812385209"]
+ }, {
+ "cms": "Aruba (Virtual Controller)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1142227528"]
+ }, {
+ "cms": "Dell",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1153950306"]
+ }, {
+ "cms": "RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["72005642"]
+ }, {
+ "cms": "Zyxel ZyWALL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-484708885"]
+ }, {
+ "cms": "VisualSVN Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["706602230"]
+ }, {
+ "cms": "Jboss",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-656811182"]
+ }, {
+ "cms": "STARFACE VoIP Software",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-332324409"]
+ }, {
+ "cms": "Netis (network devices)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-594256627"]
+ }, {
+ "cms": "WHM",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-649378830"]
+ }, {
+ "cms": "Tandberg",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["97604680"]
+ }, {
+ "cms": "Ghost (CMS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1015932800"]
+ }, {
+ "cms": "Avtech IP Surveillance (Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-194439630"]
+ }, {
+ "cms": "Liferay Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["129457226"]
+ }, {
+ "cms": "Parallels Plesk Panel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-771764544"]
+ }, {
+ "cms": "Odoo",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-617743584"]
+ }, {
+ "cms": "Polycom",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["77044418"]
+ }, {
+ "cms": "Cake PHP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["980692677"]
+ }, {
+ "cms": "Exacq",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["476213314"]
+ }, {
+ "cms": "CheckPoint",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["794809961"]
+ }, {
+ "cms": "Ubiquiti UNMS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1157789622"]
+ }, {
+ "cms": "cPanel Login",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1244636413"]
+ }, {
+ "cms": "WorldClient for Mdaemon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1985721423"]
+ }, {
+ "cms": "Netport Software (DSL)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1124868062"]
+ }, {
+ "cms": "f5 Big IP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-335242539"]
+ }, {
+ "cms": "Mailcow",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2146763496"]
+ }, {
+ "cms": "QNAP NAS Virtualization Station",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1041180225"]
+ }, {
+ "cms": "Netgear",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1319025408"]
+ }, {
+ "cms": "Gogs",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["917966895"]
+ }, {
+ "cms": "Trendnet IP camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["512590457"]
+ }, {
+ "cms": "Asustor",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1678170702"]
+ }, {
+ "cms": "Dahua",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1466785234"]
+ }, {
+ "cms": "Discuz!",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-505448917"]
+ },{
+ "cms": "Discuz!",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Discuz!","Comsenz","cache/"]
+ }, {
+ "cms": "wdCP cloud host management system",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["255892555"]
+ }, {
+ "cms": "Joomla",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1627330242"]
+ }, {
+ "cms": "SmarterMail",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1935525788"]
+ }, {
+ "cms": "Seafile",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-12700016"]
+ }, {
+ "cms": "bintec elmeg",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1770799630"]
+ }, {
+ "cms": "NETGEAR ReadyNAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-137295400"]
+ }, {
+ "cms": "iPECS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-195508437"]
+ }, {
+ "cms": "bet365",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2116540786"]
+ }, {
+ "cms": "Reolink",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-38705358"]
+ }, {
+ "cms": "idera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-450254253"]
+ }, {
+ "cms": "Proofpoint",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1630354993"]
+ }, {
+ "cms": "Kerio Connect WebMail",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1678298769"]
+ }, {
+ "cms": "WorldClient for Mdaemon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-35107086"]
+ }, {
+ "cms": "Realtek",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2055322029"]
+ }, {
+ "cms": "锐捷 Ruijie Networks",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-692947551"]
+ }, {
+ "cms": "Askey Cable Modem",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1710631084"]
+ }, {
+ "cms": "Askey Cable Modem",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["89321398"]
+ }, {
+ "cms": "JAWS Web Server (IP Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["90066852"]
+ }, {
+ "cms": "JAWS Web Server (IP Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["768231242"]
+ }, {
+ "cms": "Homegrown Website Hosting",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-421986013"]
+ }, {
+ "cms": "Technicolor / Thomson Speedtouch (Network / ADSL)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["156312019"]
+ }, {
+ "cms": "DVR (Korean)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-560297467"]
+ }, {
+ "cms": "Joomla",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1950415971"]
+ }, {
+ "cms": "TP-LINK (Network Device)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1842351293"]
+ }, {
+ "cms": "Salesforce",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1433417005"]
+ }, {
+ "cms": "Apache Haus",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-632070065"]
+ }, {
+ "cms": "Untangle",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1103599349"]
+ }, {
+ "cms": "Shenzhen coship electronics co.",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["224536051"]
+ }, {
+ "cms": "D-Link (router/network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1038500535"]
+ }, {
+ "cms": "D-Link (camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-355305208"]
+ }, {
+ "cms": "Kibana",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-267431135"]
+ }, {
+ "cms": "Kibana",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-759754862"]
+ }, {
+ "cms": "Kibana",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1200737715"]
+ }, {
+ "cms": "Kibana",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["75230260"]
+ }, {
+ "cms": "Kibana",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1668183286"]
+ }, {
+ "cms": "Intelbras SA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["283740897"]
+ }, {
+ "cms": "Icecast Streaming Media Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1424295654"]
+ }, {
+ "cms": "NEC WebPro",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1922032523"]
+ }, {
+ "cms": "Vivotek (Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1654229048"]
+ }, {
+ "cms": "Microsoft IIS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1414475558"]
+ }, {
+ "cms": "Univention Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1697334194"]
+ }, {
+ "cms": "Portainer (Docker Management)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1424036600"]
+ }, {
+ "cms": "NOS Router",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-831826827"]
+ }, {
+ "cms": "Tongda",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-759108386"]
+ }, {
+ "cms": "CrushFTP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1022206565"]
+ }, {
+ "cms": "Endian Firewall",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1225484776"]
+ }, {
+ "cms": "Kerio Control Firewall",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-631002664"]
+ }, {
+ "cms": "Ferozo Panel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2072198544"]
+ }, {
+ "cms": "Kerio Control Firewall",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-466504476"]
+ }, {
+ "cms": "Cafe24 (Korea)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1251810433"]
+ }, {
+ "cms": "Mautic (Open Source Marketing Automation)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1273982002"]
+ }, {
+ "cms": "NETIASPOT (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-978656757"]
+ }, {
+ "cms": "Multilaser",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["916642917"]
+ }, {
+ "cms": "Canvas LMS (Learning Management)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["575613323"]
+ }, {
+ "cms": "IBM Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1726027799"]
+ }, {
+ "cms": "ADB Broadband S.p.A. (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-587741716"]
+ }, {
+ "cms": "ARRIS (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-360566773"]
+ }, {
+ "cms": "Huawei (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-884776764"]
+ }, {
+ "cms": "WAMPSERVER",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["929825723"]
+ }, {
+ "cms": "Seagate Technology (NAS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["240136437"]
+ }, {
+ "cms": "UPC Ceska Republica (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1911253822"]
+ }, {
+ "cms": "Flussonic (Video Streaming)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-393788031"]
+ }, {
+ "cms": "Joomla",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["366524387"]
+ }, {
+ "cms": "WAMPSERVER",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["443944613"]
+ }, {
+ "cms": "Metabase",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1953726032"]
+ }, {
+ "cms": "D-Link (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2031183903"]
+ }, {
+ "cms": "MobileIron",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["545827989"]
+ }, {
+ "cms": "MobileIron",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["967636089"]
+ }, {
+ "cms": "MobileIron",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["362091310"]
+ }, {
+ "cms": "MobileIron",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2086228042"]
+ }, {
+ "cms": "CommuniGate",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1588746893"]
+ }, {
+ "cms": "ZTE (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1427976651"]
+ }, {
+ "cms": "InfiNet Wireless | WANFleX (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1648531157"]
+ }, {
+ "cms": "Mersive Solstice",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["938616453"]
+ }, {
+ "cms": "Université Toulouse 1 Capitole",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1632780968"]
+ }, {
+ "cms": "Digium (Switchvox)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2068154487"]
+ }, {
+ "cms": "PowerMTA monitoring",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1788112745"]
+ }, {
+ "cms": "SmartLAN/G",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-644617577"]
+ }, {
+ "cms": "Checkpoint (Gaia)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1822098181"]
+ }, {
+ "cms": "УТМ (Federal Service for Alcohol Market Regulation | Russia)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1131689409"]
+ }, {
+ "cms": "MailWizz",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2127152956"]
+ }, {
+ "cms": "RabbitMQ",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1064742722"]
+ }, {
+ "cms": "openmediavault (NAS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-693082538"]
+ }, {
+ "cms": "openWRT Luci",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1941381095"]
+ }, {
+ "cms": "Honeywell",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["903086190"]
+ }, {
+ "cms": "BOMGAR Support Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["829321644"]
+ }, {
+ "cms": "Nuxt JS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1442789563"]
+ }, {
+ "cms": "RoundCube Webmail",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2140379067"]
+ }, {
+ "cms": "D-Link (camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1897829998"]
+ }, {
+ "cms": "Netgear (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1047213685"]
+ }, {
+ "cms": "SonarQube",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1485257654"]
+ }, {
+ "cms": "Lupus Electronics XT",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-299324825"]
+ }, {
+ "cms": "Vanderbilt SPC",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1162730477"]
+ }, {
+ "cms": "VZPP Plesk",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1268095485"]
+ }, {
+ "cms": "Baidu",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1118684072"]
+ }, {
+ "cms": "ownCloud",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1616115760"]
+ }, {
+ "cms": "Sentora",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2054889066"]
+ }, {
+ "cms": "Alfresco",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1333537166"]
+ }, {
+ "cms": "Digital Keystone (DK)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-373674173"]
+ }, {
+ "cms": "WISPR (Airlan)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-106646451"]
+ }, {
+ "cms": "Synology VPN Plus",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1235070469"]
+ }, {
+ "cms": "Sentry",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2063428236"]
+ }, {
+ "cms": "WatchGuard",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["15831193"]
+ }, {
+ "cms": "Web Client Pro",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-956471263"]
+ }, {
+ "cms": "Tecvoz",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1452159623"]
+ }, {
+ "cms": "MDaemon Remote Administration",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["99432374"]
+ }, {
+ "cms": "Paradox IP Module",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["727253975"]
+ }, {
+ "cms": "DokuWiki",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-630493013"]
+ }, {
+ "cms": "Sails",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["552597979"]
+ }, {
+ "cms": "FastPanel Hosting",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["774252049"]
+ }, {
+ "cms": "C-Lodop",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-329747115"]
+ }, {
+ "cms": "Jamf Pro Login",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1262005940"]
+ }, {
+ "cms": "StruxureWare (Schneider Electric)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["979634648"]
+ }, {
+ "cms": "Axcient Replibit Management Server",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["475379699"]
+ }, {
+ "cms": "Twonky Server (Media Streaming)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-878891718"]
+ }, {
+ "cms": "Windows Azure",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2125083197"]
+ }, {
+ "cms": "ISP Manager (Web Hosting Panel)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1151675028"]
+ }, {
+ "cms": "JupyterHub",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1248917303"]
+ }, {
+ "cms": "CenturyLink Modem GUI Login (eg: Technicolor)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1908556829"]
+ }, {
+ "cms": "Tecvoz",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1059329877"]
+ }, {
+ "cms": "OPNsense",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1148190371"]
+ }, {
+ "cms": "Ligowave (network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1467395679"]
+ }, {
+ "cms": "Rumpus",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1528414776"]
+ }, {
+ "cms": "Spiceworks (panel)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2117390767"]
+ }, {
+ "cms": "TeamCity",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1944119648"]
+ }, {
+ "cms": "INSTAR Full-HD IP-Camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1748763891"]
+ }, {
+ "cms": "GPON Home Gateway",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["251106693"]
+ }, {
+ "cms": "Alienvault",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1779611449"]
+ }, {
+ "cms": "Arbor Networks",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1745552996"]
+ }, {
+ "cms": "Accrisoft",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1275148624"]
+ }, {
+ "cms": "Yasni",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-178685903"]
+ }, {
+ "cms": "Slack",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-43161126"]
+ }, {
+ "cms": "innovaphone",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["671221099"]
+ }, {
+ "cms": "Shinobi (CCTV)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-10974981"]
+ }, {
+ "cms": "TP-LINK (Network Device)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1274078387"]
+ }, {
+ "cms": "Siemens OZW772",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-336242473"]
+ }, {
+ "cms": "Lantronix (Spider)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["882208493"]
+ }, {
+ "cms": "ClaimTime (Ramsell Public Health & Safety)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-687783882"]
+ }, {
+ "cms": "Surfilter SSL VPN Portal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-590892202"]
+ }, {
+ "cms": "Kyocera (Printer)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-50306417"]
+ }, {
+ "cms": "Lucee!",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["784872924"]
+ }, {
+ "cms": "Ricoh",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1135165421"]
+ }, {
+ "cms": "Handle Proxy",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["926501571"]
+ }, {
+ "cms": "Metasploit",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["579239725"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-689902428"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-600508822"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["656868270"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2056503929"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1656695885"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["331870709"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1241049726"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["998138196"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["322531336"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-401934945"]
+ }, {
+ "cms": "iomega NAS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-613216179"]
+ }, {
+ "cms": "Chef Automate",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-276759139"]
+ }, {
+ "cms": "Gargoyle Router Management Utility",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1862132268"]
+ }, {
+ "cms": "KeepItSafe Management Console",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1738727418"]
+ }, {
+ "cms": "Entronix Energy Management Platform",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-368490461"]
+ }, {
+ "cms": "OpenProject",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1836828108"]
+ }, {
+ "cms": "Unified Management Console (Polycom)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1775553655"]
+ }, {
+ "cms": "Moxapass ioLogik Remote Ethernet I/O Server ",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["381100274"]
+ }, {
+ "cms": "HFS (HTTP File Server)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2124459909"]
+ }, {
+ "cms": "HFS (HTTP File Server)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["731374291"]
+ }, {
+ "cms": "Traccar GPS tracking",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-335153896"]
+ }, {
+ "cms": "IW",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["896412703"]
+ }, {
+ "cms": "Wordpress Under Construction Icon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["191654058"]
+ }, {
+ "cms": "Combivox",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-342262483"]
+ }, {
+ "cms": "NetComWireless (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["5542029"]
+ }, {
+ "cms": "Elastic (Database)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1552860581"]
+ }, {
+ "cms": "Drupal",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1174841451"]
+ }, {
+ "cms": "truVision (NVR)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1093172228"]
+ }, {
+ "cms": "SpamExperts",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1688698891"]
+ }, {
+ "cms": "Sonatype Nexus Repository Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1546574541"]
+ }, {
+ "cms": "iDirect Canada (Network Management)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-256828986"]
+ }, {
+ "cms": "OpenERP (now known as Odoo)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1966198264"]
+ }, {
+ "cms": "PKP (OpenJournalSystems) Public Knowledge Project",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2099342476"]
+ }, {
+ "cms": "LiquidFiles",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["541087742"]
+ }, {
+ "cms": "ZyXEL (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-882760066"]
+ }, {
+ "cms": "Universal Devices (UD)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["16202868"]
+ }, {
+ "cms": "Huawei (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["987967490"]
+ },{
+ "cms": "Gitea",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1969970750"]
+ }, {
+ "cms": "TC-Group",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1734573358"]
+ }, {
+ "cms": "Deluge Web UI",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1589842876"]
+ }, {
+ "cms": "AMH 云主机面板",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1822002133"]
+ }, {
+ "cms": "OTRS (Open Ticket Request System)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2006308185"]
+ }, {
+ "cms": "Bosch Security Systems (Camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1702769256"]
+ }, {
+ "cms": "Node-RED",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["321591353"]
+ }, {
+ "cms": "motionEye (camera)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-923693877"]
+ }, {
+ "cms": "Saia Burgess Controls – PCD",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1547576879"]
+ }, {
+ "cms": "Arcadyan o2 box (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1479202414"]
+ }, {
+ "cms": "D-Link (Network)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1081719753"]
+ }, {
+ "cms": "Abilis (Network/Automation)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-166151761"]
+ }, {
+ "cms": "Ghost (CMS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1231681737"]
+ }, {
+ "cms": "Airwatch",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["321909464"]
+ }, {
+ "cms": "Airwatch",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1153873472"]
+ }, {
+ "cms": "Airwatch",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1095915848"]
+ }, {
+ "cms": "Airwatch",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["788771792"]
+ }, {
+ "cms": "Airwatch",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1863663974"]
+ }, {
+ "cms": "KeyHelp (Keyweb AG)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1267819858"]
+ }, {
+ "cms": "KeyHelp (Keyweb AG)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["726817668"]
+ }, {
+ "cms": "GLPI",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1474875778"]
+ }, {
+ "cms": "Netcom Technology",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["5471989"]
+ }, {
+ "cms": "CradlePoint",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1457536113"]
+ }, {
+ "cms": "MyASP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-736276076"]
+ }, {
+ "cms": "Intelbras SA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1343070146"]
+ }, {
+ "cms": "Lenel",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["538585915"]
+ }, {
+ "cms": "OkoFEN Pellematic",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-625364318"]
+ }, {
+ "cms": "SimpleHelp (Remote Support)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1117165781"]
+ }, {
+ "cms": "GraphQL",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1067420240"]
+ }, {
+ "cms": "DNN (CMS)",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1465479343"]
+ }, {
+ "cms": "Apple",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1232159009"]
+ }, {
+ "cms": "Apple",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1382324298"]
+ }, {
+ "cms": "Apple",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1498185948"]
+ }, {
+ "cms": "ISPConfig",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["483383992"]
+ }, {
+ "cms": "Microsoft Outlook",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1249852061"]
+ }, {
+ "cms": "Hikvision IP Camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["999357577"]
+ }, {
+ "cms": "IP Camera",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["492290497"]
+ }, {
+ "cms": "AfterLogicWebMail系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-194791768"]
+ }, {
+ "cms": "B2Bbuilder",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["492941040"]
+ }, {
+ "cms": "深信服下一代防火墙管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["123821839"]
+ }, {
+ "cms": "深信服WEB防篡改管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["WEB防篡改","cgi-bin/tamper_admin.cgi"]
+ }, {
+ "cms": "YApi 可视化接口管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["YApi","id=\"yapi\"","prd","可视化接口管理平台"]
+ }, {
+ "cms": "JumpServer 堡垒机",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1162630024"]
+ }, {
+ "cms": "WeiPHP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["weiphp.css","weiphp","Public/static"]
+ }, {
+ "cms": "Nagios XI",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Nagios XI","nagiosxi","Nagios"]
+ }, {
+ "cms": "ShowDoc",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1969934080"]
+ }, {
+ "cms": "群晖 NAS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DiskStation","webman/modules","NAS"]
+ }, {
+ "cms": "协达OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1850889691"]
+ }, {
+ "cms": "山石网科 防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Hillstone","licenseAggrement","GLOBAL_CONFIG.js"]
+ }, {
+ "cms": "360天堤新一代智慧防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["360天堤","360","360防火墙"]
+ }, {
+ "cms": "360网神防火墙系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["resources/image/logo_header.png","360","网神防火墙系统"]
+ }, {
+ "cms": "网神SecGate 3600防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["网神SecGate","3600防火墙","css/lsec/login.css"]
+ }, {
+ "cms": "蓝盾防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["蓝盾","Bluedon","default/js/act/login.js"]
+ }, {
+ "cms": "LanProxy",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["LanProxy","password","lanproxy-config"]
+ }, {
+ "cms": "ManageEngine ADManager Plus",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ADManager","Hashtable.js","ManageEngine"]
+ }, {
+ "cms": "phpshe 商城系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Powered by phpshe","include/js/global.js"]
+ }, {
+ "cms": "骑士 74CMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["74cms","qscms.root","index.php"]
+ }, {
+ "cms": "Apache2 Debian 默认页",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Apache2 Debian Default","It works!","Debian Logo"]
+ }, {
+ "cms": "Grafana",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Grafana","login","grafana-app"]
+ }, {
+ "cms": "Canal Admin",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Canal Admin","js/app"]
+ }, {
+ "cms": "IBOS酷办公OA系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["IBOS","login-panel","loginsubmit"]
+ }, {
+ "cms": "若依(RuoYi)-管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ry-ui","username","rememberme"]
+ }, {
+ "cms": "中新金盾信息安全管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["中新金盾信息安全管理系统","login","useusbkey"]
+ }, {
+ "cms": "中成科信 综合管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1632964065"]
+ }, {
+ "cms": "VMware vCenter",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["VMware","ID_VISDK","download"]
+ }, {
+ "cms": "AWS S3 Bucket",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["InvalidBucketName","aliyuncs"]
+ }, {
+ "cms": "网心云设备",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["网心云设备","favicon.png"]
+ }, {
+ "cms": "深信服 NGAF",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["SANGFOR","NGAF","login"]
+ }, {
+ "cms": "IBM HTTP Server",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["IBM HTTP Server","Support"]
+ }, {
+ "cms": "nps",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["nps","ehang","login"]
+ }, {
+ "cms": "Webmin",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Webmin","session_login"]
+ }, {
+ "cms": "群晖 DiskStation",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DiskStation","文件服务器","modules"]
+ }, {
+ "cms": "锐捷 SSLVPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["SSLVPN","rjweb","login"]
+ }, {
+ "cms": "蜂网企业流控云路由器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ifw8","企业级流控云路由器","login"]
+ }, {
+ "cms": "网御 安全网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["安全系统","网御星云","login"]
+ }, {
+ "cms": "Citrix Access Gateway",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Citrix Access Gateway","login"]
+ }, {
+ "cms": "深信服安全感知平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["安全感知平台","login.js","apps"]
+ }, {
+ "cms": "Apache2 Ubuntu 默认页",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Apache2 Ubuntu Default Page","ubuntu-logo.png"]
+ }, {
+ "cms": "帆软报表-FineReport",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ReportServer","=fs"]
+ }, {
+ "cms": "CAS 单点登录",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Central Authentication Service","cas/login"]
+ }, {
+ "cms": "海康威视 流媒体管理服务器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["流媒体管理服务器","MSHTML","login"]
+ }, {
+ "cms": "noVNC 远程访问",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["noVNC","no","host"]
+ }, {
+ "cms": "MessageSolution Enterprise Email Archiving (EEA)",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["MessageSolution","index.jsp"]
+ }, {
+ "cms": "阿里巴巴otter manager",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Otter Manager","channelList"]
+ }, {
+ "cms": "VMware vRealize Operations Manager",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["vRealize","VMware","Identity Manager"]
+ }, {
+ "cms": "H3C-ER3200 路由器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ER3200","home.asp","h3c.com"]
+ }, {
+ "cms": "安恒云堡垒机",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DBAPPSecurity","安恒云堡垒机"]
+ }, {
+ "cms": "安恒明御安全网关",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["明御安全网关"]
+ }, {
+ "cms": "Citrix 虚拟桌面",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1272756243"]
+ }, {
+ "cms": "SeaweedFS",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1210969935"]
+ }, {
+ "cms": "FreeRDP 远程RDP工具",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2052468252"]
+ }, {
+ "cms": "Apache ActiveMQ",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1766699363"]
+ }, {
+ "cms": "Apache-Skywalking",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1929532064"]
+ }, {
+ "cms": "Parallels Default page",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1050786453"]
+ }, {
+ "cms": "Plesk 面板",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-134375033"]
+ }, {
+ "cms": "DzzOffice 开源办公系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1961736892"]
+ }, {
+ "cms": "网康科技网关/防火墙",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["5471989"]
+ }, {
+ "cms": "ThinkPHP",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["ThinkPHP"]
+ }, {
+ "cms": "SuperMap iServer Web Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1740191553"]
+ }, {
+ "cms": "协众OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1466673461"]
+ }, {
+ "cms": "Jellyfin",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2069226242"]
+ }, {
+ "cms": "孚盟云 CRM",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1533124028"]
+ }, {
+ "cms": "协众OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["scripts/cnoa.extra.js"]
+ }, {
+ "cms": "FastAdmin 框架",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["assets/img/favicon.ico","bootstrap.min.css","navbar-toggle"]
+ }, {
+ "cms": "FastAdmin 框架",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ajax\\/upload","assets/img/favicon.ico","fastadmin"]
+ }, {
+ "cms": "imo云办公室",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["永中文档在线预览DCS","www.yozodcs.com"]
+ }, {
+ "cms": "JeecgBoot",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["JeecgBoot","polyfill_"]
+ }, {
+ "cms": "帆软数据决策系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": [">数据决策系统","ReportServer?op"]
+ }, {
+ "cms": "金山TimeOn云杀毒",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TimeOn","iepngfix/iepngfix_tilebg.js"]
+ }, {
+ "cms": "金山终端安全",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["终端安全系统","setup/kanclient.exe","iepngfix/iepngfix_tilebg.js"]
+ }, {
+ "cms": "YzmCMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["YzmCMS","yzm-common.css"]
+ }, {
+ "cms": "微擎 - 公众平台自助引擎",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["微擎 - 公众平台自助引擎","www.w7.cc","login"]
+ }, {
+ "cms": "Jspxcms",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["- Powered by Jspxcms","template/"]
+ }, {
+ "cms": "WordPress",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["wp-admin","wp-content/"]
+ }, {
+ "cms": "WordPress",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["wp-","wp-content/themes/"]
+ }, {
+ "cms": "金合OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Jhsoft.Web.login","PassWord.aspx"]
+ }, {
+ "cms": "好视通视频会议系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["用户登录","resources/commonImage/favicon.ico","login/createQRCode.do"]
+ }, {
+ "cms": "LANMP 默认页面",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["LANMP","恭喜","wdlinux.cn","本页可删除"]
+ }, {
+ "cms": "CentOS 默认页面",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Welcome to CentOS","img/centos-logo.png","centos.org"]
+ }, {
+ "cms": "百度 ueditor编辑器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ueditor.all.js","UE.getEditor"]
+ }, {
+ "cms": "蓝凌EIS智慧协同平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/scripts/jquery.landray.common.js","蓝凌软件"]
+ }, {
+ "cms": "phpinfo",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["phpinfo","Virtual Directory Support"]
+ }, {
+ "cms": "Kyan 监控设备",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["login_files","platform","欢迎登陆系统"]
+ }, {
+ "cms": "Hue 大数据框架",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Welcome to Hue","Query. Explore.","login"]
+ }, {
+ "cms": "亿邮邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["eYou","q=login","tpl/user"]
+ }, {
+ "cms": "亿邮邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["eYou","q=help","tpl/user"]
+ }, {
+ "cms": "XAMPP 默认页面",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Welcome to XAMPP"]
+ }, {
+ "cms": "网神下一代极速防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["网神信息技术","login","防火墙"]
+ }, {
+ "cms": "中腾OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["systemAction","zt_webframe","login"]
+ }, {
+ "cms": "新软科技-极通EWEBS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["N-soft","ClientDownload.xgi"]
+ }, {
+ "cms": "Igenus邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["iGENUS","login.php","language"]
+ }, {
+ "cms": "图创图书馆集群管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["interlib/common/","self.location.href"]
+ }, {
+ "cms": "华天动力OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["OAapp/WebObjects/OAapp.woa","window.location"]
+ }, {
+ "cms": "JEECMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/r/cms/www","shortcut icon"]
+ }, {
+ "cms": "Apache Hadoop",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["static/hadoop-st.png","Cluster"]
+ }, {
+ "cms": "TamronOS IPTV系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TamronOS","loginbox","tamronos.com"]
+ }, {
+ "cms": "锐捷 RG-EW1200G",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["锐捷","/static/img/title.ico","/js/app"]
+ }, {
+ "cms": "H3C Web网管",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["webui","Web网管用户登录","china_logo.jpg"]
+ }, {
+ "cms": "H3C ER6300G2",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ER6300G2","h3c.com","login"]
+ }, {
+ "cms": "H3C ER3100",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ER3100","h3c.com","login"]
+ }, {
+ "cms": "SDCMS神盾内容管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["sdcms","login"]
+ }, {
+ "cms": "锐捷 SSLVPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["SSLVPN","rjsslvpn_encookie","login"]
+ }, {
+ "cms": "天迈科技网络视频监控系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["jsessionid","天迈科技","网络视频监控系统"]
+ }, {
+ "cms": "WIFISKY-7层流控路由器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["WIFISKY","adminusr","深圳市领空技术"]
+ }, {
+ "cms": "后台",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["后台"]
+ }, {
+ "cms": "MinIO",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["MinIO Browser"]
+ }, {
+ "cms": "Consul by HashiCorp",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Consul"]
+ }, {
+ "cms": "TVT 公司产品",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["492290497"]
+ }, {
+ "cms": "资产灯塔系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1708240621"]
+ }, {
+ "cms": "锐捷 NBR 路由器",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["738520282"]
+ }, {
+ "cms": "二级域名分发系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2055778861"]
+ }, {
+ "cms": "致远 Analytics Cloud 分析云",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["410106848"]
+ }, {
+ "cms": "景云网络防病毒系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["styles/images/logo.png","login_form","防病毒"]
+ }, {
+ "cms": "VA 虚拟应用管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Res/Images/logo_va.png","panel_login"]
+ }, {
+ "cms": "用友 NC Cloud",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["platform/pub/welcome.do"]
+ }, {
+ "cms": "GitBook",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"GitBook","gitbook"]
+ }, {
+ "cms": "Outlook",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["owa/auth","Outlook","logonDiv"]
+ }, {
+ "cms": "万户网络ezEIP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Powered By wanhu - www.wanhu.com.cn","ezEip"]
+ }, {
+ "cms": "海康威视联网网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["独立运行(无平台)","login_form"]
+ }, {
+ "cms": "阿姆瑞特智能DNS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DNS","main.php?mod=member","DNS_"]
+ }, {
+ "cms": "PHPOA 协同办公软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["login.php","提示信息","showMsg"]
+ }, {
+ "cms": "明致 OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1591287747"]
+ }, {
+ "cms": "JBoss EAP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["title>EAP","eap.css","JBoss"]
+ }, {
+ "cms": "若依",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ruoyi","若依","login"]
+ }, {
+ "cms": "万户 OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["defaultroot","Logon!logon.action","domainAccount"]
+ }, {
+ "cms": "全息AI弱电网络综合运维平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["全息AI","g_is_hk","login"]
+ }, {
+ "cms": "天融信产品",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Web User Login","loginCheck"]
+ }, {
+ "cms": "天融信VPN",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["topsecsvportalstyle"]
+ }, {
+ "cms": "天融信WEB应用安全防护系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["module=login","topsec","login"]
+ }, {
+ "cms": "天融信 Reporter",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Login @ Reporter","topsec","login"]
+ }, {
+ "cms": "易瑞授权访问系统",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["易瑞授权访问系统"]
+ }, {
+ "cms": "E-Tiller",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["北京勤云","reader/view_abstract.aspx"]
+ }, {
+ "cms": "FangMail",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["fangmail/default/css/em_css.css","fangmail/cgi/index.cgi"]
+ }, {
+ "cms": "Tencent-Exmail",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["ssl_edition=mail.qq.com"]
+ }, {
+ "cms": "Tencent-Exmail",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["cgi-bin/getinvestigate?flowid=","cgi-bin/bizmail_portal"]
+ }, {
+ "cms": "Jira",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["jira.webresources","com.atlassian.plugins"]
+ }, {
+ "cms": "FishEye",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["FESESSIONID="]
+ }, {
+ "cms": "天玥网络安全审计系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["天玥","venustech","func_login"]
+ }, {
+ "cms": "金航网上阅卷系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["金航","jsyj","衡水金航"]
+ }, {
+ "cms": "科脉·蛙笑在线商业管理软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Kemai","Login.aspx","科脉"]
+ }, {
+ "cms": "朗拓健康医院管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["static/mq/yaoxun_pbm_im.js","js/app."]
+ }, {
+ "cms": "品德科技医学在线考试系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["考试系统","品德","login.aspx"]
+ }, {
+ "cms": "SPON IP网络对讲广播系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["spon_base64.js","login"]
+ }, {
+ "cms": "NVS3000综合视频监控平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["视频监控","NVS3000综合","login"]
+ }, {
+ "cms": "银达汇智 智慧综合管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["miniui","Help ?","main.aspx"]
+ }, {
+ "cms": "云信通短信运营管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["短信","Simpla","chklogin.aspx"]
+ }, {
+ "cms": "AceNet 驰崴防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Technology","login_commit.php"]
+ }, {
+ "cms": "Teleport 堡垒机",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TELEPORT","teleport.js","login-account"]
+ }, {
+ "cms": "天融信-上网行为管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["images/logo3.gif","dkey_activex_download.php","login_commit.php"]
+ }, {
+ "cms": "Yii框架",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["yii.js","yii."]
+ }, {
+ "cms": "PHP",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["PHP/"]
+ }, {
+ "cms": "WPS 部署可视化平台",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["WPS 部署可视化平台"]
+ }, {
+ "cms": "phpstydy Windows",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["phpstudy for windows"]
+ }, {
+ "cms": "有WAF",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["WAF/"]
+ }, {
+ "cms": "移动云 WAF",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["CloudWAF"]
+ }, {
+ "cms": "epoint政务服务系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["epoint-web-zwdt"]
+ }, {
+ "cms": "奥联通讯管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1356973161"]
+ }, {
+ "cms": "百傲瑞达",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1169502834"]
+ }, {
+ "cms": "明源云ERP",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-626335361"]
+ }, {
+ "cms": "天智智慧医院综合质量监管平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1986460035"]
+ }, {
+ "cms": "明源云ERP",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["明源云ERP"]
+ }, {
+ "cms": "Minio Browser",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Minio Browser"]
+ }, {
+ "cms": "管理后台登录",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["管理员","登录"]
+ }, {
+ "cms": "360天擎",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["360天擎"]
+ }, {
+ "cms": "博华网龙信息安全一体机",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["博华网龙信息安全一体机"]
+ }, {
+ "cms": "LNMP一键安装包默认页面",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["LNMP一键安装包"]
+ }, {
+ "cms": "HDWiki",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["hd_sid="]
+ }, {
+ "cms": "深圳锐明行驶记录仪",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["登录您的MDVR"]
+ }, {
+ "cms": "Drupal",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["drupal"]
+ }, {
+ "cms": "Huawei user-login",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["Huawei Auth-Http"]
+ }, {
+ "cms": "Prometheus Server",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Prometheus Time Series Collection and Processing Server"]
+ }, {
+ "cms": "Kubernetes",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Kubernetes Dashboard"]
+ }, {
+ "cms": "easypanel",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["easypanel","vhost","login"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["VMware","ui-page","portal/favicon"]
+ }, {
+ "cms": "明源云 ERP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["PubPlatform","明源云","LoginHandler"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["VMware Horizon"]
+ }, {
+ "cms": "迪普VPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["dptech_ssl","sslvpn","loginAPI.js"]
+ }, {
+ "cms": "OpenShift Web Console",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["OpenShift Web Console"]
+ }, {
+ "cms": "好视通",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["fsmeeting","loginCheck.do","app.result"]
+ }, {
+ "cms": "碧海云盒",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["碧海云盒","mt_login","login.php"]
+ }, {
+ "cms": "PhpWind",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"phpwind"]
+ }, {
+ "cms": "CmsEasy",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"CmsEasy"]
+ }, {
+ "cms": "EmpireCMS",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Powered by EmpireCMS"]
+ }, {
+ "cms": "Emlog",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"emlog\""]
+ }, {
+ "cms": "ECShop",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"ECSHOP"]
+ }, {
+ "cms": "大汉版通-Hanweb-system",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["大汉版通","大汉网络","hanweb.com' style='display:none'"]
+ }, {
+ "cms": "ESPCMS",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["powered by espcms"]
+ }, {
+ "cms": "KesionCMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ks_inc/common.js","KesionCMS"]
+ }, {
+ "cms": "东营金石软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["aspNetHidden","loginselect","txtLoginName"]
+ }, {
+ "cms": "皓峰防火墙",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["皓峰防火墙系统登录"]
+ }, {
+ "cms": "CMSTop",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["css/cmstop-common.css","js/cmstop-common.js"]
+ }, {
+ "cms": "华域Reporter",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["reporter","login","action.php"]
+ }, {
+ "cms": "智邦国际-企业管理软件",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["index2.asp","update/exec.asp","images/full.gif"]
+ }, {
+ "cms": "电信网关配置管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["系统登录","login.php","img/login_bg3.png","360.cn"]
+ }, {
+ "cms": "方配在线考试系统(FPExam)",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["exam/logo/favicon.ico","fangpage"]
+ }, {
+ "cms": "Spring Eureka",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Eureka","eureka"]
+ }, {
+ "cms": "迪普 SSLVPN",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DPSSLVPN","SSL VPN Service","login"]
+ }, {
+ "cms": "Grafana",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Grafana"]
+ }, {
+ "cms": "百卓byzoro-安全网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["北京百卓","PatrolFlow","login.php"]
+ }, {
+ "cms": "ENESYS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["dwr/interface/WebContextUtil.js"]
+ }, {
+ "cms": "KVM_创梦云计算管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["KVM_创梦云计算管理系统"]
+ }, {
+ "cms": "任我行-管家婆分销ERP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["分销ERP","txt_DbName","DownloadDriver.asp"]
+ }, {
+ "cms": "小黄豆CRM",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["xhdcrm","JS/XHD.js","login.check.xhd"]
+ }, {
+ "cms": "Nnetgear 路由器",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["NETGEAR"]
+ }, {
+ "cms": "Metabase",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Metabase"]
+ }, {
+ "cms": "4images",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Powered by 4images","4homepages"]
+ }, {
+ "cms": "Finecms",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"FineCMS"]
+ }, {
+ "cms": "NUUO 摄像头",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["Network Video Recorder Login"]
+ }, {
+ "cms": "Apache ShenYu",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["id=\"httpPath","th:text=\"${domain}"]
+ }, {
+ "cms": "Solar 网络管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1871496583"]
+ }, {
+ "cms": "畅捷CRM",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1068428644"]
+ }, {
+ "cms": "悟空CRM",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["872805507"]
+ }, {
+ "cms": "用友GRP-U8 新政府会计制度专版",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-299520369"]
+ }, {
+ "cms": "e-cology 运维管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-384583337"]
+ }, {
+ "cms": "瑞友天翼-应用虚拟化系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["DownLoad.XGI","realor.cn","dvLogin"]
+ }, {
+ "cms": "H3C SecPath 运维审计系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1776863739"]
+ }, {
+ "cms": "信呼 OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1652488516"]
+ }, {
+ "cms": "MeterSphere",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1023469568"]
+ }, {
+ "cms": "H2 Database Console",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-525659379"]
+ }, {
+ "cms": "天融信设备",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-2019013898"]
+ }, {
+ "cms": "慧林ICP/iP备案系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-556918553"]
+ }, {
+ "cms": "飞鱼星路由器/行为管理",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["content=\"0.2;","/home/login.html"]
+ }, {
+ "cms": "化视私云CDN直播加速服务器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["img/dl.gif","华视美达","login.php"]
+ }, {
+ "cms": "冰峰网络 iceflow",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Web 配置中心","/images/splash.jpg"]
+ }, {
+ "cms": "华夏 ERP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["jshERP-boot","platformConfig"]
+ }, {
+ "cms": "78 OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/resource/javascript/system/runtime.min.js","password"]
+ }, {
+ "cms": "EnterCRM",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["杭州恩软","Ent.base.js"]
+ }, {
+ "cms": "ITC-CMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/mt_res_v3/js/common/common.js","CMS"]
+ }, {
+ "cms": "Panabit-Panalog",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["img/logo.gif","Maintain","unamexx","img/12.png"]
+ }, {
+ "cms": "用友-畅捷通OEM",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["GNRemote.dll","Web_sc/login.gn"]
+ }, {
+ "cms": "华为AR Web管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Huawei","simple/style/default/image/login.png","simple/view/ossn.html"]
+ }, {
+ "cms": "铭飞 MCMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["ms.js","ms.http.js","plugins"]
+ }, {
+ "cms": "向日葵-SunLogin",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["{\"success\":false,\"msg\":\"Verification failure\"}"]
+ }, {
+ "cms": "GROWATT 系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["login","v3/js/odm/odm.js"]
+ }, {
+ "cms": "锐捷防火墙",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["下一代防火墙","锐捷网络"]
+ }, {
+ "cms": "天融信应用交付系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TopApp-AD"]
+ }, {
+ "cms": "慧林信息安全管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["用户管理登录","login","images/zh-CN/login_03.gif"]
+ }, {
+ "cms": "华为云桌面",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Desktop@FusionAccess","/webui/"]
+ }, {
+ "cms": "齐治堡垒机",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["fp_download","login.php","logo-icon-ico72.png"]
+ }, {
+ "cms": "TurboMail 邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["TurboMail","mailmain?type=login"]
+ }, {
+ "cms": "安恒数据大脑API网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["mssp-fe","/static/imgs/logo.png"]
+ }, {
+ "cms": "山石网科云数据库审计与防护系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["#!/dbSummary","/lib/colResizable/"]
+ }, {
+ "cms": "青年软件OA",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/Content/qrlib/ligerUI/skins/"]
+ }, {
+ "cms": "金山终端安全管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["iepngfix/iepngfix_tilebg.js","mysqlStat"]
+ }, {
+ "cms": "多媒体信息发布系统",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["HowFor Web"]
+ }, {
+ "cms": "亿赛通(DLP)",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["CDGServer3","welcomebg.jpg"]
+ }, {
+ "cms": "百卓 Smart 多业务安全网关",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["writeCustomBgImg.jsp","baseajax","LoginLogo"]
+ }, {
+ "cms": "中远麒麟堡垒机",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["admin.php","controller=admin_index&action=login"]
+ }, {
+ "cms": "移动云&绿盟日志审计系统-log4j",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/pisces/login/"]
+ }, {
+ "cms": "Apache APISIX",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["{\"error_msg\":\"404 Route Not Found\"}"]
+ }, {
+ "cms": "网康科技·互联网控制网关",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["网康科技·互联网控制网关"]
+ }, {
+ "cms": "飞思网巡 IT运维系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1622043013"]
+ }, {
+ "cms": "Richmail 邮件系统",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["RichMail"]
+ }, {
+ "cms": "Richmail 邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["0;url=/webmail/"]
+ }, {
+ "cms": "Richmail 邮件系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["richmail.config.js","login"]
+ }, {
+ "cms": "字节数联云桌面系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1142582922"]
+ }, {
+ "cms": "智跃HR人力资源管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["images/ZY.LOGO.64.png"]
+ }, {
+ "cms": "启迪国信 UEM管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["#commonTip","css/icomoon","login","wwLogin"]
+ }, {
+ "cms": "金万维异速联",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["GNRemote.dll?GNFunction="]
+ }, {
+ "cms": "JieLink+智能终端操作平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["JieLink+"]
+ }, {
+ "cms": "宏景eHR人力资源信息管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["人力资源信息管理系统","hrlogon"]
+ }, {
+ "cms": "禾匠点企来客服系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["const _scriptUrl","login_logo"]
+ }, {
+ "cms": "iXCache",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["iXCache","/login/userverify.cgi"]
+ }, {
+ "cms": "爱信诺开票服务器",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["aisino.kps.console"]
+ }, {
+ "cms": "税控服务器管理系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["sys/login.do","resources/css/login_yzm.css"]
+ }, {
+ "cms": "天擎",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["index/logo","天擎"]
+ }, {
+ "cms": "小鱼易连云视讯管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["font_1957344_lqkodjqdbl.css"]
+ }, {
+ "cms": "小鱼易连云视讯管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["static_source/localcdn/webrtc/web/favicon.ico"]
+ }, {
+ "cms": "厦门快普",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["jKPM6","WebResource.axd"]
+ }, {
+ "cms": "iDste融合系统支撑平台",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["iDste融合系统支撑平台"]
+ }, {
+ "cms": "大华安防 DSS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["User",""]
+ }, {
+ "cms": "NSFOCUS 绿盟安全设备",
+ "method": "keyword",
+ "location": "header",
+ "keyword": ["NSFOCUS"]
+ }, {
+ "cms": "迪浪云OA",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-179985729"]
+ }, {
+ "cms": "Nexus Repository Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1323738809"]
+ }, {
+ "cms": "金睛云华高级威胁检测系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1747722638"]
+ }, {
+ "cms": "VMware Workspace ONE Access",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1250474341"]
+ }, {
+ "cms": "网防G01",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-968234332"]
+ }, {
+ "cms": "Gitblit",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["gitblt-favicon.png","gitblit"]
+ }, {
+ "cms": "H3C ER8300G2-X",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["H3C","vld.bmp","dis_login","ER8300G2"]
+ }, {
+ "cms": "锐捷交换机-睿易",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["cgi-bin/luci","#f47f3e"]
+ }, {
+ "cms": "H3C/安博通/任子行/OEM系列安全产品",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["webui/js/jquerylib/jquery-1.7.2.min.js"]
+ }, {
+ "cms": "明源云 ERP",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["#153290","明源软件"]
+ }, {
+ "cms": "IP-guard",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["IP-guard","sign/login"]
+ }, {
+ "cms": "宁盾一体化安全认证平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["am/ndkey.ico","zhLanguagePng"]
+ }, {
+ "cms": "东华医疗协同办公系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["extcomponent/security/login.jsp","login_dhc"]
+ }, {
+ "cms": "安宁电子邮件系统 AnyMacro Mail",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["anymacro","passre.php"]
+ }, {
+ "cms": "海康威视综合安防平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["dist/jquery.js","home/locationIndex.action"]
+ }, {
+ "cms": "海纳CMS-HituxCMS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Powered By HituxCMS","ServiceCenter.js"]
+ }, {
+ "cms": "酒店智慧营销IPTV系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["xsiptvp","IPTV"]
+ }, {
+ "cms": "朗驰欣创-视频监控",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["Installplug.exe","NVSID"]
+ }, {
+ "cms": "大华-智能物联综合管理平台",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["static/qwebchannel.js","moment"]
+ }, {
+ "cms": "方正翔宇",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["e5style/login1.css","e5workspace/security/captcha.do"]
+ }, {
+ "cms": "金蝶 EAS",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["eassso","portalClientHelper.jsp"]
+ }, {
+ "cms": "极通 EWEBS 应用虚拟化",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["NewSoft","xajax05/xajax_js/xajax_core.js"]
+ }, {
+ "cms": "时空智友",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["login.jsp?login","登录"]
+ }, {
+ "cms": "康通电子云广播系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["static/download/JSET99Setup.exe"]
+ }, {
+ "cms": "xxl-job",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/static/adminlte/dist/css/AdminLTE.min.css","bower_components/PACE/pace.min.js"]
+ }, {
+ "cms": "海康综合安防管理平台",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["综合安防管理平台"]
+ }, {
+ "cms": "53BK数字报刊系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/Comja/"]
+ }, {
+ "cms": "慧点科技 OA 协同办公系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["/dojo/smartdot/css/dojo_smartdot.css"]
+ }, {
+ "cms": "Teleport 堡垒机",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["teleport.js","login-type-oath","bind-oath"]
+ }, {
+ "cms": "V2 Conference 视频会议系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["window.location.href=\"/Conf/index.jsp\""]
+ }, {
+ "cms": "和欣控制(Hysine) Webtalk 系统",
+ "method": "keyword",
+ "location": "body",
+ "keyword": ["_webtalk/_cur/loginA.php","WEBTALK"]
+ }, {
+ "cms": "Analytics Cloud 分析云",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["410106848"]
+ }, {
+ "cms": "明源云MIP集成平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-834208471"]
+ }, {
+ "cms": "MapGIS Server Manager",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-252149748"]
+ }, {
+ "cms": "金钟集团智能物流管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-364449966"]
+ }, {
+ "cms": "海康威视综合安防管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-808437027"]
+ }, {
+ "cms": "即会通企业版(LiveUC)|视频会议",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-637931821"]
+ }, {
+ "cms": "泛微emp-移动管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["2062026853"]
+ }, {
+ "cms": "锐捷 SSL VPN",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1525950034"]
+ }, {
+ "cms": "华测监测预警系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-628229493"]
+ }, {
+ "cms": "35企业邮箱系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1676919780"]
+ }, {
+ "cms": "指挥调度平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1971504131"]
+ }, {
+ "cms": "FE业务协作平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-391577146"]
+ }, {
+ "cms": "Elib 图书馆集群管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["478149598"]
+ }, {
+ "cms": "VMware Horizon",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1182206475"]
+ }, {
+ "cms": "银达汇智智慧综合管理平台",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["1170487960"]
+ }, {
+ "cms": "迈普多业务融合网关",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1234665500"]
+ }, {
+ "cms": "奇安信自动化渗透测试系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-747580443"]
+ }, {
+ "cms": "红海eHR人力资源管理系统",
+ "method": "faviconhash",
+ "location": "body",
+ "keyword": ["-1015496453"]
+ }, {
+ "cms": "MobileIron --Log4j",
+ "method": "keyword",
+ "location": "title",
+ "keyword": ["MobileIron User Portal: Sign In"]
+ }]
+}
\ No newline at end of file
diff --git a/docker/scripts/init-data.sh b/docker/scripts/init-data.sh
index 2e712a4b..e0b03d1f 100755
--- a/docker/scripts/init-data.sh
+++ b/docker/scripts/init-data.sh
@@ -111,6 +111,13 @@ init_wordlists() {
log_info "字典初始化完成"
}
+# 初始化指纹库
+init_fingerprints() {
+ log_step "初始化指纹库..."
+ docker compose exec -T server python backend/manage.py init_fingerprints
+ log_info "指纹库初始化完成"
+}
+
# 初始化 Nuclei 模板仓库
init_nuclei_templates() {
log_step "初始化 Nuclei 模板仓库..."
@@ -157,6 +164,7 @@ main() {
init_engine_config
init_wordlists
+ init_fingerprints
init_nuclei_templates
init_admin_user
diff --git a/docker/server/start.sh b/docker/server/start.sh
index acefd681..90f25350 100644
--- a/docker/server/start.sh
+++ b/docker/server/start.sh
@@ -21,6 +21,10 @@ echo " [1.3/3] 初始化默认目录字典..."
python manage.py init_wordlists
echo " ✓ 默认目录字典已就绪"
+echo " [1.4/3] 初始化默认指纹库..."
+python manage.py init_fingerprints
+echo " ✓ 默认指纹库已就绪"
+
# 2. 启动 Django uvicorn 服务 (ASGI)
# 定时任务由内置 APScheduler 处理,在 Django 启动时自动启动
echo " [2/3] 启动 Django uvicorn (ASGI)..."
diff --git a/frontend/app/tools/fingerprints/ehole/page.tsx b/frontend/app/tools/fingerprints/ehole/page.tsx
new file mode 100644
index 00000000..57de45ff
--- /dev/null
+++ b/frontend/app/tools/fingerprints/ehole/page.tsx
@@ -0,0 +1,12 @@
+"use client"
+
+import React from "react"
+import { EholeFingerprintView } from "@/components/fingerprints"
+
+export default function EholeFingerprintPage() {
+ return (
+
+
+
+ )
+}
diff --git a/frontend/app/tools/fingerprints/layout.tsx b/frontend/app/tools/fingerprints/layout.tsx
new file mode 100644
index 00000000..29c12fa4
--- /dev/null
+++ b/frontend/app/tools/fingerprints/layout.tsx
@@ -0,0 +1,118 @@
+"use client"
+
+import React from "react"
+import { usePathname } from "next/navigation"
+import Link from "next/link"
+import { Fingerprint } from "lucide-react"
+import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
+import { Badge } from "@/components/ui/badge"
+import { Skeleton } from "@/components/ui/skeleton"
+import { useFingerprintStats } from "@/hooks/use-fingerprints"
+
+/**
+ * 指纹管理布局
+ * 提供 Tab 导航切换不同指纹库
+ */
+export default function FingerprintsLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ const pathname = usePathname()
+ const { data: stats, isLoading } = useFingerprintStats()
+
+ // 获取当前激活的 Tab
+ const getActiveTab = () => {
+ if (pathname.includes("/ehole")) return "ehole"
+ if (pathname.includes("/goby")) return "goby"
+ if (pathname.includes("/wappalyzer")) return "wappalyzer"
+ return "ehole"
+ }
+
+ // Tab 路径映射
+ const basePath = "/tools/fingerprints"
+ const tabPaths = {
+ ehole: `${basePath}/ehole/`,
+ goby: `${basePath}/goby/`,
+ wappalyzer: `${basePath}/wappalyzer/`,
+ }
+
+ // 各指纹库数量
+ const counts = {
+ ehole: stats?.ehole || 0,
+ goby: stats?.goby || 0,
+ wappalyzer: stats?.wappalyzer || 0,
+ }
+
+ if (isLoading) {
+ return (
+
+ )
+ }
+
+ return (
+
+ {/* 页面头部 */}
+
+
+
+
+ 指纹管理
+
+
Web 指纹识别规则管理
+
+
+
+ {/* Tabs 导航 */}
+
+
+
+
+
+ EHole
+ {counts.ehole > 0 && (
+
+ {counts.ehole}
+
+ )}
+
+
+
+
+ Goby
+ {counts.goby > 0 && (
+
+ {counts.goby}
+
+ )}
+
+
+
+
+ Wappalyzer
+ {counts.wappalyzer > 0 && (
+
+ {counts.wappalyzer}
+
+ )}
+
+
+
+
+
+
+ {/* 子页面内容 */}
+ {children}
+
+ )
+}
diff --git a/frontend/app/tools/fingerprints/page.tsx b/frontend/app/tools/fingerprints/page.tsx
new file mode 100644
index 00000000..ad20cd11
--- /dev/null
+++ b/frontend/app/tools/fingerprints/page.tsx
@@ -0,0 +1,10 @@
+"use client"
+
+import { redirect } from "next/navigation"
+
+/**
+ * 指纹管理首页 - 重定向到 EHole
+ */
+export default function FingerprintsPage() {
+ redirect("/tools/fingerprints/ehole/")
+}
diff --git a/frontend/components/app-sidebar.tsx b/frontend/components/app-sidebar.tsx
index ad266f51..e0030e31 100644
--- a/frontend/components/app-sidebar.tsx
+++ b/frontend/components/app-sidebar.tsx
@@ -108,10 +108,15 @@ const data = {
title: "字典管理", // 字典管理
url: "/tools/wordlists/",
},
+ {
+ title: "指纹管理", // 指纹管理
+ url: "/tools/fingerprints/",
+ },
{
title: "Nuclei 模板", // Nuclei 模板
url: "/tools/nuclei/",
},
+
],
},
// 测试中心相关菜单已移除
diff --git a/frontend/components/fingerprints/ehole-fingerprint-columns.tsx b/frontend/components/fingerprints/ehole-fingerprint-columns.tsx
new file mode 100644
index 00000000..8e8a0cdb
--- /dev/null
+++ b/frontend/components/fingerprints/ehole-fingerprint-columns.tsx
@@ -0,0 +1,135 @@
+"use client"
+
+import { ColumnDef } from "@tanstack/react-table"
+import { Checkbox } from "@/components/ui/checkbox"
+import { Badge } from "@/components/ui/badge"
+import type { EholeFingerprint } from "@/types/fingerprint.types"
+
+interface ColumnOptions {
+ formatDate: (date: string) => string
+}
+
+/**
+ * 创建 EHole 指纹表格列定义
+ */
+export function createEholeFingerprintColumns({
+ formatDate,
+}: ColumnOptions): ColumnDef[] {
+ return [
+ // 选择列
+ {
+ id: "select",
+ header: ({ table }) => (
+ table.toggleAllPageRowsSelected(!!value)}
+ aria-label="Select all"
+ />
+ ),
+ cell: ({ row }) => (
+ row.toggleSelected(!!value)}
+ aria-label="Select row"
+ />
+ ),
+ enableSorting: false,
+ enableHiding: false,
+ size: 40,
+ },
+ // CMS 名称
+ {
+ accessorKey: "cms",
+ header: "CMS",
+ cell: ({ row }) => (
+ {row.getValue("cms")}
+ ),
+ size: 200,
+ },
+ // 匹配方式
+ {
+ accessorKey: "method",
+ header: "Method",
+ cell: ({ row }) => {
+ const method = row.getValue("method") as string
+ return (
+
+ {method}
+
+ )
+ },
+ size: 100,
+ },
+ // 匹配位置
+ {
+ accessorKey: "location",
+ header: "Location",
+ cell: ({ row }) => {
+ const location = row.getValue("location") as string
+ return (
+
+ {location}
+
+ )
+ },
+ size: 100,
+ },
+ // 关键词
+ {
+ accessorKey: "keyword",
+ header: "Keyword",
+ cell: ({ row }) => {
+ const keywords = row.getValue("keyword") as string[]
+ if (!keywords || keywords.length === 0) return "-"
+ return (
+
+ {keywords.map((kw, idx) => (
+
{kw}
+ ))}
+
+ )
+ },
+ size: 300,
+ },
+ // 类型
+ {
+ accessorKey: "type",
+ header: "Type",
+ cell: ({ row }) => {
+ const type = row.getValue("type") as string
+ if (!type || type === "-") return "-"
+ return {type}
+ },
+ size: 100,
+ },
+ // 重点资产
+ {
+ accessorKey: "isImportant",
+ header: "Important",
+ cell: ({ row }) => {
+ const isImportant = row.getValue("isImportant") as boolean
+ return isImportant ? (
+ 重点
+ ) : null
+ },
+ size: 80,
+ },
+ // 创建时间
+ {
+ accessorKey: "createdAt",
+ header: "Created",
+ cell: ({ row }) => {
+ const date = row.getValue("createdAt") as string
+ return (
+
+ {formatDate(date)}
+
+ )
+ },
+ size: 160,
+ },
+ ]
+}
diff --git a/frontend/components/fingerprints/ehole-fingerprint-data-table.tsx b/frontend/components/fingerprints/ehole-fingerprint-data-table.tsx
new file mode 100644
index 00000000..f356f82c
--- /dev/null
+++ b/frontend/components/fingerprints/ehole-fingerprint-data-table.tsx
@@ -0,0 +1,490 @@
+"use client"
+
+import * as React from "react"
+import {
+ ColumnDef,
+ ColumnFiltersState,
+ ColumnSizingState,
+ flexRender,
+ getCoreRowModel,
+ getFacetedRowModel,
+ getFacetedUniqueValues,
+ getFilteredRowModel,
+ getPaginationRowModel,
+ getSortedRowModel,
+ SortingState,
+ useReactTable,
+ VisibilityState,
+} from "@tanstack/react-table"
+import {
+ IconChevronDown,
+ IconChevronLeft,
+ IconChevronRight,
+ IconChevronsLeft,
+ IconChevronsRight,
+ IconLayoutColumns,
+ IconTrash,
+ IconDownload,
+ IconUpload,
+ IconPlus,
+ IconSettings,
+} from "@tabler/icons-react"
+
+import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuCheckboxItem,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import { Label } from "@/components/ui/label"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select"
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "@/components/ui/table"
+import {
+ AlertDialog,
+ AlertDialogAction,
+ AlertDialogCancel,
+ AlertDialogContent,
+ AlertDialogDescription,
+ AlertDialogFooter,
+ AlertDialogHeader,
+ AlertDialogTitle,
+} from "@/components/ui/alert-dialog"
+import { SmartFilterInput, type FilterField } from "@/components/common/smart-filter-input"
+
+import type { EholeFingerprint } from "@/types/fingerprint.types"
+import type { PaginationInfo } from "@/types/common.types"
+
+// EHole 过滤字段配置
+const EHOLE_FILTER_FIELDS: FilterField[] = [
+ { key: "cms", label: "CMS", description: "产品/CMS名称" },
+ { key: "method", label: "Method", description: "匹配方式 (keyword, faviconhash...)" },
+ { key: "location", label: "Location", description: "匹配位置 (body, header, title)" },
+ { key: "type", label: "Type", description: "分类" },
+]
+
+const EHOLE_FILTER_EXAMPLES = [
+ 'cms="WordPress"',
+ 'type=="CMS"',
+ 'method="keyword" location="body"',
+ 'type="Server" || type="CMS"',
+]
+
+interface EholeFingerprintDataTableProps {
+ data: EholeFingerprint[]
+ columns: ColumnDef[]
+ onSelectionChange?: (selectedRows: EholeFingerprint[]) => void
+ filterValue?: string
+ onFilterChange?: (value: string) => void
+ isSearching?: boolean
+ onAddSingle?: () => void
+ onAddImport?: () => void
+ onExport?: () => void
+ onBulkDelete?: () => void
+ onDeleteAll?: () => void
+ totalCount?: number // 用于显示总数
+ pagination?: { pageIndex: number; pageSize: number }
+ setPagination?: React.Dispatch>
+ paginationInfo?: PaginationInfo
+ onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void
+}
+
+export function EholeFingerprintDataTable({
+ data = [],
+ columns,
+ onSelectionChange,
+ filterValue,
+ onFilterChange,
+ isSearching = false,
+ onAddSingle,
+ onAddImport,
+ onExport,
+ onBulkDelete,
+ onDeleteAll,
+ totalCount = 0,
+ pagination: externalPagination,
+ setPagination: setExternalPagination,
+ paginationInfo,
+ onPaginationChange,
+}: EholeFingerprintDataTableProps) {
+ const [rowSelection, setRowSelection] = React.useState>({})
+ const [columnVisibility, setColumnVisibility] = React.useState({})
+ const [columnFilters, setColumnFilters] = React.useState([])
+ const [sorting, setSorting] = React.useState([])
+ const [columnSizing, setColumnSizing] = React.useState({})
+
+ // 确认对话框状态
+ const [exportDialogOpen, setExportDialogOpen] = React.useState(false)
+ const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)
+ const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)
+
+ const [internalPagination, setInternalPagination] = React.useState({
+ pageIndex: 0,
+ pageSize: 10,
+ })
+
+ const pagination = externalPagination || internalPagination
+ const setPagination = setExternalPagination || setInternalPagination
+
+ const handleSmartSearch = (_filters: any[], rawQuery: string) => {
+ if (onFilterChange) {
+ onFilterChange(rawQuery)
+ }
+ }
+
+ const validData = React.useMemo(() => {
+ return (data || []).filter(item => item && typeof item.id !== 'undefined')
+ }, [data])
+
+ const table = useReactTable({
+ data: validData,
+ columns,
+ state: {
+ sorting,
+ columnVisibility,
+ rowSelection,
+ columnFilters,
+ pagination,
+ columnSizing,
+ },
+ enableColumnResizing: true,
+ columnResizeMode: 'onChange',
+ onColumnSizingChange: setColumnSizing,
+ pageCount: paginationInfo?.totalPages ?? -1,
+ manualPagination: !!paginationInfo,
+ getRowId: (row) => row.id.toString(),
+ enableRowSelection: true,
+ onRowSelectionChange: setRowSelection,
+ onSortingChange: setSorting,
+ onColumnFiltersChange: setColumnFilters,
+ onColumnVisibilityChange: setColumnVisibility,
+ onPaginationChange: (updater) => {
+ const newPagination = typeof updater === 'function' ? updater(pagination) : updater
+ setPagination(newPagination)
+ if (onPaginationChange) {
+ onPaginationChange(newPagination)
+ }
+ },
+ getCoreRowModel: getCoreRowModel(),
+ getFilteredRowModel: getFilteredRowModel(),
+ getPaginationRowModel: getPaginationRowModel(),
+ getSortedRowModel: getSortedRowModel(),
+ getFacetedRowModel: getFacetedRowModel(),
+ getFacetedUniqueValues: getFacetedUniqueValues(),
+ })
+
+ React.useEffect(() => {
+ if (onSelectionChange) {
+ const selectedRows = table.getFilteredSelectedRowModel().rows.map(row => row.original)
+ onSelectionChange(selectedRows)
+ }
+ }, [rowSelection, onSelectionChange, table])
+
+ return (
+
+ {/* 工具栏 */}
+
+
+
+
+ {/* 列显示控制 */}
+
+
+
+
+
+ {table
+ .getAllColumns()
+ .filter((column) => typeof column.accessorFn !== "undefined" && column.getCanHide())
+ .map((column) => (
+ column.toggleVisibility(!!value)}
+ >
+ {column.id}
+
+ ))}
+
+
+
+ {/* 操作菜单 */}
+
+
+
+
+
+ {onExport && (
+ setExportDialogOpen(true)}>
+
+ 导出所有指纹
+
+ )}
+
+ {onBulkDelete && (
+ setBulkDeleteDialogOpen(true)}
+ disabled={table.getFilteredSelectedRowModel().rows.length === 0}
+ className="text-destructive focus:text-destructive"
+ >
+
+ 删除选中 ({table.getFilteredSelectedRowModel().rows.length})
+
+ )}
+ {onDeleteAll && (
+ setDeleteAllDialogOpen(true)}
+ className="text-destructive focus:text-destructive"
+ >
+
+ 删除所有
+
+ )}
+
+
+
+ {/* 添加指纹 */}
+ {(onAddSingle || onAddImport) && (
+
+
+
+
+
+ {onAddSingle && (
+
+
+ 单条添加
+
+ )}
+ {onAddImport && (
+
+
+ 文件导入
+
+ )}
+
+
+ )}
+
+
+
+ {/* 表格 */}
+
+
+
+ {table.getHeaderGroups().map((headerGroup) => (
+
+ {headerGroup.headers.map((header) => (
+
+ {header.isPlaceholder
+ ? null
+ : flexRender(header.column.columnDef.header, header.getContext())}
+ {header.column.getCanResize() && (
+ header.column.resetSize()}
+ className="absolute -right-2.5 top-0 h-full w-8 cursor-col-resize select-none touch-none bg-transparent flex justify-center"
+ >
+
+
+ )}
+
+ ))}
+
+ ))}
+
+
+ {table.getRowModel().rows?.length ? (
+ table.getRowModel().rows.map((row) => (
+
+ {row.getVisibleCells().map((cell) => (
+
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
+
+ ))}
+
+ ))
+ ) : (
+
+
+ No results
+
+
+ )}
+
+
+
+
+ {/* 分页 */}
+
+
+ {table.getFilteredSelectedRowModel().rows.length} of{" "}
+ {paginationInfo ? paginationInfo.total : table.getFilteredRowModel().rows.length} row(s) selected
+
+
+
+
+
+
+
+
+
+ Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}
+
+
+
+
+
+
+
+
+
+
+
+ {/* 导出确认对话框 */}
+
+
+
+ 导出所有指纹
+
+ 将导出所有 {totalCount} 条 EHole 指纹数据为 JSON 文件。
+
+
+
+ 取消
+ { onExport?.(); setExportDialogOpen(false); }}>
+ 确认导出
+
+
+
+
+
+ {/* 删除选中确认对话框 */}
+
+
+
+ 删除选中指纹
+
+ 确定要删除选中的 {table.getFilteredSelectedRowModel().rows.length} 条指纹吗?此操作不可撤销。
+
+
+
+ 取消
+ { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}
+ className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
+ >
+ 确认删除
+
+
+
+
+
+ {/* 删除所有确认对话框 */}
+
+
+
+ 删除所有指纹
+
+ 确定要删除所有 {totalCount} 条 EHole 指纹吗?此操作不可撤销。
+
+
+
+ 取消
+ { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}
+ className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
+ >
+ 确认删除
+
+
+
+
+
+ )
+}
diff --git a/frontend/components/fingerprints/ehole-fingerprint-dialog.tsx b/frontend/components/fingerprints/ehole-fingerprint-dialog.tsx
new file mode 100644
index 00000000..4506827f
--- /dev/null
+++ b/frontend/components/fingerprints/ehole-fingerprint-dialog.tsx
@@ -0,0 +1,261 @@
+"use client"
+
+import React, { useEffect } from "react"
+import { useForm } from "react-hook-form"
+import { toast } from "sonner"
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog"
+import { Button } from "@/components/ui/button"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { Checkbox } from "@/components/ui/checkbox"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select"
+import {
+ useCreateEholeFingerprint,
+ useUpdateEholeFingerprint,
+} from "@/hooks/use-fingerprints"
+import type { EholeFingerprint } from "@/types/fingerprint.types"
+
+interface EholeFingerprintDialogProps {
+ open: boolean
+ onOpenChange: (open: boolean) => void
+ fingerprint?: EholeFingerprint | null // 编辑时传入
+ onSuccess?: () => void
+}
+
+interface FormData {
+ cms: string
+ method: string
+ location: string
+ keyword: string // 逗号分隔的字符串
+ type: string
+ isImportant: boolean
+}
+
+const METHOD_OPTIONS = [
+ { value: "keyword", label: "keyword" },
+ { value: "faviconhash", label: "faviconhash" },
+ { value: "icon_hash", label: "icon_hash" },
+ { value: "header", label: "header" },
+]
+
+const LOCATION_OPTIONS = [
+ { value: "body", label: "body" },
+ { value: "header", label: "header" },
+ { value: "title", label: "title" },
+]
+
+export function EholeFingerprintDialog({
+ open,
+ onOpenChange,
+ fingerprint,
+ onSuccess,
+}: EholeFingerprintDialogProps) {
+ const isEdit = !!fingerprint
+
+ const createMutation = useCreateEholeFingerprint()
+ const updateMutation = useUpdateEholeFingerprint()
+
+ const {
+ register,
+ handleSubmit,
+ reset,
+ setValue,
+ watch,
+ formState: { errors, isSubmitting },
+ } = useForm({
+ defaultValues: {
+ cms: "",
+ method: "keyword",
+ location: "body",
+ keyword: "",
+ type: "-",
+ isImportant: false,
+ },
+ })
+
+ // 编辑时填充表单
+ useEffect(() => {
+ if (fingerprint) {
+ reset({
+ cms: fingerprint.cms,
+ method: fingerprint.method,
+ location: fingerprint.location,
+ keyword: fingerprint.keyword.join(", "),
+ type: fingerprint.type || "-",
+ isImportant: fingerprint.isImportant,
+ })
+ } else {
+ reset({
+ cms: "",
+ method: "keyword",
+ location: "body",
+ keyword: "",
+ type: "-",
+ isImportant: false,
+ })
+ }
+ }, [fingerprint, reset])
+
+ const onSubmit = async (data: FormData) => {
+ // 解析 keyword 字符串为数组
+ const keywordArray = data.keyword
+ .split(",")
+ .map((k) => k.trim())
+ .filter((k) => k.length > 0)
+
+ if (keywordArray.length === 0) {
+ toast.error("关键词不能为空")
+ return
+ }
+
+ const payload = {
+ cms: data.cms.trim(),
+ method: data.method,
+ location: data.location,
+ keyword: keywordArray,
+ type: data.type || "-",
+ isImportant: data.isImportant,
+ }
+
+ try {
+ if (isEdit && fingerprint) {
+ await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })
+ toast.success("更新成功")
+ } else {
+ await createMutation.mutateAsync(payload)
+ toast.success("创建成功")
+ }
+ onOpenChange(false)
+ onSuccess?.()
+ } catch (error: any) {
+ toast.error(error.message || (isEdit ? "更新失败" : "创建失败"))
+ }
+ }
+
+ const method = watch("method")
+ const location = watch("location")
+ const isImportant = watch("isImportant")
+
+ return (
+
+ )
+}
diff --git a/frontend/components/fingerprints/ehole-fingerprint-view.tsx b/frontend/components/fingerprints/ehole-fingerprint-view.tsx
new file mode 100644
index 00000000..98c539e0
--- /dev/null
+++ b/frontend/components/fingerprints/ehole-fingerprint-view.tsx
@@ -0,0 +1,184 @@
+"use client"
+
+import React, { useState, useMemo } from "react"
+import { AlertTriangle } from "lucide-react"
+import { toast } from "sonner"
+import {
+ useEholeFingerprints,
+ useBulkDeleteEholeFingerprints,
+ useDeleteAllEholeFingerprints,
+} from "@/hooks/use-fingerprints"
+import { FingerprintService } from "@/services/fingerprint.service"
+import { EholeFingerprintDataTable } from "./ehole-fingerprint-data-table"
+import { createEholeFingerprintColumns } from "./ehole-fingerprint-columns"
+import { EholeFingerprintDialog } from "./ehole-fingerprint-dialog"
+import { ImportFingerprintDialog } from "./import-fingerprint-dialog"
+import { DataTableSkeleton } from "@/components/ui/data-table-skeleton"
+import type { EholeFingerprint } from "@/types/fingerprint.types"
+
+export function EholeFingerprintView() {
+ const [selectedFingerprints, setSelectedFingerprints] = useState([])
+ const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })
+ const [filterQuery, setFilterQuery] = useState("")
+ const [isSearching, setIsSearching] = useState(false)
+ const [addDialogOpen, setAddDialogOpen] = useState(false)
+ const [importDialogOpen, setImportDialogOpen] = useState(false)
+
+ // 查询数据
+ const { data, isLoading, isFetching, error, refetch } = useEholeFingerprints({
+ page: pagination.pageIndex + 1,
+ pageSize: pagination.pageSize,
+ filter: filterQuery || undefined,
+ })
+
+ // Mutations
+ const bulkDeleteMutation = useBulkDeleteEholeFingerprints()
+ const deleteAllMutation = useDeleteAllEholeFingerprints()
+
+ // 搜索状态
+ React.useEffect(() => {
+ if (!isFetching && isSearching) {
+ setIsSearching(false)
+ }
+ }, [isFetching, isSearching])
+
+ const handleFilterChange = (value: string) => {
+ setIsSearching(true)
+ setFilterQuery(value)
+ setPagination((prev) => ({ ...prev, pageIndex: 0 }))
+ }
+
+ // 格式化日期
+ const formatDate = (dateString: string): string => {
+ return new Date(dateString).toLocaleString("zh-CN", {
+ year: "numeric",
+ month: "numeric",
+ day: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ hour12: false,
+ })
+ }
+
+ // 导出
+ const handleExport = async () => {
+ try {
+ const blob = await FingerprintService.exportEholeFingerprints()
+ const url = URL.createObjectURL(blob)
+ const a = document.createElement("a")
+ a.href = url
+ a.download = `ehole-fingerprints-${Date.now()}.json`
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ URL.revokeObjectURL(url)
+ toast.success("导出成功")
+ } catch (error: any) {
+ toast.error(error.message || "导出失败")
+ }
+ }
+
+ // 批量删除
+ const handleBulkDelete = async () => {
+ if (selectedFingerprints.length === 0) return
+
+ try {
+ const ids = selectedFingerprints.map((f) => f.id)
+ const result = await bulkDeleteMutation.mutateAsync(ids)
+ toast.success(`删除成功:${result.deleted} 条`)
+ setSelectedFingerprints([])
+ } catch (error: any) {
+ toast.error(error.message || "删除失败")
+ }
+ }
+
+ // 删除所有
+ const handleDeleteAll = async () => {
+ try {
+ const result = await deleteAllMutation.mutateAsync()
+ toast.success(`删除成功:${result.deleted} 条`)
+ } catch (error: any) {
+ toast.error(error.message || "删除失败")
+ }
+ }
+
+ // 列定义
+ const columns = useMemo(
+ () => createEholeFingerprintColumns({ formatDate }),
+ []
+ )
+
+ // 转换数据
+ const fingerprints: EholeFingerprint[] = useMemo(() => {
+ if (!data?.results) return []
+ return data.results
+ }, [data])
+
+ // 错误状态
+ if (error) {
+ return (
+
+
+
加载失败
+
+ {error.message || "加载指纹数据时出现错误"}
+
+
+
+ )
+ }
+
+ // 加载状态
+ if (isLoading && !data) {
+ return
+ }
+
+ return (
+ <>
+ setAddDialogOpen(true)}
+ onAddImport={() => setImportDialogOpen(true)}
+ onExport={handleExport}
+ onBulkDelete={handleBulkDelete}
+ onDeleteAll={handleDeleteAll}
+ totalCount={data?.total || 0}
+ pagination={pagination}
+ setPagination={setPagination}
+ paginationInfo={{
+ total: data?.total || 0,
+ page: data?.page || 1,
+ pageSize: data?.pageSize || 10,
+ totalPages: data?.totalPages || 1,
+ }}
+ onPaginationChange={setPagination}
+ />
+
+ {/* 添加指纹对话框 */}
+ refetch()}
+ />
+
+ {/* 导入指纹对话框 */}
+ refetch()}
+ />
+ >
+ )
+}
diff --git a/frontend/components/fingerprints/import-fingerprint-dialog.tsx b/frontend/components/fingerprints/import-fingerprint-dialog.tsx
new file mode 100644
index 00000000..f0c2565e
--- /dev/null
+++ b/frontend/components/fingerprints/import-fingerprint-dialog.tsx
@@ -0,0 +1,142 @@
+"use client"
+
+import React, { useState } from "react"
+import { toast } from "sonner"
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog"
+import { Button } from "@/components/ui/button"
+import {
+ Dropzone,
+ DropzoneContent,
+ DropzoneEmptyState,
+} from "@/components/ui/dropzone"
+import { useImportEholeFingerprints } from "@/hooks/use-fingerprints"
+
+interface ImportFingerprintDialogProps {
+ open: boolean
+ onOpenChange: (open: boolean) => void
+ onSuccess?: () => void
+}
+
+export function ImportFingerprintDialog({
+ open,
+ onOpenChange,
+ onSuccess,
+}: ImportFingerprintDialogProps) {
+ const [files, setFiles] = useState([])
+ const importMutation = useImportEholeFingerprints()
+
+ const handleDrop = (acceptedFiles: File[]) => {
+ setFiles(acceptedFiles)
+ }
+
+ const handleImport = async () => {
+ if (files.length === 0) {
+ toast.error("请先选择文件")
+ return
+ }
+
+ const file = files[0]
+
+ // 前端基础校验
+ try {
+ const text = await file.text()
+ const json = JSON.parse(text)
+
+ if (!json.fingerprint) {
+ toast.error("无效的 EHole 格式:缺少 fingerprint 字段")
+ return
+ }
+
+ if (!Array.isArray(json.fingerprint)) {
+ toast.error("无效的 EHole 格式:fingerprint 必须是数组")
+ return
+ }
+
+ if (json.fingerprint.length === 0) {
+ toast.error("指纹数据为空")
+ return
+ }
+
+ // 检查第一条数据的基本字段
+ const first = json.fingerprint[0]
+ if (!first.cms || !first.keyword) {
+ toast.error("无效的 EHole 格式:指纹缺少必要字段 (cms, keyword)")
+ return
+ }
+ } catch (e) {
+ toast.error("无效的 JSON 文件")
+ return
+ }
+
+ // 校验通过,提交到后端
+ try {
+ const result = await importMutation.mutateAsync(file)
+ toast.success(`导入成功:创建 ${result.created} 条,失败 ${result.failed} 条`)
+ setFiles([])
+ onOpenChange(false)
+ onSuccess?.()
+ } catch (error: any) {
+ toast.error(error.message || "导入失败")
+ }
+ }
+
+ const handleClose = (open: boolean) => {
+ if (!open) {
+ setFiles([])
+ }
+ onOpenChange(open)
+ }
+
+ return (
+
+ )
+}
diff --git a/frontend/components/fingerprints/index.ts b/frontend/components/fingerprints/index.ts
new file mode 100644
index 00000000..14984a99
--- /dev/null
+++ b/frontend/components/fingerprints/index.ts
@@ -0,0 +1,5 @@
+export { EholeFingerprintView } from "./ehole-fingerprint-view"
+export { EholeFingerprintDataTable } from "./ehole-fingerprint-data-table"
+export { createEholeFingerprintColumns } from "./ehole-fingerprint-columns"
+export { EholeFingerprintDialog } from "./ehole-fingerprint-dialog"
+export { ImportFingerprintDialog } from "./import-fingerprint-dialog"
diff --git a/frontend/hooks/use-fingerprints.ts b/frontend/hooks/use-fingerprints.ts
new file mode 100644
index 00000000..5c5d078f
--- /dev/null
+++ b/frontend/hooks/use-fingerprints.ts
@@ -0,0 +1,158 @@
+/**
+ * 指纹管理 React Query Hooks
+ */
+
+import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"
+import { FingerprintService } from "@/services/fingerprint.service"
+import type { EholeFingerprint, FingerprintStats } from "@/types/fingerprint.types"
+
+// Query Keys
+export const fingerprintKeys = {
+ all: ["fingerprints"] as const,
+ stats: () => [...fingerprintKeys.all, "stats"] as const,
+ ehole: {
+ all: () => [...fingerprintKeys.all, "ehole"] as const,
+ list: (params: any) => [...fingerprintKeys.ehole.all(), "list", params] as const,
+ detail: (id: number) => [...fingerprintKeys.ehole.all(), "detail", id] as const,
+ },
+}
+
+// ==================== EHole Hooks ====================
+
+/**
+ * 获取 EHole 指纹列表
+ */
+export function useEholeFingerprints(
+ params: { page?: number; pageSize?: number; filter?: string } = {},
+ options?: { enabled?: boolean }
+) {
+ return useQuery({
+ queryKey: fingerprintKeys.ehole.list(params),
+ queryFn: () => FingerprintService.getEholeFingerprints(params),
+ ...options,
+ })
+}
+
+/**
+ * 获取 EHole 指纹详情
+ */
+export function useEholeFingerprint(id: number, options?: { enabled?: boolean }) {
+ return useQuery({
+ queryKey: fingerprintKeys.ehole.detail(id),
+ queryFn: () => FingerprintService.getEholeFingerprint(id),
+ enabled: id > 0 && options?.enabled !== false,
+ })
+}
+
+/**
+ * 创建 EHole 指纹
+ */
+export function useCreateEholeFingerprint() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: (data: Omit) =>
+ FingerprintService.createEholeFingerprint(data),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+/**
+ * 更新 EHole 指纹
+ */
+export function useUpdateEholeFingerprint() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: ({ id, data }: { id: number; data: Partial }) =>
+ FingerprintService.updateEholeFingerprint(id, data),
+ onSuccess: (_, { id }) => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.detail(id) })
+ },
+ })
+}
+
+/**
+ * 删除 EHole 指纹
+ */
+export function useDeleteEholeFingerprint() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: (id: number) => FingerprintService.deleteEholeFingerprint(id),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+/**
+ * 批量创建 EHole 指纹
+ */
+export function useBatchCreateEholeFingerprints() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: (fingerprints: Omit[]) =>
+ FingerprintService.batchCreateEholeFingerprints(fingerprints),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+/**
+ * 文件导入 EHole 指纹
+ */
+export function useImportEholeFingerprints() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: (file: File) => FingerprintService.importEholeFingerprints(file),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+/**
+ * 批量删除 EHole 指纹
+ */
+export function useBulkDeleteEholeFingerprints() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: (ids: number[]) => FingerprintService.bulkDeleteEholeFingerprints(ids),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+/**
+ * 删除所有 EHole 指纹
+ */
+export function useDeleteAllEholeFingerprints() {
+ const queryClient = useQueryClient()
+ return useMutation({
+ mutationFn: () => FingerprintService.deleteAllEholeFingerprints(),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })
+ queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })
+ },
+ })
+}
+
+// ==================== 统计 Hooks ====================
+
+/**
+ * 获取指纹库统计
+ */
+export function useFingerprintStats() {
+ return useQuery({
+ queryKey: fingerprintKeys.stats(),
+ queryFn: () => FingerprintService.getStats(),
+ })
+}
diff --git a/frontend/services/fingerprint.service.ts b/frontend/services/fingerprint.service.ts
new file mode 100644
index 00000000..4eea8138
--- /dev/null
+++ b/frontend/services/fingerprint.service.ts
@@ -0,0 +1,134 @@
+/**
+ * 指纹管理 API 服务
+ */
+
+import apiClient from "@/lib/api-client"
+import type { PaginatedResponse } from "@/types/api-response.types"
+import type {
+ EholeFingerprint,
+ BatchCreateResponse,
+ BulkDeleteResponse,
+ FingerprintStats
+} from "@/types/fingerprint.types"
+
+// 分页查询参数
+interface QueryParams {
+ page?: number
+ pageSize?: number
+ filter?: string
+}
+
+export const FingerprintService = {
+ // ==================== EHole ====================
+
+ /**
+ * 获取 EHole 指纹列表
+ */
+ async getEholeFingerprints(params: QueryParams = {}): Promise> {
+ const response = await apiClient.get("/fingerprints/ehole/", { params })
+ return response.data
+ },
+
+ /**
+ * 获取 EHole 指纹详情
+ */
+ async getEholeFingerprint(id: number): Promise {
+ const response = await apiClient.get(`/fingerprints/ehole/${id}/`)
+ return response.data
+ },
+
+ /**
+ * 创建单条 EHole 指纹
+ */
+ async createEholeFingerprint(data: Omit): Promise {
+ const response = await apiClient.post("/fingerprints/ehole/", data)
+ return response.data
+ },
+
+ /**
+ * 更新 EHole 指纹
+ */
+ async updateEholeFingerprint(id: number, data: Partial): Promise {
+ const response = await apiClient.put(`/fingerprints/ehole/${id}/`, data)
+ return response.data
+ },
+
+ /**
+ * 删除单条 EHole 指纹
+ */
+ async deleteEholeFingerprint(id: number): Promise {
+ await apiClient.delete(`/fingerprints/ehole/${id}/`)
+ },
+
+ /**
+ * 批量创建 EHole 指纹
+ */
+ async batchCreateEholeFingerprints(fingerprints: Omit[]): Promise {
+ const response = await apiClient.post("/fingerprints/ehole/batch_create/", { fingerprints })
+ return response.data
+ },
+
+ /**
+ * 文件导入 EHole 指纹
+ */
+ async importEholeFingerprints(file: File): Promise {
+ const formData = new FormData()
+ formData.append("file", file)
+ const response = await apiClient.post("/fingerprints/ehole/import_file/", formData, {
+ headers: { "Content-Type": "multipart/form-data" }
+ })
+ return response.data
+ },
+
+ /**
+ * 批量删除 EHole 指纹
+ */
+ async bulkDeleteEholeFingerprints(ids: number[]): Promise {
+ const response = await apiClient.post("/fingerprints/ehole/bulk-delete/", { ids })
+ return response.data
+ },
+
+ /**
+ * 删除所有 EHole 指纹
+ */
+ async deleteAllEholeFingerprints(): Promise {
+ const response = await apiClient.post("/fingerprints/ehole/delete-all/")
+ return response.data
+ },
+
+ /**
+ * 导出 EHole 指纹
+ */
+ async exportEholeFingerprints(): Promise {
+ const response = await apiClient.get("/fingerprints/ehole/export/", {
+ responseType: "blob"
+ })
+ return response.data
+ },
+
+ /**
+ * 获取 EHole 指纹数量
+ */
+ async getEholeCount(): Promise {
+ const response = await apiClient.get("/fingerprints/ehole/", { params: { pageSize: 1 } })
+ return response.data.total || 0
+ },
+
+ // ==================== 统计 ====================
+
+ /**
+ * 获取所有指纹库统计
+ */
+ async getStats(): Promise {
+ // 并行获取各指纹库数量
+ const [eholeCount] = await Promise.all([
+ this.getEholeCount(),
+ // TODO: 后续添加 Goby, Wappalyzer
+ ])
+ return {
+ ehole: eholeCount,
+ goby: 0,
+ wappalyzer: 0,
+ }
+ },
+}
diff --git a/frontend/types/api-response.types.ts b/frontend/types/api-response.types.ts
index 052449d3..8207574a 100644
--- a/frontend/types/api-response.types.ts
+++ b/frontend/types/api-response.types.ts
@@ -19,3 +19,13 @@ export interface BatchCreateResponse {
reason: string
}>
}
+
+
+// 分页响应类型
+export interface PaginatedResponse {
+ results: T[]
+ total: number
+ page: number
+ pageSize: number
+ totalPages?: number
+}
diff --git a/frontend/types/fingerprint.types.ts b/frontend/types/fingerprint.types.ts
new file mode 100644
index 00000000..a6b48255
--- /dev/null
+++ b/frontend/types/fingerprint.types.ts
@@ -0,0 +1,33 @@
+/**
+ * 指纹相关类型定义
+ */
+
+// EHole 指纹类型
+export interface EholeFingerprint {
+ id: number
+ cms: string
+ method: string
+ location: string
+ keyword: string[]
+ isImportant: boolean
+ type: string
+ createdAt: string
+}
+
+// 批量创建响应
+export interface BatchCreateResponse {
+ created: number
+ failed: number
+}
+
+// 批量删除响应
+export interface BulkDeleteResponse {
+ deleted: number
+}
+
+// 指纹统计信息
+export interface FingerprintStats {
+ ehole: number
+ goby: number
+ wappalyzer: number
+}