WiFi探针测试MAC地址获取信息

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 28 11:03:56 2022

@author: Jiabao Wang
"""

#import curses # pip install windows-curses
import serial # pip install pyserial
import datetime, time # 导入时间包

ser = serial.Serial() # 开启com3口,波特率115200,超时5


def port_open_configure(): #配置串口参数
    ser.port='COM3'
    ser.baudrate=115200
    ser.bytesize=8
    ser.stopbits=1
    ser.parity="N"#奇偶校验位

    ser.open() #打开串口
    if(ser.isOpen()): #判断打开是否成功
        print("串口打开成功!")
        ser.flushInput() # 清空缓冲区
    else:
        print("串口打开失败!")

    return ser
        
def port_close():
    ser.close()
    if(ser.isOpen()):
        print("串口关闭失败!")
    else:
        print("串口关闭成功!")

src_list = dict()
dst_list = dict()

def parse_data(tik_time, data):
    
    src_mac, dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2 = data.split('|')
    if int(StrongInfo) > -70 and dst_mac != 'FF:FF:FF:FF:FF:FF':
        if src_mac not in src_list:
            src_list[src_mac] = [dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2, tik_time]
        else:
            if tik_time - src_list[src_mac][-1] > 60:
                print("DEL", src_list[src_mac])
                src_list.pop(src_mac)
            else:
                src_list[src_mac][-1]=tik_time
                
                
        if dst_mac not in dst_list:
            dst_list[dst_mac] = [dst_mac, FB, FS, Chn, StrongInfo, Name, D1, D2, tik_time]
        else:
            if tik_time - dst_list[dst_mac][-1] > 60:
                print("DEL", dst_list[dst_mac])
                dst_list.pop(dst_mac)
            else:
                dst_list[dst_mac][-1]=tik_time
    print("**********用户终端***************")
    for idx, key in enumerate(src_list):
        print(idx, key, src_list[key])
        
    print("**********WiFi热点***************")
    for idx, key in enumerate(dst_list):
        print(idx, key, dst_list[key])
        
        
def main():
    port_open_configure()
    next_data = 0
    recv_res = ''
    while True:
        # Press 'q' to exit
        # sc.refresh()
        # key = sc.getch()
        # if key == ord('q'):
        #     break
        # elif key < 0:
        #     time.sleep(0.1)
        
        # Get data from COM
        count = ser.inWaiting() # 获取串口缓冲区数据
        if count !=0 :
            recv = ser.read(ser.in_waiting) # 读出串口数据
            #print("####", recv)
            if next_data:   # 前一个数据解析完剩余部分和新数据重组
                recv = recv_res + recv
            pos = recv.find(b'\r\n')  # 找一个独立的数据信息
            while pos >= 0:
                data = recv[0:pos]   # 截取独立的数据信息
                parse_data(time.time(), data.decode("utf-8"))
                #print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),"-- recv -->", data.decode("utf-8")) # 打印一下子
                recv = recv[pos+len('\r\n'):]  # 去除已经解析的数据部分
                pos = recv.find(b'\r\n')   # 继续找一个独立的数据信息
                
            recv_res = recv   # 没有完成的独立信息,则作为剩余部分与下一个数据包组合后再解析
            next_data = 1

    time.sleep(0.1) # 延时0.1秒,免得CPU出问题
    port_close()

if __name__ == '__main__': 
    main()#curses.wrapper(main)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值