reconya数据库设计解析:如何高效存储与管理网络侦察数据
reconya数据库设计解析:如何高效存储与管理网络侦察数据
【免费下载链接】reconyaNetwork reconnaissance and asset discovery tool项目地址: https://gitcode.com/gh_mirrors/re/reconya
reconya是一款强大的网络侦察和资产发现工具,专为高效存储与管理网络侦察数据而设计。本文将深入解析reconya的数据库架构,揭示其如何通过精心设计的数据模型和优化策略,实现对复杂网络环境中各类设备和服务信息的有效管理。
核心数据模型概览
reconya采用SQLite作为后端数据库,通过精心设计的表结构实现对网络侦察数据的高效组织。系统核心数据模型围绕网络资产的层级关系构建,主要包括以下实体:
- 网络(Networks):表示IP子网或网络段
- 设备(Devices):网络中的活跃设备
- 端口(Ports):设备开放的网络端口
- Web服务(Web Services):HTTP/HTTPS服务信息
- 事件日志(Event Logs):系统活动记录
- 地理位置缓存(Geolocation Cache):IP地址地理信息
reconya仪表板展示了数据库中存储的网络资产概览,包括设备分布、状态和关键指标
关键表结构设计详解
网络表(networks)设计
网络表是整个数据模型的基础,存储网络段信息:
CREATE TABLE IF NOT EXISTS networks ( id TEXT PRIMARY KEY, cidr TEXT NOT NULL, name TEXT, description TEXT, status TEXT DEFAULT 'active', last_scanned_at TIMESTAMP, device_count INTEGER DEFAULT 0, created_at TIMESTAMP, updated_at TIMESTAMP, ipv6_prefix TEXT, address_family TEXT DEFAULT 'ipv4' )设计亮点:
- 支持IPv4/IPv6双栈网络,通过
address_family字段区分 - 包含网络元数据和扫描状态信息
- 维护设备数量统计,避免频繁COUNT查询
设备表(devices)设计
设备表是数据模型的核心,存储网络设备详细信息:
CREATE TABLE IF NOT EXISTS devices ( id TEXT PRIMARY KEY, name TEXT NOT NULL, ipv4 TEXT NOT NULL, mac TEXT, vendor TEXT, status TEXT NOT NULL, network_id TEXT, hostname TEXT, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL, last_seen_online_at TIMESTAMP, port_scan_started_at TIMESTAMP, port_scan_ended_at TIMESTAMP, web_scan_ended_at TIMESTAMP, device_type TEXT, os_name TEXT, os_version TEXT, os_family TEXT, os_confidence INTEGER, comment TEXT, ipv6_link_local TEXT, ipv6_unique_local TEXT, ipv6_global TEXT, ipv6_addresses TEXT, FOREIGN KEY (network_id) REFERENCES networks(id) )设备表设计考虑了网络侦察的实际需求:
- 全面的IP地址支持,包括IPv4和多种类型的IPv6地址
- 操作系统检测信息(名称、版本、家族和置信度)
- 设备类型分类(router, switch, nas, printer等)
- 扫描状态跟踪(端口扫描、Web扫描的时间戳)
设备详情模态框展示了从数据库中检索的完整设备信息,包括IP地址、开放端口、操作系统检测结果等
端口表(ports)与Web服务表(web_services)
端口和Web服务信息采用分离存储策略:
CREATE TABLE IF NOT EXISTS ports ( id INTEGER PRIMARY KEY AUTOINCREMENT, device_id TEXT NOT NULL, number TEXT NOT NULL, protocol TEXT NOT NULL, state TEXT NOT NULL, service TEXT NOT NULL, FOREIGN KEY (device_id) REFERENCES devices(id) ) CREATE TABLE IF NOT EXISTS web_services ( id INTEGER PRIMARY KEY AUTOINCREMENT, device_id TEXT NOT NULL, url TEXT NOT NULL, title TEXT, server TEXT, status_code INTEGER NOT NULL, content_type TEXT, size INTEGER, screenshot TEXT, port INTEGER NOT NULL, protocol TEXT NOT NULL, scanned_at TIMESTAMP NOT NULL, FOREIGN KEY (device_id) REFERENCES devices(id) )这种设计将基础端口信息与Web服务的详细信息分离,既保证了数据完整性,又优化了查询性能。
数据关系与索引优化
reconya数据库通过精心设计的关系和索引确保高效查询:
- 外键关系:通过
network_id和device_id建立表间关联 - 唯一索引:
idx_devices_ipv4确保IP地址唯一性 - 查询优化索引:
idx_devices_network_id:加速按网络筛选设备idx_web_services_device_id:优化设备的Web服务查询idx_geolocation_cache_ip:加速IP地理信息查询
数据模型与代码结构的映射
reconya采用清晰的模型-数据库映射,在代码中体现为结构体定义:
设备模型定义(backend/models/device.go):
type Device struct { ID string `bson:"_id,omitempty" json:"id"` Name string `bson:"name" json:"name"` Comment *string `bson:"comment,omitempty" json:"comment,omitempty"` IPv4 string `bson:"ipv4" json:"ipv4"` IPv6LinkLocal *string `bson:"ipv6_link_local,omitempty" json:"ipv6_link_local,omitempty"` // ... 其他字段 Status DeviceStatus `bson:"status" json:"status"` NetworkID string `bson:"network_id,omitempty" json:"network_id,omitempty"` Ports []Port `bson:"ports,omitempty" json:"ports,omitempty"` WebServices []WebService `bson:"web_services,omitempty" json:"web_services,omitempty"` // ... 时间戳字段 }网络模型定义(backend/models/network.go):
type Network struct { ID string `bson:"_id,omitempty" json:"id"` Name string `bson:"name" json:"name"` CIDR string `bson:"cidr" json:"cidr"` IPv6Prefix *string `bson:"ipv6_prefix,omitempty" json:"ipv6_prefix,omitempty"` AddressFamily AddressFamily `bson:"address_family" json:"address_family"` // ... 其他字段 }这种映射关系使代码与数据库结构保持一致,简化了数据操作逻辑。
数据库性能优化策略
reconya在SQLite配置中应用了多项性能优化:
pragmas := []string{ "PRAGMA journal_mode=WAL", // 启用Write-Ahead Logging提升并发性 "PRAGMA busy_timeout=30000", // 设置30秒忙等待超时 "PRAGMA synchronous=NORMAL", // 平衡写入性能和数据安全 "PRAGMA cache_size=10000", // 增大缓存大小 "PRAGMA foreign_keys=ON", // 启用外键约束 "PRAGMA temp_store=MEMORY", // 临时表存储在内存中 "PRAGMA mmap_size=268435456", // 设置256MB内存映射 }这些配置显著提升了在高并发网络扫描场景下的数据库性能和稳定性。
总结:高效网络侦察数据管理的最佳实践
reconya的数据库设计体现了网络侦察工具的数据管理最佳实践:
- 针对性的数据模型:专为网络资产信息设计,兼顾IPv4/IPv6双栈环境
- 优化的关系结构:通过合理的表关系和索引设计提升查询效率
- 性能与可靠性平衡:SQLite配置优化确保在资源受限环境中高效运行
- 可扩展性考虑:通过ALTER TABLE操作支持 schema 演进
通过这套精心设计的数据库架构,reconya能够高效存储和管理复杂网络环境中的侦察数据,为网络管理员和安全分析师提供准确、及时的网络资产视图。
【免费下载链接】reconyaNetwork reconnaissance and asset discovery tool项目地址: https://gitcode.com/gh_mirrors/re/reconya
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
