馮俊昌


摘 要: 目前桌面使用的上網客戶端軟件大部分運行在windows平臺,而隨著Linux在桌面系統中所占份額日益提高,局域網內Linux用戶的逐漸增多,Linux桌面的上網客戶端逐漸不能滿足用戶的需求,這在很大程度上限制了用戶使用Linux的積極性。 本文設計并實現了一個在Linux桌面系統上可以登錄局域網認證服務器的客戶端軟件,解決了目前Linux桌面用戶無法上網的難題,在局域網環境下可以很好的運行。
關鍵詞: Linux;認證服務器;局域網;客戶端
中圖分類號:TP393 文獻標識號:A 文章編號:2095-2163(2015)01-
Abstract: With the rapid development of Linux, the number of users who use Linux in LAN increases. The condition that a majority of client software only suit Windows OS restricts the users enthusiasm for Linux. A client software based on Linux OS to connect Internet is designed and developed in this paper. It solves the problem the Linux OS cant connect Internet and works well in LAN.
Keywords: Linux; Authentication Server; LAN; Client
0引 言
目前,大型的局域網都采用認證用戶的上網機制,即客戶機在訪問互聯網時必需要登錄到認證服務器,通過檢查用戶名和口令來決定局域網用戶對互聯網能否成功訪問。具體來說,就是在局域網用戶計算機上運行客戶端程序,向認證服務器發送認證信息,認證通過后,才可以訪問互聯網。
由于用戶計算機大部分采用Windows桌面系統,因此絕大多數公司開發的客戶端軟件都是面向Windows桌面的。但是隨著Linux桌面用戶的逐漸增多,因而亟需一個可以運行在Linux桌面上的客戶端軟件,以滿足廣大用戶的上網需求。
1工作原理
經過分析可知,局域網采用客戶端-認證服務器的方式實施登陸,其首要考慮的因素就是方便管理和收費。
客戶端軟件在用戶計算機上收集用戶名和口令,以及IP地址和MAC地址等后,即將這些信息以特定的格式封裝成報文,發送給認證服務器。認證服務器收到這些信息后,就在其數據庫里查找該用戶是否欠費的記錄,如果該用戶不曾欠費,就發送一個登錄成功的信息給用戶,隨后通知路由器允許該用戶接入互聯網;如果沒有該用戶的記錄或者該用戶欠費,就發送一個認證失敗的信息返回給用戶,路由器也會阻止該用戶通過,從而不能訪問互聯網。
在客戶端方,主要的工作就是收集用戶的用戶名和口令,以及IP地址和MAC地址等信息,而后封裝成服務器可以識別的格式,為了防止篡改和冒充,還需要提供源認證功能,并發送給認證服務器??蛻舳私邮照J證服務器發送的確認信息,向用戶顯示登錄成功與否的消息。為了讓認證服務器更好地管理上網的客戶機,客戶端軟件還應該定期向服務器發送存活信息,告知認證服務器自己的在線狀態,以便服務器更有針對性地維護列表[1-2]。
2設計上網客戶端
使用網絡嗅探軟件Wireshark,對Windows客戶端與認證服務器之間的通信量進行抓包并分析,由此得到了本單位認證服務器所采用的通信協議的報文格式。
根據認證服務器的工作方式,研究設計的Linux上網客戶端包括6個模塊:用戶信息收集模塊、報文封裝模塊、信息解釋模塊、?;钅K、發送模塊和接收模塊, 其總體框架如圖1所示。
由圖1可見,各個模塊的主要功能如下:
(1) 用戶信息收集模塊
① 用戶輸入用戶名、口令以及登錄請求;
② 用戶輸入更改的新口令以及更改口令請求;
③ 用戶提交的注銷請求;
④ 收集用戶主機的IP地址和MAC地址等信息。
(2) 報文封裝模塊
① 按照認證服務器規定的報文格式將收集到的用戶信息進行封裝;
② 采用合適的算法添加認證數據。
(3) ?;钅K
定期收集認證信息,并封裝成?;顖笪摹?/p>
(4) 信息解釋模塊
① 提取服務器響應信息中的狀態碼;
② 按照服務器響應信息中的狀態碼向用戶顯示相關的信息(登錄成功與否,口令修改,上網時間以及費用)。
(5)發送模塊
從報文封裝模塊和保活模塊接收報文,調用socket函數發送到認證服務器。
(6) 接收模塊
① 接收從認證服務器發來的報文;
② 將報文遞交給上層模塊(保活模塊或信息解釋模塊)。
3代碼實現
根據OSI/RM的網絡參考模型,客戶端軟件工作在應用層。研究采用廣泛使用的C語言,通過socket編程直接調用下層的TCP/IP協議棧[3-5]。
3.1 認證過程
(1) 登錄過程
當用戶設置好IP地址、DNS服務器地址等值項后,由collect_info()函數讀取這些參數(包括IP地址、MAC地址、DNS服務器地址、默認網關等),再使用SHA1函數把這些本機信息以及用戶名和口令生成一個160bits的散列值,而后由log_in()函數將這些信息以及散列封裝成一個登錄報文,并由send()函數發送到認證服務器。此后,客戶端將一直處于接收阻塞狀態,直到認證服務器返回服務器響應報文。根據響應報文的類型,客戶端可分別作出如下各類反應:
① LOG_OK,登錄成功,則認證服務器通過了該客戶機的認證,可以上網;
②LOG_PASSWD_ERR,口令錯誤,認證服務器拒絕對該客戶機的認證;
③ LOG_USER_ERR,沒有該用戶名,認證服務器拒絕該客戶機的認證請求。
(2) 修改口令過程
password_change()函數收集用戶名和新口令以及相應的SHA1散列值,封裝成更改口令報文,并由send()函數發送到認證服務器。
(3) 注銷過程
log_out()函數把collect_info()函數收集到的客戶機信息以及SHA1函數計算的散列值封裝成注銷報文,也由send()函數發送到認證服務器。
(4) 主機?;钸^程
keep_live()函數封裝?;顖笪?,每隔180秒定期由send()函數發送到認證服務器,向認證服務器告知自身的存活。
3.2報文的數據結構
(1) 登錄用戶信息報文
認證算法采用常見的SHA1算法。
3.3 安全性
為了增加安全,減少非法篡改和盜用,研究將在客戶端登陸的全過程采用SSL保護。在認證服務器上創建根證書,客戶端在初次安裝時就選擇下載該證書,并將該證書添加到“可信任的根證書”存儲區域??蛻舳伺c認證服務器之間的通信則選用128位的AES加密,保證了客戶端與認證服務器之間通信的機密性。
4結束語
Linux環境下的上網客戶端軟件,主要是根據認證服務器與用戶主機之間已有的協議,通過設計恰當的模塊,定義合適的數據結構,采用C語言的socket網絡編程,很好地解決了Linux桌面用戶的上網問題。
參考文獻:
[1]楊云江. 計算機網絡管理技術[M]. 北京:清華大學出版社,2005.
[2]林云,施榮華. 校園網管理費用計算方法的改進[J]. 長沙鐵道學院學報(社會科學版),2004(4):227-230.
[3] W.Richard Stevens , Bill Fenner. UNIX網絡編程[M]. 北京:清華大學出版社,2006.
[4]馮慶曦. 計算機網絡管理技術探析[J]. 電腦編程技巧與維護,2012(10):48-49+52.
[5]張海光. 淺談Linux下的多線程編程[J]. 中國科技信息,2006(3):56-57.