Linux安全网关接口SGI的设计与实现
嵌入式Linux学习笔记(五)通讯协议制定和下位机代码实现

嵌⼊式Linux学习笔记(五)通讯协议制定和下位机代码实现⽬录 通讯协议可以理解为约束多设备通讯的⼀套规则,像Modbus,TCP/IP, BLE都是在⽣产⽣活常⽤的协议。
不过协议落实到实际应⽤后,就可以理解为对数据的结构化处理,我之前写的串⼝点亮LED的实现就涉及了简单的协议制定,对于嵌⼊式Linux来说,那⼀套协议当然也可以实践,但是那套协议有个重要的缺陷,协议内部从起始端的数据接收,⼀直到发送端的数据接收,都是和硬件强耦合的,这就造成如果我们由多种途径修改内部数据,协议很难被复⽤,另外每⼀次最后的执⾏都是直接操作硬件,当然只有串⼝控制时没有问题,但当有多个渠道(如⽹络,CAN,BLE等模块)同时操作硬件时,涉及硬件的同步问题繁琐且很难约束,因此本节就改进之前的协议,进⾏代码的实现。
参考资料 1. 2.《C++ Primer Plus》协议制定 协议的制定在⼤致的数据发送和返回数据结构上可以与原有的协议⼤致⼀致。
上位机发送指令包含起始位,地址位(⽤于多机通讯),数据长度(指⽰内部后⾯的数据长度),实际数据,CRC校验位这些基础结构,不过增加了数据编号位,它是2字节的随机数,在处理完成后可以⽤于上位机验证返回的数据是否正常,不过对⽐可以发现,原先协议⾥⾯的指令不在上位机数据结构,这个后⾯会提到。
下位机返回指令也是起始位,地址位,ACK应答状态,数据长度,数据区和CRC校验位,同时包含编号⽤于上位机的校验, 上位机发送数据结构: 下位机返回数据结构: 确认了通讯的结构后,下位机代码就可以实现了,其中接收数据代码如下:1int protocol_info::check_receive_data(int fd)2 {3int nread;4int CrcRecv, CrcCacl;5struct req_frame *frame_ptr;67/*从设备中读取数据*/8 nread = this->device_read(fd, &this->rx_ptr[this->rx_size],9 (this->max_buf_size-this->rx_size));10if(nread > 0)11 {12this->rx_size += nread;13 frame_ptr = (struct req_frame *)this->rx_ptr;1415/*接收到头不符合预期*/16if(frame_ptr->head != PROTOCOL_REQ_HEAD) {17 USR_DEBUG("No Valid Head\n");18this->rx_size = 0;19return RT_FAIL;20 }2122/*已经接收到长度数据*/23else if(this->rx_size > 5){24int nLen;2526/*设备ID检测*/27if(frame_ptr->id != PROTOCOL_DEVICE_ID)28 {29this->rx_size = 0;30 USR_DEBUG("Valid ID\n");31return RT_FAIL;32 }3334/*获取接收数据的总长度*/35this->rx_data_size = LENGTH_CONVERT(frame_ptr->length);3637/*crc冗余校验*/38 nLen = this->rx_data_size+FRAME_HEAD_SIZE+CRC_SIZE;39if(this->rx_size >= nLen)40 {41/*计算head后到CRC尾之前的所有数据的CRC值*/42 CrcRecv = (this->rx_ptr[nLen-2]<<8) + this->rx_ptr[nLen-1];43 CrcCacl = this->crc_calculate(&this->rx_ptr[1], nLen-CRC_SIZE-1);44if(CrcRecv == CrcCacl){45this->packet_id = LENGTH_CONVERT(frame_ptr->packet_id);46return RT_OK;47 }48else{49this->rx_size = 0;50 USR_DEBUG("CRC Check ERROR!. rx_data:%d, r:%d, c:%d\n", this->rx_data_size, CrcRecv, CrcCacl);51return RT_FAIL;52 }53 }54 }55 }56return RT_EMPTY;57 }View Code 因为是嵌⼊式Linux开发,因此推荐使⽤C++, 封装可以让代码结构更加清晰,从代码的实现可以看到实现包含:硬件的数据接收,起始位检测,数据编号的获取,以及后续数据的接收和数据的CRC校验,⾄于发送数据,则主要是创建发送数据的接⼝,代码如下:1/**2 * ⽣成发送的数据包格式3 *4 * @param ack 应答数据的状态5 * @param size 应答有效数据的长度6 * @param pdata 应答有效数据的⾸指针7 *8 * @return 执⾏执⾏的结果9*/10int protocol_info::create_send_buf(uint8_t ack, uint16_t size, uint8_t *pdata)11 {12 uint8_t out_size, index;13 uint16_t crc_calc;1415 out_size = 0;16this->tx_ptr[out_size++] = PROTOCOL_ACK_HEAD;17this->tx_ptr[out_size++] = PROTOCOL_DEVICE_ID;18this->tx_ptr[out_size++] = (uint8_t)(this->packet_id>>8);19this->tx_ptr[out_size++] = (uint8_t)(this->packet_id&0xff);20this->tx_ptr[out_size++] = ack;21this->tx_ptr[out_size++] = (uint8_t)(size>>8);22this->tx_ptr[out_size++] = (uint8_t)(size&0xff);2324if(size != 0 && pdata != NULL)25 {26for(index=0; index<size; index++)27 {28this->tx_ptr[out_size++] = *(pdata+index);29 }30 }3132 crc_calc = this->crc_calculate(&this->tx_ptr[1], out_size-1);33this->tx_ptr[out_size++] = (uint8_t)(crc_calc>>8);34this->tx_ptr[out_size++] = (uint8_t)(crc_calc&0xff);3536return out_size;37 }View Code 这部分即为通讯相关的结构数据实现,通关协议的发送和接收结构的剥离,此时我们已经能够处理实际的数据,下⾯也是主要改进内容。
网络监听系统的设计与实现

网络监听系统的设计与实现简介:随着计算机网络技术的迅速发展,网络的安全问题也显得越发重要。
网络监听技术是系统安全领域内一个非常敏感的话题,也是一项重要的技术,具有很强的现实应用背景。
网络监听是网络监测、负载分析等管理活动常用的方法,同时也是黑客非法窃取信息的手段。
网络监听工具通过网络传输介质的共享特性实现抓包,获得当前网络的使用状况,为网络管理员对网络中的信息进行实时的监测、分析提供一个合适的工具;同时也让黑客截获本网段的一些敏感信息,威胁网络安全。
目录论文总页数:30页1引言 (1)1.1课题背景 (1)1.2研究现状 (2)2网络监听技术综述 (3)2.1网络监听概念 (3)2.2以太网监听的原理 (3)2.3WinPcap的原理 (4)2.4综述 (7)3相关网络协议的分析 (7)3.1网络的原理体系结构 (7)3.2网络协议的分析与实现 (8)3.2.1链路层 (8)3.2.2网络层 (9)3.2.3传输层 (12)3.3小结 (16)4局域网监听系统的设计及实现 (16)4.1局域网监听系统的设计 (17)4.1.1功能设计 (17)4.1.2模块设计 (17)4.2局域网监听系统程序的实现 (19)4.2.1数据包的捕获 (19)4.2.2数据包的分析 (21)4.2.3数据流量的统计 (23)4.2.4实现过程中的难点和解决 (24)4.3系统程序运行 (25)结论 (27)参考文献 (27)致谢 (29)声明 (30)1引言随着Internet的迅猛发展和信息社会的到来,网络已经影响到社会的政治、经济、文化、军事和社会生活的各个方面。
以网络方式获取信息和交流信息已成为现代信息社会的一个重要特征。
同时,随着人们对网络信息系统依赖的日益增强,网络正在逐渐改变人们的工作方式和生活方式,成为当今社会发展的一个主题。
但必须看到,紧随信息化发展而来的网络安全问题日渐凸出,如果不很好地解决这个问题,必将阻碍信息化发展的进程。
linux设备sg生成规则 -回复

linux设备sg生成规则-回复Linux设备sg生成规则引言:Linux是一种广泛使用的开源操作系统,被用于各种设备和平台。
在Linux 中,设备驱动程序是与硬件交互的关键组件之一。
为了正确识别和管理设备,Linux内核实施了一系列的设备名称生成规则,其中之一是sg(SCSI generic)设备名称生成规则。
本文将详细解释Linux设备sg生成规则,包括sg设备的概述、生成规则和使用方式。
第一部分:概述1.1 什么是sg设备?sg设备是指与SCSI(Small Computer System Interface)接口相关的设备,在Linux系统中,sg设备提供了一种通用的接口来与SCSI设备进行通信和交互。
sg设备可以用于执行各种SCSI命令,如读取、写入、格式化等。
1.2 为什么需要sg设备?在Linux中,很多设备都基于SCSI接口,如硬盘驱动器、光盘驱动器、磁带驱动器等。
通过使用sg设备,我们可以直接与这些SCSI设备进行通信,而无需通过其他设备名称来转发命令。
第二部分:sg设备的生成规则2.1 设备名称规则在Linux系统中,每个设备都有一个唯一的设备名称。
sg设备的名称规则如下:- 主名称为“sg”- 后缀为递增的数字例如,sg0、sg1、sg2等。
2.2 设备识别规则Linux内核会根据设备的类型和连接顺序来识别并分配sg设备名称。
具体规则如下:- 每个SCSI总线上的第一个设备将被分配为sg0- 以此类推,后续设备将依次递增分配sg设备名称例如,第一个SCSI总线上的设备为sg0,第二个SCSI总线上的设备为sg1,以此类推。
第三部分:使用sg设备3.1 sg设备的用途sg设备可以用于执行各种SCSI命令,包括但不限于:- 读取、写入数据- 执行格式化操作- 获取设备状态信息- 执行控制操作等3.2 sg设备的操作方式通过使用sg设备,我们可以直接向SCSI设备发送SCSI命令,并通过读取sg设备的响应来获取操作结果。
网口绑定的方法

我们在测试中会经常遇到各种需要网口绑定的情况,比如交换机网口绑定、服务器网口绑定(windows、linux系统),这里对交换机及服务器的网口绑定进行简单介绍。
一、交换机网口绑定。
交换机绑定主要有两种方式:1.登录交换机网页上进行设置。
优点:设置简单方便缺点:有些交换机并没有网页设置,或者部分交换机网页上设置存在问题(该现象我们在测试中曾近多次遇到)。
2.使用命令进行设置。
优点:如果熟练掌握命令,设置起来也比较快,且一般设置不会存在什么问题。
缺点:对不熟悉命令的人来说,使用起来比较麻烦。
登录网页设置比较简单,这里不做多的介绍,我们主要介绍使用命令来绑定网口的方法。
1)首先,我们需要配置超级终端:在windows中的开始菜单--附件---通讯---超级终端com1通讯终端串行口通信参数可设置如右:速率—9600bps、八位数据位、一位停止位、无奇偶校验位、无流控。
(一定要配置“无流控”)。
交换机的用户名:admin 密码:123456,连接随机带的串口线和交换机的控制端口。
2)其次,我们进行网口绑定,操作步骤如下:(共4步)a.登陆,连接(显示提示命令)User Access VerificationUsername: adminPassword: 123456(不会显示)Welcome to Hikvison IS-VSW2216 Ethernet SwitchSwitch>chineseSwitch>?chinese -- 中文帮助信息connect -- 打开一个向外的连接deal-config -- 处理startup-configdisconnect -- 断开活跃的网络连接enable -- 进入特权方式english -- 英文帮助信息enter -- 进入特权方式exit -- 退回或退出help -- 交互式帮助系统描述history -- 查看历史quit -- 退回或退出resume -- 恢复活跃的网络连接ssh -- 打开一个ssh连接telnet -- 打开一个telnet连接where -- 显示所有向外的telnet连接创建逻辑端口的过程是这样的,首先调用命令创建逻辑端口,然后在物理端口配置界面中,将物理端口添加到逻辑端口,之后在配置逻辑端口的负载均衡方式,最后可以调用show命令来查看配置的逻辑端口的详细情况b.创建逻辑端口(对应于物理端口而言),并将物理端口添加到逻辑端口Switch>enable (进入特权模式)Switch#config (进入配置命令)Switch_config#interface ? (进入配置端口命令,可选择物理端口,逻辑端口)Switch_config#interface Port-aggregator 1 (选择逻辑端口1)Switch_config_p1#exit (退出逻辑端口1)//进入实际的物理端口,将物理端口添加到逻辑端口Switch_config#interface GigaEthernet 0/1 (进入千兆网卡物理端口1 )Switch_config_g0/1# (到了g0/1端口上)Switch_config_g0/1#aggregator-group 1 mode static (添加该物理端口到逻辑端口1,模式为static)Switch_config_g0/1# exit (退出物理端口1)//将第二个端口加入到逻辑端口1Switch_config#interface GigaEthernet 0/2 (切换到物理端口2)Switch_config_g0/2#aggregator-group 1 mode static (将第二个物理通道加到逻辑端口1)//查看逻辑端口的信息Switch_config#show aggregator-group 1 detail//配置逻辑端口的负载均衡方式Switch_config#aggregator-group load-balance both-ip (有三种方式可选把both-ip 换成“?”可以查看可选的几种方式)//查看所有配置了的逻辑端口总的情况Switch_config#show aggregator-group summaryc. 保存,重启退出到switch行,执行write命令,将配置信息保存到交换机上,然后reboot交换机Switch#write (将配置的信息保存到交换机内部配置文件中去)Switch #reboot至此,交换机的网口绑定已经完成d.删除配置的逻辑端口中的物理端口方法(用在添加错误之后删除,或者修改原有的物理端口)(用于取消交换机的配置)//先进入到物理端口g0/1Switch_config#interface GigaEthernet 0/1//删除其配置的逻辑端口情况Switch_config_g0/1#no aggregator-group//退出物理端口1Switch_config_g0/1# exit//进入端口物理端口g0/2Switch_config#interface gigaEthernet 0/2//删除其配置的逻辑端口Switch_config_g0/2#no aggregator-group这样就删除了逻辑端口1所配置的物理端口了Switch_config_g0/2#exitSwitch_config#show aggregator-group summary二、服务器绑定,主要按照操作系统分为两种:1.windows操作系统的服务器网口绑定。
中国联合通信公司短消息网关系统接口协议(SGIP)1.2版

中国联合通信公司短消息网关系统接口协议(SGIP)版本1.2中国联合通信公司二零零一年十月目录1概述 (1)1.1协议说明 (1)1.2适用范围 (1)1.3参考资料 (1)1.4术语表 (1)2系统体系结构 (3)2.1消息从本地SMSC到本地SP (4)2.2消息从本地SP到本地SMSC (4)2.3消息从本地SMSC到异地SP (4)2.4消息从本地SP到异地SMSC (4)2.5路由选择 (4)3通信流程 (6)3.1专用SGIP方式 (6)3.2通用HTTP方式 (6)3.3通信节点编号规则 (7)3.4序列号的定义 (7)3.5通信的安全性 (8)3.6用户鉴权 (8)3.6.1被叫方付费 (8)3.6.2SP付费 (8)3.6.3第三方付费 (8)3.7SP与SMG的通信 (9)3.7.1通用HTTP方式 (9)3.7.1.1从SP到SMG的命令 (9)3.7.1.2从SMG到SP的命令 (10)3.7.2专用SGIP方式 (10)3.7.2.1通信初始化 (10)3.7.2.2通信过程 (10)3.7.2.3通信结束 (11)3.7.2.4故障处理 (12)3.7.2.5从SP到SMG的消息 (12)3.7.2.6从SMG到SP的消息 (13)3.8SMG与SMG之间的通信 (13)3.8.1通信初始化 (14)3.8.2通信过程 (14)3.8.3通信结束 (14)3.8.4故障处理 (14)3.8.5两个SMG之间的消息 (15)3.9SMG与GNS之间的通信 (15)3.9.1通信初始化 (15)3.9.2通信过程 (15)3.9.3通信结束 (16)3.9.4故障处理 (16)3.9.5从SMG到GNS的消息 (16)3.9.6从GNS到SMG的消息 (16)4消息定义 (18)4.1基于通用HTTP的消息定义 (18)4.1.1Submit操作 (18)4.1.1.1Submit命令的请求内容 (18)4.1.1.2Submit命令的应答内容 (19)4.1.2Deliver操作 (20)4.1.2.1Deliver命令的请求内容 (20)4.1.2.2Deliver命令的应答内容 (20)4.1.3Report操作 (21)4.1.3.1Report命令的请求内容 (21)4.1.3.2Report命令的应答内容 (21)4.1.4UserRpt操作 (22)4.1.4.1UserRpt命令的请求内容 (22)4.1.4.2UserRpt命令的应答内容 (22)4.1.5Trace操作 (22)4.1.5.1Trace命令的请求内容 (22)4.1.5.2Trace命令的应答内容 (23)4.2基于专用SGIP的消息定义 (23)4.2.1数据类型 (23)4.2.2消息头的格式 (24)4.2.3消息体的格式 (24)4.2.3.1Bind操作 (24)4.2.3.2Unbind操作 (25)4.2.3.3Submit操作 (25)4.2.3.4Deliver操作 (27)4.2.3.5Report操作 (28)4.2.3.6AddSP操作 (28)4.2.3.7ModifySP操作 (29)4.2.3.8DeleteSP操作 (30)4.2.3.9QueryRoute操作 (30)4.2.3.10AddTeleSeg操作 (31)4.2.3.11ModifyTeleSeg操作 (32)4.2.3.12DeleteTeleSeg操作 (32)4.2.3.13AddSMG操作 (33)4.2.3.14ModifySMG操作 (34)4.2.3.15DeleteSMG操作 (34)4.3鉴权消息定义 (35)4.3.1CheckUser命令的语法 (35)4.3.2CheckUser_Resp应答的语法 (35)4.3.3UserRpt命令的语法 (35)4.3.4UserRpt_Resp应答的语法 (35)4.4测试消息定义 (36)4.4.1Trace命令的语法 (36)4.4.2Trace_Resp应答的语法 (36)5常量定义 (37)5.1消息ID定义 (37)5.2错误码定义 (37)5.3计费类别定义 (38)5.4R EPORT 状态与短消息状态的映射 (38)附录1: 全网路由表的格式示范 (39)附录2: 本地路由表的格式示范 (40)附录3: HTTP承载方式示范 (41)1概述1.1协议说明本协议是SMG和SP之间、SMG和GNS之间、以及SMG和SMG之间的接口协议,简称SGIP。
linux vlan子接口原理

linux vlan子接口原理Linux VLAN子接口原理概述:VLAN(Virtual Local Area Network)是一种虚拟局域网技术,可以将一个物理局域网划分成多个逻辑上独立的虚拟局域网。
Linux 操作系统提供了对VLAN的支持,可以通过创建VLAN子接口来实现对虚拟局域网的划分和管理。
本文将介绍Linux VLAN子接口的原理和工作方式。
VLAN的基本概念:VLAN是一种将多个LAN划分为逻辑上独立的虚拟局域网的技术。
它通过在数据帧的头部添加一个特殊的标记(VLAN标签)来标识不同的虚拟局域网。
这样可以在同一物理网络中实现不同虚拟局域网之间的隔离和通信。
VLAN标签的格式:VLAN标签是一个4字节的字段,包含了VLAN的ID(VLAN ID)和优先级(Priority)。
VLAN ID是12位的字段,用于标识不同的虚拟局域网,支持的VLAN ID范围是1-4094。
优先级是3位的字段,用于标识数据帧的优先级。
Linux的VLAN支持:Linux操作系统提供了对VLAN的原生支持,可以通过内核模块8021q来实现VLAN的功能。
在大多数Linux发行版中,该模块默认已经加载。
VLAN子接口的创建:在Linux中,可以通过创建VLAN子接口来实现对虚拟局域网的划分。
VLAN子接口是物理接口的一个逻辑副本,它与物理接口使用相同的驱动程序和硬件资源,但有不同的VLAN ID。
创建VLAN子接口的步骤如下:1. 确认系统中已经加载了8021q内核模块,可以使用命令"lsmod | grep 8021q"来查看。
2. 使用命令"ip link add link eth0 name eth0.10 type vlan id 10"来创建VLAN ID为10的VLAN子接口。
其中,eth0是物理接口的名称,eth0.10是VLAN子接口的名称,10是VLAN ID。
linux通信课程设计

linux通信课程设计一、教学目标本节课的教学目标是使学生掌握Linux操作系统的基本通信功能,包括命令行操作、文件传输、远程登录等。
知识目标要求学生了解Linux操作系统的基本结构,掌握常用的命令及其用法,理解网络通信的基本原理。
技能目标要求学生能够熟练地在Linux环境下进行命令行操作,配置网络通信参数,使用SSH进行远程登录。
情感态度价值观目标在于培养学生对计算机科学的兴趣,提高他们的自主学习能力,培养他们解决问题的能力。
二、教学内容本节课的教学内容主要包括三个部分:Linux操作系统的基本概念,Linux命令行的使用,以及网络通信的配置和应用。
首先,介绍Linux操作系统的基本概念,包括Linux的历史、特点和应用领域。
其次,讲解Linux命令行的使用,包括基本的命令行操作、文件管理和文本处理命令。
最后,介绍网络通信的配置和应用,包括文件传输、远程登录和网络诊断。
三、教学方法为了达到本节课的教学目标,将采用多种教学方法,包括讲授法、演示法、实验法和讨论法。
首先,通过讲授法向学生介绍Linux操作系统的基本概念和命令行的使用。
其次,通过演示法展示网络通信的配置和应用,使学生能够直观地理解。
然后,通过实验法让学生亲手操作Linux命令行,巩固所学知识。
最后,通过讨论法引导学生思考和解决问题,培养他们的自主学习能力和解决问题的能力。
四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备多种教学资源。
教材方面,选择《Linux操作系统原理与应用》作为主教材,辅助以《Linux命令行与Shell脚本编程》等参考书。
多媒体资料方面,准备Linux操作系统的介绍视频、命令行操作的演示视频和网络通信配置的案例分析。
实验设备方面,准备装有Linux操作系统的计算机和网络设备,以便学生进行实验操作。
通过这些教学资源的准备,希望能够丰富学生的学习体验,提高他们的学习效果。
五、教学评估本节课的教学评估将采用多元化方式,以全面、客观、公正地评估学生的学习成果。
西门子 SIMATIC 组态硬件和通讯连接, STEP 7 V5.3 版本 手册

更多支持
如果有任何技术问题,请联系西门子代表或代理商。 您可以在下列网页中查找联系人: /automation/partner
培训中心
西门子提供了很多培训教程,帮助您熟悉 SIMATIC S7 自动化系统。请联系当地的 培训中心,或位于德国纽伦堡(D 90327)的培训总部,以获取详细信息。 电话: 网址: +49 (911) 895-3200.
在线帮助中的主题“新增内容?”中极好地概括和介绍了最新的 STEP 7 新内容。
组态硬件和通讯连接,STEP 7 V5.3 版本 A5E00446503-01
iii
前言
STEP 7 文档包
本手册是文档包“STEP 7 基本信息”的一部分。 下表显示了 STEP 7 文档的总览:
文档 STEP 7 基础信息 • • • • • • STEP 7 V5.3,使用入门手册 使用 STEP 7 V5.3 编程 组态硬件和通讯连接,STEP 7 V5.3 版 本 从 S5 到 S7,变频器手册 用于 S7-300/400 的梯形图(LAD)/功能 块图(FBD)/语句表(STL)手册 S7-300/400 的标准功能及系统功能 提供了参考信息,并描述了编程语 6ES7810-4CA07-8BW1 言 LAD、FBD、STL、标准功能以 及系统功能,扩充了 STEP 7 基础 信息的范围。 用途 订货号
亚洲/澳洲(北京) 技术支持和授权
当地时间: 周一至周五, 8:00 - 5:00 PM 电话: 传真: +86 10 64 75 75 75 +86 10 64 74 74 74 格林威治 标准时间: +8:00
电子邮件: adsupport@
电子邮件: simatic.hotline@
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux安全网关接口SGI的设计与实
现
1
2
Linux安全网关接口SGI的设计与实现
曲波1胡湜2
(1南京晓庄学院信息技术学院)
(2北京航空航天大学电子信息工程学院)
摘要:文章阐述了Linux安全网关接口SGI的基本结构和实现方法,以及实现SGI涉及的Linux防火墙内核接口模块、/proc文件系统内核接口等关键技术。
关键字:安全网关接口、Linux防火墙、内核接口模块、防火墙钩子函数、/proc文件系统内核接口
随着计算机网络技术的不断提高,计算机网络的应用也越来越普及,对计算机网络系统的安全管理也越来越重要。
当前流行的各种操作系统都在计算机安全管理方面提供了丰富的功能。
Linux操作系统不但在其内核中提供了丰富的防火墙功能,还以钩子函数的方式为用户提供了防火墙内核接口。
用户根据Linux防火墙内核接口规范设计内核接口模块装入内存,就可实现用户自行设计的防火墙功能或其它网络访问控制功能。
笔者利用Linux内核防火墙内核接口模块,实现了一个通用的安全网关接口(以下简称SGI)。
SGI类似一个专用的防火墙,控制流经的网络IP数据包的转发。
笔者在多个网络应用系统中利用该接口实现网络的安全访问控制,收到了很好的效果。
1.安全网关接口SGI的基本结构
安全网关接口SGI的目标是实现一个通用的安全网关内核接口模块,实现对流经的IP数据包的转发控制。
实现的方法是采用Linux的防火墙内核模块接口,经过防火墙钩子函数将自己挂接在系统的IP 转发控制链中。
SGI在内部维护一个Hash表,每一个表项包含一个代表着放行的IP地址。
1.1 SGI防火墙内核接口模块
Linux防火墙Netfilter提供了一个抽象、通用化的框架,以IPv4为例,一共有5个防火墙钩子函数,分别为:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORW ARD、NF_IP_POST_ROUTING和NF_IP_LOCAL_OUT。
数据报进入系统进行IP校验后,经过第一个钩子函数NF_IP_PRE_ROUTING进行处理;然后就进入路由代码,其决定该数据
4
包需要转发还是发给本机;若该数据报是发给本机的,则该数据报经过钩子函数NF_IP_LOCAL_IN处理后传递给上层协议;若该数据报应该被转发则被NF_IP_FORW ARD处理;经过转发的数据报经过最后一个钩子函数NF_IP_POST_ROUTING处理后,再传输到网络上。
本地产生的数据报经过钩子函数NF_IP_LOCAL_OUT处理后,进行路由选择处理,然后经过NF_IP_POST_ROUTING处理后发送到网络上。
内核模块能够对一个或多个这样的钩子函数进行注册挂接,而且在数据报经过这些钩子函数时被调用。
SGI就是利用这种钩子函数实现内核接口模块并链接到防火墙内核接口钩子链上。
1.2 Hash表
SGI防火墙内核接口模块的任务是确定对流经的IP数据包是否转发。
因此,SGI需要维护一个数据表,该数据表中保存着需要转发的IP 地址。
每当SGI接口模块收到IP数据包后,立即在该数据表中查找该IP地址。
若找到则转发放行,找不到则丢弃该IP包。
显然,数据表的结构是决定查找速度的关键。
一方面,数据表的内容是由用户进程动态确定的,要随时变化。
另一方面,查找的速度要快,不降低系统效率。
尽管二叉检索树能够满足上述要求,但其实现代价较高,因此笔者采用Hash表方法实现。
使用Hash表结构一方面可提高在IP转发过程中的查询速度,另一方面也可简化数据结构,节约内存资源。
1.3 /proc文件系统内核接口
5。