增加威胁域名审计

This commit is contained in:
Alex Yang
2026-04-03 10:04:07 +08:00
parent 170cdb3537
commit f8e222aaf6
41 changed files with 81016 additions and 4672993 deletions
+94 -184
View File
@@ -66,14 +66,7 @@
<a href="#query"
class="flex items-center px-4 py-3 text-gray-700 hover:bg-gray-100 rounded-md transition-all">
<i class="fa fa-search mr-3 text-lg"></i>
<span>DNS屏蔽查询</span>
</a>
</li>
<li>
<a href="#domain"
class="flex items-center px-4 py-3 text-gray-700 hover:bg-gray-100 rounded-md transition-all">
<i class="fa fa-globe mr-3 text-lg"></i>
<span>域名查询</span>
<span>DNS 屏蔽查询</span>
</a>
</li>
<li>
@@ -172,14 +165,7 @@
<a href="#query"
class="flex items-center px-4 py-3 text-gray-700 hover:bg-gray-100 rounded-md transition-all">
<i class="fa fa-search mr-3 text-lg"></i>
<span>DNS屏蔽查询</span>
</a>
</li>
<li>
<a href="#domain"
class="flex items-center px-4 py-3 text-gray-700 hover:bg-gray-100 rounded-md transition-all">
<i class="fa fa-globe mr-3 text-lg"></i>
<span>域名查询</span>
<span>DNS 屏蔽查询</span>
</a>
</li>
<li>
@@ -280,7 +266,7 @@
</header>
<!-- 页面内容 -->
<div class="p-4 sm:p-6 overflow-y-auto flex-1">
<div class="p-4 sm:p-6 overflow-y-auto flex-1 bg-gray-50 dark:bg-gray-900">
<!-- 仪表盘部分 -->
<div id="dashboard-content" class="space-y-6">
<!-- 统计卡片 -->
@@ -744,45 +730,6 @@
<!-- 域名查询页面内容(初始隐藏) -->
<div id="domain-content" class="hidden space-y-6">
<!-- 域名查询表单 -->
<div class="bg-white rounded-lg p-6 card-shadow">
<h3 class="text-lg font-semibold mb-4">域名查询</h3>
<div class="space-y-4">
<div class="flex flex-col sm:flex-row gap-4">
<div class="flex-1">
<label for="domain-input" class="block text-sm font-medium text-gray-700 mb-1">域名</label>
<input type="text" id="domain-input" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" placeholder="请输入域名,例如:example.com">
</div>
<div class="flex items-end">
<button id="domain-query-btn" class="px-6 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors">
<i class="fa fa-search mr-2"></i>查询
</button>
</div>
</div>
</div>
</div>
<!-- 域名信息结果 -->
<div id="domain-info-result" class="hidden bg-white rounded-lg p-6 card-shadow">
<h3 class="text-lg font-semibold mb-4">域名信息</h3>
<div class="space-y-4">
<div class="p-4 bg-blue-50 rounded-lg">
<div class="flex items-center mb-2">
<i class="fa fa-info-circle text-primary mr-2"></i>
<h4 class="font-medium">域名信息</h4>
</div>
<div id="domain-info-content" class="space-y-2 pl-6">
<!-- 域名信息将通过JavaScript动态填充 -->
</div>
</div>
</div>
</div>
</div>
<!-- 威胁告警页面内容(初始隐藏) -->
<div id="threats-content" class="hidden space-y-6">
<!-- 威胁统计卡片 -->
@@ -944,6 +891,7 @@
<th class="text-left py-2 sm:py-3 px-2 sm:px-4 text-xs sm:text-sm font-medium text-gray-500">来源IP</th>
<th class="text-left py-2 sm:py-3 px-2 sm:px-4 text-xs sm:text-sm font-medium text-gray-500">风险等级</th>
<th class="text-left py-2 sm:py-3 px-2 sm:px-4 text-xs sm:text-sm font-medium text-gray-500">状态</th>
<th class="text-left py-2 sm:py-3 px-2 sm:px-4 text-xs sm:text-sm font-medium text-gray-500">操作</th>
</tr>
</thead>
<tbody id="threat-list" class="divide-y divide-gray-200">
@@ -1350,11 +1298,21 @@
</div>
</div>
<!-- 归档信息显示 -->
<div class="bg-white rounded-lg p-4 card-shadow">
<div id="logs-archive-info">
<div class="flex items-center text-sm text-gray-500 dark:text-gray-400">
<i class="fa fa-archive mr-2"></i>
<span>正在加载归档信息...</span>
</div>
</div>
</div>
<!-- 日志搜索和过滤 -->
<div class="bg-white rounded-lg p-4 sm:p-6 card-shadow">
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-3">
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-5 gap-3">
<div class="sm:col-span-2">
<input type="text" id="logs-search" placeholder="搜索域名或客户端IP"
<input type="text" id="logs-search" placeholder="搜索域名或客户端 IP"
class="w-full px-3 sm:px-4 py-2 sm:py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-sm">
</div>
<div class="w-full">
@@ -1369,16 +1327,18 @@
<div class="w-full">
<select id="logs-per-page"
class="w-full px-3 sm:px-4 py-2 sm:py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-sm">
<option value="10">10条/页</option>
<option value="20">20条/页</option>
<option value="30" selected>30条/页</option>
<option value="50">50条/页</option>
<option value="100">100条/页</option>
<option value="3">3 条/页</option>
<option value="5">5 条/页</option>
<option value="10" selected>10 条/页</option>
<option value="20">20 条/页</option>
<option value="30">30 条/页</option>
<option value="50">50 条/页</option>
<option value="100">100 条/页</option>
</select>
</div>
<div class="sm:col-span-4 mt-3">
<div class="w-full">
<button id="logs-search-btn"
class="w-full sm:w-auto px-4 sm:px-6 py-2 sm:py-3 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors text-sm sm:text-base">
class="w-full px-4 sm:px-6 py-2 sm:py-3 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors text-sm sm:text-base">
<i class="fa fa-search mr-1 sm:mr-2 text-xs sm:text-sm"></i>搜索
</button>
</div>
@@ -1469,37 +1429,38 @@
<!-- 分页 -->
<div class="flex items-center justify-between mt-6">
<div class="text-sm text-gray-500">
<span id="logs-total-count">0</span> 条记录,
显示 <span id="logs-current-page">1</span> / <span id="logs-total-pages">1</span>
</div>
<div class="flex items-center space-x-4">
<div class="flex items-center space-x-3">
<div class="flex items-center space-x-2">
<span class="text-sm text-gray-500">每页显示:</span>
<select id="logs-per-page"
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent">
<option value="10">10</option>
<option value="20">20</option>
<option value="30" selected>30</option>
<option value="50">50</option>
<option value="100">100</option>
<span class="text-sm text-gray-500">每页:</span>
<select id="logs-per-page-bottom"
class="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-sm">
<option value="3">3 </option>
<option value="5">5 </option>
<option value="10" selected>10 </option>
<option value="20">20 </option>
<option value="30">30 </option>
<option value="50">50 条</option>
<option value="100">100 条</option>
</select>
</div>
<div class="flex items-center space-x-2">
<span class="text-sm text-gray-500">页码:</span>
<input type="number" id="logs-page-input" min="1" max="1" value="1"
class="w-16 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-center">
<button id="logs-go-page"
class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors">
前往
</button>
</div>
<div class="flex space-x-2">
<button id="logs-prev-page"
class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:border-transparent"
class="px-3 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed"
disabled>
<i class="fa fa-chevron-left"></i>
</button>
<input type="number" id="logs-page-input" min="1" max="1" value="1"
class="w-14 px-2 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-center text-sm">
<span class="text-sm text-gray-500">/ <span id="logs-total-pages-bottom">1</span></span>
<button id="logs-go-page"
class="px-3 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors text-sm">
跳转
</button>
<button id="logs-next-page"
class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:border-transparent"
class="px-3 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed"
disabled>
<i class="fa fa-chevron-right"></i>
</button>
@@ -1899,21 +1860,29 @@
</div>
<!-- 域名信息查询页面内容 -->
<div id="whois-content" class="hidden space-y-6">
<div id="whois-content" class="hidden space-y-4">
<!-- 错误信息 -->
<div id="whois-error" class="hidden bg-red-50 border border-red-200 rounded-md p-4 mb-6">
<div id="whois-error" class="hidden bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-md p-3">
<div class="flex items-center">
<i class="fa fa-exclamation-circle text-red-500 mr-3"></i>
<span class="text-red-600"></span>
<span class="text-red-600 dark:text-red-400"></span>
</div>
</div>
<!-- 加载提示 -->
<div id="whois-loading" class="hidden bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-md p-3">
<div class="flex items-center">
<i class="fa fa-spinner fa-spin text-blue-500 mr-3"></i>
<span class="text-blue-600 dark:text-blue-400">正在查询域名信息...</span>
</div>
</div>
<!-- 搜索区域 -->
<div class="bg-white rounded-lg p-4 sm:p-6 card-shadow">
<div class="bg-white dark:bg-gray-800 rounded-lg p-3 sm:p-4 card-shadow">
<div class="flex items-center space-x-4">
<div class="flex-1">
<input type="text" id="whois-domain-input"
class="w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent"
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent"
placeholder="请输入要查询的域名,例如:example.com">
</div>
<button id="whois-search-btn"
@@ -1925,94 +1894,94 @@
</div>
<!-- 域名注册信息 -->
<div id="whois-info-section" class="bg-white rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center">
<div id="whois-info-section" class="bg-white dark:bg-gray-800 rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center text-gray-900 dark:text-white">
<i class="fa fa-globe text-primary mr-2"></i>
域名注册信息
</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="space-y-1">
<div class="text-sm text-gray-500">注册者</div>
<div class="text-base font-medium" id="whois-registrant">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">注册者</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-registrant">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">注册时间</div>
<div class="text-base font-medium" id="whois-created">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">注册时间</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-created">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">注册邮箱</div>
<div class="text-base font-medium" id="whois-email">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">注册邮箱</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-email">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">过期时间</div>
<div class="text-base font-medium" id="whois-expires">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">过期时间</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-expires">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">域名服务商</div>
<div class="text-base font-medium" id="whois-registrar">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">域名服务商</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-registrar">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">域名服务器</div>
<div class="text-base font-medium" id="whois-nameservers">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">域名服务器</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="whois-nameservers">-</div>
</div>
</div>
</div>
<!-- ICP 备案信息 -->
<div id="icp-info-section" class="bg-white rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center">
<div id="icp-info-section" class="bg-white dark:bg-gray-800 rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center text-gray-900 dark:text-white">
<i class="fa fa-file-text text-primary mr-2"></i>
ICP 备案信息
</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="space-y-1">
<div class="text-sm text-gray-500">主办单位名称</div>
<div class="text-base font-medium" id="icp-company">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">主办单位名称</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="icp-company">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">备案/许可证号</div>
<div class="text-base font-medium" id="icp-license">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">备案/许可证号</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="icp-license">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">主办单位性质</div>
<div class="text-base font-medium" id="icp-type">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">主办单位性质</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="icp-type">-</div>
</div>
<div class="space-y-1">
<div class="text-sm text-gray-500">审核时间</div>
<div class="text-base font-medium" id="icp-date">-</div>
<div class="text-sm text-gray-500 dark:text-gray-400">审核时间</div>
<div class="text-base font-medium text-gray-900 dark:text-white" id="icp-date">-</div>
</div>
</div>
</div>
<!-- 最近 7 天 DNS 解析结果 -->
<div id="dns-results-section" class="bg-white rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center">
<div id="dns-results-section" class="bg-white dark:bg-gray-800 rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center text-gray-900 dark:text-white">
<i class="fa fa-list text-primary mr-2"></i>
最近 7 天 DNS 解析结果
</h3>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
<thead class="bg-gray-50 dark:bg-gray-700">
<tr>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">解析结果</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">地理位置</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">运营商</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase">解析结果</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase">地理位置</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase">运营商</th>
</tr>
</thead>
<tbody id="dns-results-body" class="bg-white divide-y divide-gray-200">
<tbody id="dns-results-body" class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">
</tbody>
</table>
</div>
<div class="mt-4 flex items-center justify-between">
<div class="text-sm text-gray-500" id="dns-results-total">共计 0 条</div>
<div class="text-sm text-gray-500 dark:text-gray-400" id="dns-results-total">共计 0 条</div>
<div class="flex items-center space-x-2" id="dns-results-pagination">
</div>
</div>
</div>
<!-- 最近一个月访问趋势 -->
<div id="trend-section" class="bg-white rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center">
<div id="trend-section" class="bg-white dark:bg-gray-800 rounded-lg p-4 sm:p-6 card-shadow hidden">
<h3 class="text-lg font-semibold mb-4 flex items-center text-gray-900 dark:text-white">
<i class="fa fa-line-chart text-primary mr-2"></i>
最近一个月访问趋势
</h3>
@@ -2258,65 +2227,6 @@
<!-- 直接渲染滚动列表的静态HTML内容 -->
<!-- 域名查询功能 -->
<script>
// 域名查询功能
document.addEventListener('DOMContentLoaded', function() {
// 域名查询按钮事件
const domainQueryBtn = document.getElementById('domain-query-btn');
if (domainQueryBtn) {
domainQueryBtn.addEventListener('click', function() {
const domainInput = document.getElementById('domain-input');
const domain = domainInput.value.trim();
if (!domain) {
showNotification('请输入域名', 'warning');
return;
}
// 显示加载状态
const domainInfoResult = document.getElementById('domain-info-result');
const domainInfoContent = document.getElementById('domain-info-content');
domainInfoContent.innerHTML = '<div class="flex items-center justify-center py-4"><i class="fa fa-spinner fa-spin mr-2"></i> 查询中...</div>';
domainInfoResult.classList.remove('hidden');
// 调用API查询域名信息
api.domainInfo(domain)
.then(data => {
if (data.error) {
showNotification(data.error, 'danger');
domainInfoContent.innerHTML = '<div class="text-danger">查询失败:' + data.error + '</div>';
return;
}
// 填充域名信息
domainInfoContent.innerHTML = `
<div class="flex items-center">
<span class="font-medium w-24">域名:</span>
<span>${data.domain || '未知'}</span>
</div>
<div class="flex items-center">
<span class="font-medium w-24">类别:</span>
<span>${data.category || '未知'}</span>
</div>
<div class="flex items-center">
<span class="font-medium w-24">所属单位/公司:</span>
<span>${data.company || '未知'}</span>
</div>
`;
})
.catch(error => {
console.error('域名查询错误:', error);
showNotification('查询失败,请稍后重试', 'danger');
domainInfoContent.innerHTML = '<div class="text-danger">查询失败,请稍后重试</div>';
});
});
}
});
</script>
<!-- 域名信息查询页面脚本 -->
<script src="js/whois.js"></script>
<!-- 威胁告警页面脚本 -->
<script src="js/threats.js"></script>