如何知道我的网络摄像头是否被使用?

如何知道我的网络摄像头是否被使用?

哪个命令可以让我知道我的网络摄像头是否被使用?

lsof /dev/video0还不够。应监视主设备号和次设备号为 81 和 0 的所有块设备。

答案1

如果您的内核使用模块(很有可能),确定程序是否正在访问您的网络摄像头的一种方法是查看模块的使用计数:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

第三个字段中的 0 表明没有任何设备为uvcvideo受控网络摄像头打开(lsmod运行时)。当然,您需要确切地知道哪个模块负责您的网络摄像头;不过检查很容易,在运行 Cheese 等程序时您会看到输出变化。

请注意,严格来说,正计数仅意味着某些东西已打开设备,并不意味着正在捕获图像。

答案2

在任何正常的系统上,除非您使用自己的 chroot 设置/dev,否则所有设备文件都位于/dev.只有 root 才能创建设备文件,因此您无需担心恶意用户在其他地方创建设备文件。

因此,您需要做的就是找到/dev与您感兴趣的设备引用相同设备的文件。

ls -lR /dev |awk '/^c/ && $5 == "81," && $6 == "0"'

这很可能只会显示/dev/video0。通常,每个设备都有一个设备文件,并且可能还有指向它的附加符号链接。

就这样实际的你的问题的答案很简单。只需检查哪些进程打开了设备文件即可。

fuser /dev/video0

如果您想监视访问(即捕获可能随时打开设备文件的进程),请使用 Linux 之一文件访问监控方法在设备文件上:设置监视(并检查哪些进程已打开设备文件)

inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

或设置将在系统日志中记录访问的审核规则(通常/var/log/audit/audit.log

auditctl -w /dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

答案3

假设您真正想要的是确保您的网络摄像头当您不希望使用时,它不会被使用,最简单的解决方案是在不需要时简单地断开它(如果是外部的)。或者盖住网络摄像头(只需一块胶带即可)。

基于物理的方法比软件方法安全得多。

相关内容