telnet库的使用
import tkinter as tk
from tkinter import messagebox
import telnetlib
from selenium import webdriver
root = tk.Tk() # 创建窗口
root.title('产测小工具')
root.geometry("300x100+630+80") # 长x宽+x*y
#menubar = Menu(root)
#oot.config(menu=menubar)
#A = Menu(menubar,tearoff=0)
#menubar.add_cascade(label='11',menu=A)
btn1 = tk.Button(root) # 创建按钮,并且将按钮放到窗口里面
btn1["text"] = "语音拨号" # 给按钮一个名称
btn1.pack() # 按钮布局
btn2 = tk.Button(root)
btn2["text"] = "打开页面"
btn2.pack()
btn3 = tk.Button(root) #执行gon的下发指令
btn3["text"] = "设置SN"
btn3.pack()
def SetSn(e):
'''创建弹窗'''
try:
tn=telnetlib.Telnet('192.168.1.1',port=23,timeout=10)
except Exception as e:
print("--------connect is error ------")
#print("1111111111")
name = "tc login:"
name = name.encode()
telecomadmin = "telecomadmin"
telecomadmin = telecomadmin.encode()
password = "nE7jA%5m"
password = password.encode()
Set = "tcapi set gpon_onu SerialNumber PTIN65AB57FB"
Set=Set.encode()
Commit = "tcapi commit gpon"
Commit = Commit.encode()
Save = "tcapi save"
Save = Save.encode()
try:
respon = tn.read_until(name)
except Exception as e:
print("------respon is error -------")
print("the is :",respon)
try:
tn.write(telecomadmin+b'\n')
except Exception as e:
print("---------write error-----")
#tn.read_until('Password:')
tn.write(password+b'\n')
print("111111111")
tn.write(Set+b'\n')
tn.write(Commit+b'\n')
tn.write(Save+b'\n')
messagebox.showinfo("窗口名称", "设置SN完成")
def test(e):
'''创建弹窗'''
try:
tn=telnetlib.Telnet('192.168.1.1',port=23,timeout=10)
except Exception as e:
print("--------connect is error ------")
#print("1111111111")
name = "tc login:"
name = name.encode()
telecomadmin = "telecomadmin"
telecomadmin = telecomadmin.encode()
password = "nE7jA%5m"
password = password.encode()
evcom = "evcom"
evcom=evcom.encode()
di = "di"
di = di.encode()
ir = "ir if=0"
ir=ir.encode()
try:
respon = tn.read_until(name)
except Exception as e:
print("------respon is error -------")
print("the is :",respon)
try:
tn.write(telecomadmin+b'\n')
except Exception as e:
print("---------write error-----")
#tn.read_until('Password:')
tn.write(password+b'\n')
print("111111111")
tn.write(evcom+b'\n')
tn.write(di+b'\n')
tn.write(ir+b'\n')
messagebox.showinfo("窗口名称", "点击成功")
def web(e):
browser = webdriver.Chrome()
data = {"username":"telecomadmin","password":"nE7jA%5m","Language_Flag":"0","selectLanguage":"Chinese"}
browser.get("http://192.168.1.1")
browser.implicitly_wait(10)
browser.find_element_by_id('username').clear() #清除输入框数据
browser.find_element_by_id('username').send_keys('telecomadmin') #输入账号
browser.find_element_by_id('password').clear() #
browser.find_element_by_id('password').send_keys('nE7jA%5m') #输入密码
browser.find_element_by_id('loginbutton').click()
messagebox.showinfo("窗口名称", "点击成功")
btn1.bind("<Button-1>", test) # 将按钮和方法进行绑定,也就是创建了一个事件
btn2.bind("<Button-1>",web)
btn3.bind("<Button-1>",SetSn)
root.mainloop() # 让窗口一直显示,循环
1.2.1 建立连接
建立连接有两种方式:1、实例化函数的时候,将可选参数 host 和 port 传递给构造函数,在这种情况下,到服务器的连接将在构造函数返回前建立。2、使用telnetlib.Telnet类的open函数建立连接。
如以下两种方式是等同的,参数timeout表示阻塞的时间(单位为秒),默认为一直阻塞:
import telnetlib
HOST = "10.102.1.12"
#方式1
tn = telnetlib.Telnet(HOST, port=21, timeout=10)
#方式2
tn = telnetlib.Telnet()
tn.open(HOST, port=21)
1.2.2 发送命令
发送命令使用的是Telnet类的write方法,注意参数buffer是字节字符串byte string,网络数据传输都是使用的byte string,也就是字节流,在发送的字符串前面加一个b,就可以将字符串转换为字节流。
Telnet.write(buffer)
例如,发送一个“exit”命令给服务器,也就是退出telnet连接。
tn.write(b"exit\n")
1.2.3 读取返回数据
Telnet类提供的读取返回结果的函数比较多,这里列举3个:
Telnet.read_until(expected, timeout=None) 读取直到遇到给定字节串 expected 或 timeout 秒已经过去。默认为阻塞性的读。
Telnet.read_all() 读取数据,直到遇到 EOF;连接关闭前都会保持阻塞。
Telnet.read_very_eager() 在不阻塞 I/O 的情况下读取所有的内容(eager)。
1.2.4 关闭连接
关闭telnet连接直接使用Telnet.close()函数,或者发送"exit"命令,以下两种用法是一样的。
tn = telnetlib.Telnet()
#方式1
tn.close()
#方式2
tn.write(b"exit\n")