admin管理员组文章数量:1667288
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 = repile('\[\"(.*)\"\]\,').findall(resp)[0]
ip = repile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])').findall(fenge)#匹配ip
mac = repile(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)
最终运行效果
随便写写吧,之前一直懒得写博客,加上之前面试的时候知道这些还是挺重要的,记录一下防止以后看代码忘了当时的功能,今后有时间把所有代码都整理一遍全传上来,欢迎一起交流技术上的问题。
版权声明:本文标题:Python使用tkinter显示PandoraboxOpenwrt路由器在线用户 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1730091506a1222490.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论