使用Python在蓝牙设备不在范围内时锁定计算机
Python提供了使用手机的蓝牙 UUID 地址作为任何系统的物理安全令牌的可访问性。这可以在名为PyBluez的Python包的帮助下完成。 Pybluez 可以安装在 Linux、Windows 和 macOS 中,并且与Python 2.7 和 3.x 兼容。
所需安装:
需要的模块是:
- Pybluez:该模块允许使用系统蓝牙资源。要安装它,请在终端中键入以下命令。
python3 -m pip install pybluez
- 计划:计划库用于在每天的特定时间或一周中的特定日期安排任务。要安装它,请在终端中键入以下命令。
python3 -m pip install schedule
方法:
PyBluez 是一个包含蓝牙资源的包,它允许Python开发人员轻松创建蓝牙应用程序。首先,必要的包已经被导入到程序中。 PyBluez
导入为蓝牙,导入schedule
用于调度程序,导入time
包以处理与时间相关的任务,导入ctypes
以使用其他语言的现有库,通过在Python中编写简单的包装器。以下是步骤。
- 定义了一个函数
job()
,其中您的手机的蓝牙地址在变量inputBdaddr
中声明。passed
的变量被初始化为 False 以跟踪是否在发现的设备中找到了给定的蓝牙地址。要搜索附近可用的蓝牙设备,请使用bluetooth.discover_devices()
。结果保存在 try-except 块内的变量scan
中。如果在scan
中找到所需的设备,则passed
的变量设置为 true,否则设置为 false。 - 如果
passed
发现为假,意味着没有找到所需的设备,工作站被锁定。 - 现在通过每 30 秒调用一次函数
job()
来安排上述步骤。 while 循环用于检查是否有任何计划任务正在等待运行。
下面是实现:
# Import required packages
import schedule
import time
import bluetooth
import ctypes
def job():
# Find your bluetooth uuid in your
# mobile and give set it in the
# variable
inputBdaddr = "XX:XX:XX:XX:XX:XX"
# Variable to find whether the
# given bluetooth uuid is
# present in the discovered devices
passed = False
# Try to search for the nearby
# visible devices
try:
# Get the list of discovered devices
scan = bluetooth.discover_devices()
# Search for your bluetooth uuid
# in the scanned devices If found
# set the variable to true else
# set the variable to false
if inputBdaddr in scan:
passed = True
else:
passed = False
except:
passed = False
# When bluetooth device
# is not found, lock the
# workstation
if not passed:
ctypes.windll.user32.LockWorkStation()
# Schedule the process
# to run every 30 seconds
schedule.every(30).seconds.do(job)
# Check whether a scheduled
# task is pending to run or not
while 1:
schedule.run_pending()
time.sleep(1)
限制:
由于 PyBluez 尚未积极开发,因此蓝牙检测是概率性的。 discover_devices() 有时无法检测到范围内的设备。在这种情况下,最好在放弃之前再试一两次。