在办公室的日常运维中,USB设备的随意插拔很容易引发数据泄露、恶意程序传播等问题,使用Python可以快速搭建轻量化的USB设备监控管理系统,适配不同操作系统的办公环境需求。

不同系统下的USB监控实现方案
Linux环境使用pyudev库
Linux系统下可以通过pyudev库监听内核的udev事件,实时获取USB设备的接入和拔出状态,首先安装依赖库:
# 安装pyudev库 pip install pyudev
以下是监听USB设备事件的示例代码:
import pyudev
# 创建上下文对象
context = pyudev.Context()
# 监听USB设备的添加和移除事件
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by(subsystem='usb')
# 处理事件的回调函数
def usb_event_handler(action, device):
if action == 'add':
print(f"USB设备接入:{device.get('ID_VENDOR', '未知厂商')} {device.get('ID_MODEL', '未知型号')}")
# 可在此处添加记录日志、校验设备权限的逻辑
elif action == 'remove':
print(f"USB设备拔出:{device.get('ID_VENDOR', '未知厂商')} {device.get('ID_MODEL', '未知型号')}")
# 启动监听
for device in monitor:
usb_event_handler(device.action, device)Windows环境使用wmi库
Windows系统下可以通过wmi库查询系统设备信息,监听USB设备的状态变化,首先安装wmi依赖:
# 安装wmi库,需要提前安装pywin32 pip install wmi pywin32
以下是Windows下监控USB设备接入的示例代码:
import wmi
import pythoncom
# 初始化COM组件
pythoncom.CoInitialize()
# 创建WMI对象
c = wmi.WMI()
# 监听USB存储设备的接入事件
watcher = c.Win32_PnPEntity.watch_for(notification_type="Creation", delay_secs=1, query="SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE 'USB%'")
while True:
try:
device = watcher()
# 获取设备名称和描述
device_name = device.Name
device_id = device.PNPDeviceID
print(f"USB设备接入:{device_name},设备ID:{device_id}")
# 可在此处添加设备白名单校验逻辑
except Exception as e:
print(f"监听异常:{e}")USB设备管理功能扩展
除了基础的监控功能,还可以扩展以下管理能力:
- 设备日志记录:将USB设备的接入时间、厂商、型号、设备ID等信息写入本地日志文件或数据库,便于后续审计追溯。
- 白名单管控:维护允许使用的USB设备ID列表,当检测到未授权设备接入时,可以弹出提示、记录告警甚至通过系统命令禁用设备。
- 批量管理:结合办公环境的域控或其他管理工具,将Python脚本部署为多台办公电脑的后台服务,统一收集USB设备使用数据。
注意事项
运行USB监控脚本需要对应的系统权限,Linux下建议使用root权限运行,Windows下需要管理员权限才能完整获取设备信息和执行管控操作。同时脚本部署时建议设置为开机自启动,确保全程覆盖办公时段的设备监控需求。