首页 > 编程语言 >基于WiFi的防盗报警Python脚本

基于WiFi的防盗报警Python脚本

时间:2024-03-12 12:22:05浏览次数:23  
标签:index 防盗 Python ip WiFi device print import MY

学校图书馆有一本电子书,可以供学生阅读,但是怎么防止学生将其带出图书馆呢?我把它连上馆内的一台电脑的WiFi热点,间隔一段时间就从电脑ping这台电子书,如果ping不通,说明电子书脱离了WiFi信号范围,电脑就会响起报警声。
代码思路如下,先通过Windows上的arp命令,用设备的MAC地址获取其IP,再用ping命令检测设备是否在线,如果不在,就输出现在的时间、丢失设备IP和MAC地址,保存日志到文件,并播放报警声。
我尝试过给电子书贴RFID标签,但是RFID会受到电子书干扰,在通过门禁时无法像普通书籍一样报警。
如果各位还有什么好方法,欢迎评论!

import datetime
import sys
import time
import sched
import subprocess
from io import StringIO

try:
    import playsound
except ImportError:
    import os
    os.system("pip install playsound")
    import playsound

MY_DEVICE = ["48-e7-da-13-9e-b3"] # MAC addresses of my devices
device_ip = [""] * len(MY_DEVICE)
DETECT_DELAY = 5  # seconds
SOUND_PATH = "my_alert.mp3" # alert sound path


def detector():
    lost = []
    for i in range(len(device_ip)):
        if device_ip[i] != "":
            if subprocess.run("ping -n 2 -w 2500 " + device_ip[i], capture_output=True).returncode != 0:
                lost.append(i)

    if len(lost) > 0:
        buffer = StringIO()
        sys.stdout = buffer
        now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        print()
        print(now_time)
        print("Device lost:")
        for dev_id in lost:
            print(device_ip[dev_id], "", MY_DEVICE[dev_id])
        output = buffer.getvalue()
        sys.stdout = sys.__stdout__
        print(output)
        with open("./log.txt", "a") as file:
            file.write(output)

        while True:
            playsound.playsound(SOUND_PATH)
    else:
        print("ok.")
        loop_detect()


def loop_detect():
    s = sched.scheduler(time.time, time.sleep)
    s.enter(DETECT_DELAY, 6, detector, ())
    s.run()


#get ip from its MAC address
def get_ip():
    for line in subprocess.check_output("arp -a", shell=True).decode("gbk").splitlines():
        for index in range(len(MY_DEVICE)):
            if MY_DEVICE[index] in line:
                ip = line[0:line.index(MY_DEVICE[index])].strip()
                device_ip[index] = ip

    for index in range(len(device_ip)):
        if device_ip[index] == "":
            print("Device not found in arp: ", MY_DEVICE[index])
        else:
            print("Device found in arp: ", device_ip[index], "", MY_DEVICE[index])


if __name__ == "__main__":
    get_ip()
    all_offline = True
    for ip in device_ip:
        if ip != "":
            all_offline = False
            break
    if not all_offline:
        print("Start detecting...")
        loop_detect()
    else:
        print("All offline")

标签:index,防盗,Python,ip,WiFi,device,print,import,MY
From: https://www.cnblogs.com/mariocanfly/p/18068035

相关文章

  • 用Python编写自己的微型Redis
    building-a-simple-redis-server-with-python前几天我想到,写一个简单的东西会很整洁 雷迪斯-像数据库服务器。虽然我有很多WSGI应用程序的经验,数据库服务器展示了一种新颖挑战,并被证明是学习如何工作的不错的实际方法Python中的套接字。在这篇文章中,我将分享我在此过程中......
  • python得scrapy抓中文,保存csv、json、txt文件乱码解决方法
    保存json和txt文件,出现这种东西不是乱码,是unicode,例如:\u96a8\u6642\u66f4\u65b0>\u25a0\u25a0\u25a在settings.py文件中加入下面一句code,之后就是中文了。FEED_EXPORT_ENCODING='utf-8'保存csv表格文件时,会出现中文乱码,这个确实是乱码,例如:瀵掑啲瀹濈彔鎶......
  • 傅里叶变换算法和Python代码实现
    傅立叶变换是物理学家、数学家、工程师和计算机科学家常用的最有用的工具之一。本篇文章我们将使用Python来实现一个连续函数的傅立叶变换。我们使用以下定义来表示傅立叶变换及其逆变换。设f:ℝ→ℂ是一个既可积又可平方积分的复值函数。那么它的傅立叶变换,记为f̂,是由以......
  • Python - 如何import导入上级目录文件
    Python-import导入上级目录文件 原文地址:https://zhuanlan.zhihu.com/p/526710677?utm_id=0假设有如下目录结构:--dir0|file1.py|file2.py|dir3|file3.py|dir4|file4.pydir0文件夹下有file1.py、file2.py两个文件和dir3、dir4......
  • python asgi 框架资料
    asgi是支持python异步的pythonweb服务器,框架和应用程序之间的标准接口,目前不少框架已经支持了目前github上有一个不错的项目,里边包含了各类支持以及实现了asgi的框架,值得学习 awesome-asgi参考资料https://github.com/encode/uvicornhttps://asgi.readthedocs.io/en/late......
  • python怎么创建项目?
     Python是一种高级编程语言,可以用于各种不同的开发和编程场景。Python的灵活性使其成为许多开发者的首选。在本文中,我们将探讨如何在Python中创建项目。一.准备工作在开始使用Python进行开发之前,您需要确保您的计算机上已经安装了Python。如果您尚未安装Python,可以通过官......
  • Python web 框架
    Pythonweb框架戏说WSGI(PythonWeb服务网关接口)当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅:Zope,厚重的长枪。较早出现的武器形态。该武器非常之强悍,无坚不摧,无物不破。而且适合在军队中使用,排兵布阵集团作战效果更佳。......
  • python 使用PaddleOCR读取图片文字,并用pyttsx3转为音频
    python小白,纯纯小白,很久之前看了一遍菜鸟官网,但实在没有应用场景,所以过目即忘。最近工作不是很忙,给我出了个题目,觉得挺有意思,就玩一玩。  所以关键点就是,图片提取出文字,然后文字转音频。1.图片提取文字,PaddleOCR出题人士,给出了git上一个ocr的工具库,支持图文信息的抽取。用......
  • UVM宏解释+odt文件转doc+merge命令和difflib+python调用命令+clog2和系统函数+java添
    UVM宏解释UVM_DISABLE_AUTO_ITEM_RECORDINGhttps://blog.csdn.net/MGoop/article/details/127295965itemrecord的方法主要是用于记录事务信息的,原理是调用accept_tr,begin_tr,end_tr。似乎和波形上显示出各个事务相关。默认情况下,在调用get_next_item()和item_done()时自动......
  • 轻松驾驭Python格式化:5个F-String实用技巧分享
    F-String(格式化字符串字面值)是在Python3.6中引入的,它是一种非常强大且灵活的字符串格式化方法。它允许你在字符串中嵌入表达式,这些表达式在运行时会被求值并转换为字符串,这种特性使得F-String在编写Python代码时能够更简洁、更直观地处理字符串。本文总结了5个实用的F-String技......