feat(ips): 批量补全厂商功能 + MAC厂商替换为IEEE OUI数据库
前端: - IPs.vue: 新增「补全厂商」按钮,选中网段后一键补全 - scanApi: 新增 batchFillVendor/batchDiscoverHostname + enable_netbios 参数 后端: - enhanced_scan.py: 新增 POST /scan/batch/vendor 批量补全厂商端点 - enhanced_scan.py: 新增 POST /scan/batch/hostname 批量发现主机名端点 - scan_tasks.py: 透传 enable_netbios 参数
This commit is contained in:
@@ -63,20 +63,29 @@ export const scanApi = {
|
||||
return api.post(`/scan/ping/${id}`)
|
||||
},
|
||||
// 综合扫描网段
|
||||
// options: { enable_ping, enable_arp, enable_dns, timeout }
|
||||
// options: { enable_ping, enable_arp, enable_dns, enable_netbios, timeout }
|
||||
// 单次调用覆盖全局 30s 超时,因为 /24 网段扫描要数分钟
|
||||
comprehensiveScan(id, options = {}) {
|
||||
const {
|
||||
enable_ping = true,
|
||||
enable_arp = true,
|
||||
enable_dns = true,
|
||||
enable_netbios = true,
|
||||
timeout = 2
|
||||
} = options
|
||||
return api.post(`/scan/comprehensive/${id}`, {}, {
|
||||
params: { enable_ping, enable_arp, enable_dns, timeout },
|
||||
params: { enable_ping, enable_arp, enable_dns, enable_netbios, timeout },
|
||||
timeout: 600000 // 10 分钟,足以应付 /16 级别网段
|
||||
})
|
||||
},
|
||||
// 批量补全厂商信息
|
||||
batchFillVendor(params) {
|
||||
return api.post('/scan/batch/vendor', {}, { params })
|
||||
},
|
||||
// 批量发现主机名
|
||||
batchDiscoverHostname(params) {
|
||||
return api.post('/scan/batch/hostname', {}, { params })
|
||||
},
|
||||
// 单个IP扫描
|
||||
scanIP(ipAddress) {
|
||||
return api.post(`/scan/comprehensive/ip/${ipAddress}`)
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<el-icon><Search /></el-icon>
|
||||
批量扫描
|
||||
</el-button>
|
||||
<el-button type="warning" @click="batchFillVendor" :loading="vendorLoading">
|
||||
<el-icon><Refresh /></el-icon>
|
||||
补全厂商
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -176,6 +180,7 @@ const route = useRoute()
|
||||
const loading = ref(false)
|
||||
const submitting = ref(false)
|
||||
const scanning = ref(false)
|
||||
const vendorLoading = ref(false)
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const tableData = ref([])
|
||||
@@ -278,6 +283,24 @@ const startBatchScan = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const batchFillVendor = async () => {
|
||||
if (!filters.networkId) {
|
||||
ElMessage.warning('请先选择网段')
|
||||
return
|
||||
}
|
||||
vendorLoading.value = true
|
||||
try {
|
||||
const res = await scanApi.batchFillVendor({ network_id: filters.networkId })
|
||||
ElMessage.success(res.message)
|
||||
loadIPs()
|
||||
} catch (error) {
|
||||
ElMessage.error('补全厂商失败')
|
||||
console.error('补全厂商错误:', error)
|
||||
} finally {
|
||||
vendorLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const editIP = (row) => {
|
||||
ipForm.id = row.id
|
||||
ipForm.ip_address = row.ip_address
|
||||
|
||||
Reference in New Issue
Block a user