冯俊昌
摘 要: 目前桌面使用的上网客户端软件大部分运行在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地址等信息,而后封装成服务器可以识别的格式,为了防止篡改和冒充,还需要提供源认证功能,并发送给认证服务器。客户端接收认证服务器发送的确认信息,向用户显示登录成功与否的消息。为了让认证服务器更好地管理上网的客户机,客户端软件还应该定期向服务器发送存活信息,告知认证服务器自己的在线状态,以便服务器更有针对性地维护列表[1-2]。
2设计上网客户端
使用网络嗅探软件Wireshark,对Windows客户端与认证服务器之间的通信量进行抓包并分析,由此得到了本单位认证服务器所采用的通信协议的报文格式。
根据认证服务器的工作方式,研究设计的Linux上网客户端包括6个模块:用户信息收集模块、报文封装模块、信息解释模块、保活模块、发送模块和接收模块, 其总体框架如图1所示。
由图1可见,各个模块的主要功能如下:
(1) 用户信息收集模块
① 用户输入用户名、口令以及登录请求;
② 用户输入更改的新口令以及更改口令请求;
③ 用户提交的注销请求;
④ 收集用户主机的IP地址和MAC地址等信息。
(2) 报文封装模块
① 按照认证服务器规定的报文格式将收集到的用户信息进行封装;
② 采用合适的算法添加认证数据。
(3) 保活模块
定期收集认证信息,并封装成保活报文。
(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保护。在认证服务器上创建根证书,客户端在初次安装时就选择下载该证书,并将该证书添加到“可信任的根证书”存储区域。客户端与认证服务器之间的通信则选用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.