Python使用tkinter显示Pandorabox/Openwrt路由器在线用户

Python使用tkinter显示Pandorabox/Openwrt路由器在线用户

一直没时间把写自己的学习经验写成博客,今日闲来无事,将之前写的代码分享上来
  • Python3
  • Python爬虫
  • 正则表达式匹配IP及MAC地址
  • tkinter

项目需求

通过Python实现访问路由器(只测试了Pandorabox,理论上openwrt也可用),获取到当前在线的用户。

懒,人类学习与进步的根源hhhh,可以查看所在线的用户,暂时只实现了该功能,当时还想扩展到重启、Qos等功能(均未加入),因为是两年前写的代码,所以有点惨不忍睹。

Post访问路由器

使用了requests模块,通过post请求网址,将返回的文本使用正则表达式将当前在线的用户分割出IP地址与MAC地址。

def post():

    url = 'http://192.168.1.1'#网关地址
    parms = {
        'luci_username': 'root',
        'luci_password': 'root'#这里填写用户名与密码
    }
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Cache-Control': 'max-age=0',
        'Content-Length': '41',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Host': '192.168.1.1',
        'Origin': 'http://192.168.1.1',
        'Proxy-Connection': 'keep-alive',
        'Referer': 'http://192.168.1.1/',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
    }
    uu = requests.post('http://192.168.1.1/cgi-bin/luci/admin/status/ipbandwidth', data=parms, headers=headers)
    resp = uu.text
    fenge = re.compile('\[\"(.*)\"\]\,').findall(resp)[0]
    ip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])').findall(fenge)#匹配ip
    mac = re.compile(r'[0-9a-f][0-9a-f]\:[0-9a-f][0-9a-f]\:[0-9a-f][0-9a-f]\:[0-9a-f][0-9a-f]\:[0-9a-f][0-9a-f]\:[0-9a-f][0-9a-f]').findall(fenge)#匹配mac地址
    return ip,mac

tkinter布局使用

因为使用的是python3,和python2的方法有些不同

def view(ip,mac):
    root = tkinter.Tk()
    root.title('当前在线')
    root.geometry('350x350')
    frm = tkinter.Frame(root)
    frm_L = tkinter.Frame(frm)
    frm_R = tkinter.Frame(frm)

    #显示IP地址
    tkinter.Label(frm_L, text='IP地址', font=('Arial', 20)).pack(side=tkinter.TOP)
    var = tkinter.StringVar(root)
    lb_ip = tkinter.Listbox(frm_L, listvariable=var)
    for item in ip:
        lb_ip.insert(tkinter.END, item)
    var.set(ip)
    lb_ip.bind('<ButtonRelease-1>')
    lb_ip.pack()
    frm_L.pack(side =tkinter.LEFT)

    # 显示IP地址
    tkinter.Label(frm_R, text='MAC地址', font=('Arial', 20)).pack(side=tkinter.TOP)
    varmac = tkinter.StringVar(root)
    lb_mac = tkinter.Listbox(frm_R, listvariable=varmac)
    for item in mac:
        lb_mac.insert(tkinter.END, item)
    varmac.set(mac)
    lb_mac.bind('<ButtonRelease-1>')
    lb_mac.pack(side=tkinter.TOP)
    frm_R.pack(side=tkinter.RIGHT)

    frm.pack()
    root.mainloop()

两个封装好后,最后在main里运行

if __name__ == '__main__':
    ip, mac = post()
    view(ip, mac)

最终运行效果

这里写图片描述

随便写写吧,之前一直懒得写博客,加上之前面试的时候知道这些还是挺重要的,记录一下防止以后看代码忘了当时的功能,今后有时间把所有代码都整理一遍全传上来,欢迎一起交流技术上的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值