如何通过Windows Service访问服务端数据库实现局域网USB设备插拔监控
局域网USB插拔监控数据同步方案
你已经完成了客户端采集层的开发,只需要补全服务端接收层+数据存储层的链路即可,整个架构是典型的轻量C/S架构,局域网场景下不需要公网穿透,实现成本极低。
具体实施步骤
1. 开发服务端数据接收接口
- 局域网服务器用任意熟悉的后端框架开发轻量HTTP POST接口即可,可选方案包括Python FastAPI、C# ASP.NET Core、Java SpringBoot等,接口接收参数和你已采集的字段对应即可:
客户端IP、操作时间、USB设备名称、操作类型(插入/拔出),可额外扩展客户端主机名、USB设备序列号字段方便后续问题定位 - 接口增加基础校验逻辑:比如配置固定的请求头校验密钥,只有携带正确密钥的客户端请求才会被处理,避免局域网内非法请求写入脏数据
2. 改造现有Windows Service逻辑
- 在原有采集逻辑基础上增加上报模块:每次捕获到USB插拔事件后,构造POST请求调用服务端接口上报数据,局域网内延迟极低基本可以做到实时同步
- 增加失败重试+离线缓存机制:如果服务器临时不可用(网络波动、维护),将事件暂存到本地SQLite数据库或加密文本文件中,网络恢复后批量补报,避免数据丢失
- 上报地址直接配置为服务端的固定局域网IP+端口,比如
http://192.168.3.20:8090/api/usb/report,无需配置域名,减少额外的局域网DNS部署成本
3. 搭建服务端数据库
- 终端规模小于100台的场景用轻量SQLite即可,更大规模推荐用MySQL、PostgreSQL等关系型数据库
- 参考表结构设计:
CREATE TABLE usb_operation_log ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', client_ip VARCHAR(15) NOT NULL COMMENT '终端IP', client_hostname VARCHAR(50) COMMENT '终端主机名', operation_time DATETIME NOT NULL COMMENT '插拔操作时间', usb_device_name VARCHAR(100) NOT NULL COMMENT 'USB设备名称', usb_serial VARCHAR(50) COMMENT 'USB设备序列号', operation_type TINYINT NOT NULL COMMENT '操作类型:1=插入,2=拔出', report_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '数据上报时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 给
client_ip、operation_time字段加索引,提升后续按终端、按时间范围查询的效率
4. 测试与批量部署
- 先选2-3台测试终端安装Service,验证插拔事件上报、离线补报、数据落库的逻辑是否正常
- 验证无误后通过域策略推送、批处理脚本等方式批量部署到所有需要监控的终端,无需逐台手动安装
优化建议
- 服务端可扩展白名单校验逻辑:如果插入的USB设备不在预设白名单内,直接触发内网告警推送给管理员
- 可以配套开发极简的Web管理页,支持历史记录查询、报表导出、白名单配置等功能,小团队内部使用的话半天即可完成开发
- 客户端Service配置为开机自启、异常自动重启,避免终端用户手动停止服务逃避监控
内容的提问来源于stack exchange,提问作者rhylexthegun
相关产品推荐
相关产品推荐

