張喜紅,王玉香
(亳州職業技術學院 電子與電氣工程系,安徽 亳州 236800)
移動互聯網時代的快速到來,使得智能手機與人形影不離。高校大學生群體中幾乎人手一部智能手機,已成為他們進行人際交往、信息獲取、休閑娛樂、生活購物等活動的得力工具。智能手機給學生生活帶來了積極意義的同時,也對大學課堂產生了巨大的負面影響,成為當前課堂的“隱形殺手”之一,學生在上課聊QQ,看網絡小說、打游戲的行為極其普遍,隱形逃課之風日趨高漲。有些學校為了制止這些不良行為,采取上課之前強制收繳手機等措施。然而,在大力推行“智慧課堂”的時代下,采用如此霸道的監管方式顯得不盡人意,如:學生在課堂上可能需要應用智能手機進行檢索文獻、共享資源等學習行為[1-3]。由此可見,探索一套有效的監管方式,使智能手機由課堂“隱形殺手”變為“課堂助手”,極具意義。
基于上述背景,以亳州職業技術學院現有多媒體教室的硬件資源為基礎,兼顧課堂“藍墨云”班課的使用,基于Python語言設計了一款課堂手機輔助管理系統,建立了通過無線路由局域網對學生手機終端行為的監管、考評、激勵機制,同時實現了教師按需控制局域網接入Internet網絡。
系統的整體組成結構如圖1所示,由教師電腦終端、無線路由器、學生智能手機終端組成。無線路由器WLAN端口接入Internet網絡,教師電腦通過有線或無線方式接入無線路由器,學生智能手機終端通過Wifi連接到無線路由器,組建班級局域網。系統設計的基本思路是:智能手機同一時段內只能選擇WLAN或數據流量訪問Internet網絡,即學生手機加入班級局域網指定的Wifi無線路由器后,只能通過此無線路由訪問Internet互聯網,要想通過其他網絡或數據流量訪問Internet互聯網,必須先斷開與班級局域網的連接。同時,學生智能手機網卡的MAC地址具全球唯一性,無線路由器的管理頁面大多給出了當前接入設備的MAC地址信息列表。因此,在事先建立班級成員手機MAC地址統計信息表的基礎上,通過掃描無線路由器接入設備的MAC地址信息列表,便可實時監控學生手機與班級局域網的連接狀態,進而及時把握學生的行為動向。
具體實施流程如下:
①課前教師事先統計班級學生姓名或學號與其手機MAC地址的對應信息表。
②上課時,要求班級成員通過密鑰接入指定的無線路由,與教師電腦組建局域網。
③教師電腦端通過課堂手機輔助管理系統軟件,按1min時間間隔,周期性自動提取接入無線路由器的學生手機MAC地址列表信息,并與步驟①中的MAC地址信息表進行比對,統計每位學生在一個課時內連入指定無線路由網的次數。
④課程結束后,將步驟③中得到的每課時連網次數直觀展示,并按一定的比例納入平時成績考評體系,進而激勵學生課堂規范上網。
⑤當教師需要使用“藍墨云”等Internet互聯網軟件與學生開展互動教學時,教師可通過課堂手機輔助管理系統軟件實時開啟與Internet互聯網的連接。同時,為了防止學生瀏覽與課堂無關的Internet互聯媒體,互動結束后可實時斷開與Internet互聯網的連接。

圖1 系統組成示意圖
鑒于手機監管系統軟件的GUI界面不是很復雜,GUI界面設計采用Python語言提供的Tkinter圖形界面模塊進行設計[4]。課堂手機監管系統的GUI主界面如圖2所示,界面主要由文本標簽控件、按鈕控件及文本輸入控件等三類控件構成。各標簽控件的作用相對簡單,用于顯示軟件的使用步驟說明。“路徑選擇”按鈕用于選擇設置班級學生智能手機MAC地址信息統計表;“啟動監控”與“停止監控”按鈕用于啟動或停止系統掃描并統計學生智能手機接入無線路由網的次數;“查看結果”按鈕用于課堂結束后,向學生展示在線次數的統計結果;“連接網絡”與“斷開網絡”按鈕用于教師實時控制無線路由網絡接入與斷開Internet互聯網。
使用Tkinter進行GUI界面開發,主要包括窗口實例化、控件定義、控件屬性設置及控件布局等步驟。窗口的實例化通過Tk()類實現,如master = Tk()即可創建一個名為self. master的窗口容器。當窗口創建好后,可在窗口中使用title0 = Label(master, text='請按如下說明使用本軟件', font='20', bg='white', fg='blue')格式語句添加文本標簽控件,第一項參數用于指定控件的容器為master窗口容器,其他參數分別為顯示的文本內容、字體大小、背景色、文字顏色。按鈕控件可使用link_internet = Button(master, text='停止監控', command= open_internet)格式語句添加,第一項參數同樣也是指定控件的容器,text參數為按鈕顯示的文本內容,command參數是按鈕的事件命令,open_internet為自定義的按鈕功能函數。各控件在容器如何布局,通過Tkinter提供的pack()、grid()兩種方法實現:pack()用于實現控件自上到下的布局;grid()用于實現在子容器中按表格布局。如:link_internet.grid(row=0, column=0)可將link_internet控件布局到當前容器0行、0列的位置。

圖2 GUI界面圖
課堂手機監管系統軟件獲取當前接入無線路由器設備的Mac地址列表,或管理Internet互聯網的接入或斷開,都需模擬瀏覽器通過HTTP請求訪問路由器的各個管理頁面。requests或selenium模塊是Python實現HTTP請求常用方法[5-6]。requests對靜態交互網頁的請求與獲取實現較為簡單,但對于動態網頁需進行抓包分析后設計請求方式,實現相對困難。Selenium是一款用于Web自動化測試的工具包,它提供的webdriver工具可模擬人工操控瀏覽器請求網頁,結合無界面的PhantomJS瀏覽器,可實現自動化請求網頁[7]。經實際測試,鑒于通過requests請求無線路由器的URL地址返回為空,最終決定采用Selenium與PhantomJS模擬人工操作本地瀏覽器的方式,實現無線路由器的無界面控制管理。以登錄無線路由器管理后臺為例,其關鍵代碼如下所示:
from selenium import webdriver
import time
password = '填入你自己的密碼'
Routers_URL= 'http://192.168.11.1/'
My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')
My_driver.get(Routers_URL)#模擬請求路由器管理后臺登錄頁面
time.sleep(1)#等待響應近回所需的時間
My_driver.find_element_by_id('pcPassword').send_keys(password) #模擬在密碼欄輸入登陸密碼
My_driver.find_element_by_id('logIn').click()#模擬單擊登陸按鈕事件
其中My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')語句用于指定無界面瀏覽器PhantomJS的驅動程序安裝路徑;find_element_by_id('pcPassword')語句用于從網頁中定位光標到指定的位置;send_keys(password)用于向指定的位置填寫相應的內容;click()用于模擬鼠標單擊指定位置的操作;time.sleep(1)用于實現休眠等待1s,具體時長需依據網頁返回的響應速度決定。
連入無線路由器MAC地址列表信息的提取過程,可通過如下步驟實現:①通過2.2節中的無界面自動化WEB操控方式,進入到無線路由器的MAC信息列表頁面,獲得MAC信息列表頁網頁源碼。②從獲得的MAC信息列表網頁源碼中,定位、過濾、提取每個接入設備的MAC信息。MAC信息列表的定位、過濾、提取采用Python的正則表達式實現,關鍵實現代碼如下:
#定位到MAC地址列表區域,提取所有接入設備MAC地址
R_Mac_List = My_driver.find_element_by_id('wanmac')
now_mac_text= R_Mac_List.text#將MAC地址列表信息轉化為文本
now_mac=re.findall(r"[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}"
r":[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}",now_mac_text) #正則表達式匹配
去除網絡連接存在故障的情況,在單位時間內統計學生手機MAC地址在無線路由網絡的存在次數,在一定程度上能夠反映學生是否接入其他網絡,訪問與課堂無關的信息情況。具體的實現方法是:以一定的時間間隔,周期性的將已知學生姓名的手機MAC數據表與當前獲得的MAC信息列表進行對比,若當前獲得的MAC信息列表中存在某已知學生姓名的手機MAC地址信息,則將此學生的簽到次數加1。關鍵實現代碼如下,其中now_mac為當前接入路由器的所有MAC地址;self.student_Mac為事先已知學生姓名的手機MAC地址數組;self.timeCount為簽到計數器。
def conect_count(self,now_mac):
for i in range(len(now_mac)):
for j in range(len(self.timeCount)):
if now_mac[j] == self.student_Mac[j]:
self.timeCount[j] = self.timeCount[j] + 1;
else:
continue
為了及時將簽到次數以直觀的形式呈現給學生,對學生課堂規范使用手機起到激勵、警示作用,課堂教學結束時,需點擊圖2所示GUI主界面上的“查看結果”按鈕,展示本堂課學生的在線次數。與“查看結果”按鈕對應的結果展示功能函數,采用Python語言提供的matplotlib繪圖工具包實現[8],結果展示方式采用柱狀圖模式,具體實現代碼如下:
def Display_result(self):
try:
plt.figure(u'統計結果')
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.size'] = 10
plt.xlabel(u'學生姓名')
plt.ylabel(u"在線次數")
plt.bar(range(len(self.student_name)),self.timeCount)
plt.xticks(range(len(self.student_name)),self.student_name,rotation=0)
plt.title(u"在線次數統計結果",fontproperties = 'SimHei', fontsize = 20)
plt.show()
except:
messagebox.showinfo('提示', '運行錯誤!') # 顯示對話框
教師電腦采用CPU型號為Intel(R) Core(TM) i3-4160 3.6GHz,內存為4GB,操作系統為Win7-64位的宏機臺式電腦,無線路由器選用迅捷FW450R,學生人數24名,在12m*7m大小的教室內按圖1所示的拓撲結構組建網絡,以45min為一課時,測試系統的各項功能。24名受測試學生在線次數統計結果如圖3所示,去除網絡連接故障因素,可知6,10,16,23,26,17號學生在課中接入班級無線互聯網的次數較低,一定程度上客觀反映了這些學生在課中有不規范使用手機的行為;其余學生在課中的在線次數達40次以上,去除瀏覽手機本地媒體的行為,基本上可排除接入其他網絡瀏覽與課堂無關資源的情況。因此,可將此項數據按一定的權重納入平時成績的評定體系,激勵、警示學生課中規范使用手機。同時,教師通過軟件控制班級無線局域網接入Internet互聯網的實驗結果顯示,在點擊“連接網絡”按鈕后,整個班級局域網可在3~5s的時間內實時接入Internet互聯網;在點擊“斷開網絡”按鈕后,整個班級局域網在1~2s的時間內實時斷開與Internet互聯網的連接。

圖3 學生手機在線次數統計結果柱狀圖