时间:2024-09-03
◆王 鹏 余庆丰
(61764部队 海南 572000)
基于NetMagic的IP报文过滤器实验
◆王 鹏 余庆丰
(61764部队 海南 572000)
本实验完成基于NetMagic的IP报文过滤。过滤IP通过NMAC协议向NetMagic写入,具体实现是管理模块对UM模块的寄存器的写操作。NetMagic在收到数据报文时,提取数据报文的源IP地址,与过滤IP地址进行比对,若匹配则过滤,否则转发报文。实验结果显示,NetMagic有效的实现了过滤规则写入和IP报文过滤的功能。
NetMagic;报文过滤;NMAC协议;管理模块
基于NetMagic平台,进行报文过滤的实验,以此观察对特定IP(特定MAC 、IP段、特定端口、端口段)的数据报文的过滤,达到有选择访问和进入的目的,为探索内部网络和外部网络防火墙的功效打下基础。
读取报文的IP部与设定的过滤IP进行比对,匹配的报文就丢弃不转发。核心机制就是规则IP的写入和报文的处理分析。
规则IP的写入是通过发送基于NMAC协议的规则报文,通过管理模块对UM的写操作;报文的处理是通过比对一般报文的源IP和规则IP,匹配的报文则丢弃不转发。NetMagic中的UM模块使用的转发机制是bypass模式,报文经由CDP转发,而不是UM转发。因此,UM需要向CDP模块的规则FIFO写转发规则,实现转发或者丢包操作,转发的报文来自CDP的数据FIFO。
(1) 软件测试
①在发送端PC1生成指定格式的报文,收端检测报文是否成功。
②规则报文的发送,写入规则是否成功。
(2)硬件测试
①设定过滤IP的初始值,NetMagic能正确实现对特定报文的识别,对于匹配规则的报文,能正确地进行丢弃而不转发。对于不匹配的报文,能够正确地进行转发。在接收端对收到的报文进行抓包测试,过滤是否成功。
②接收规则报文,对特定的报文进行识别,接收端PC2抓包测试,确定是否生成规则。
通过以上实验和步骤,既可以对报文过滤的正确性进行验证,又可以分块的实现功能,便于测试和调试。
硬件部分可以使用 Modlesim仿真来测试和验证,通过查看输出端的报文规则与相应报文处理情况来进行判断。
图1 实验拓扑图
说明:PC1是发送端,既可以发送一般报文,也可以发送规则报文;PC2是接收端,对过滤后的报文进行接收。
预期NetMagic能对报文进行正确的处理。对于指定源IP的报文能进行过滤,对不匹配的报文能进行正常转发。为了便于测试,可以发送有限条匹配和不匹配的报文并在接收端进行抓包动作。
(1)关键数据结构与工作流程
软件的功能是与硬件进行沟通,往硬件UM部分写入防火墙规则,并读取相关信息。本软件基于现有的nmac函数源码,依据与硬件约定的寄存器和存储器地址进行编程,共分为三个部分。第一个部分是nmac函数源码,实现连接硬件、输入输出函数、连接关闭等功能。第二个部分为规则写入模块,实现过滤器规则的界面输入和传输功能。第三个模块为过滤规则读取模块,实现过滤规则读取与显示功能。
下面将首先介绍过滤器规则写入与读取工作流程,然后再分模块介绍。
首先需要介绍一下程序的关键数据结构——过滤规则。过滤规则是一个包含了指针的结构体。该结构体由源mac地址、源IP地址、源端口号、目的mac地址、目的IP地址、目的端口号、动作和指向相同结构体的指针组成。下面是该结构体的截图。在controller(PC)中,可以由这样的结构体组成链表,表示一系列的规则。
此外,还需要介绍一个关键数据结构。第一个是每次与硬件沟通进行规则配置、读取等动作前需要写入的数据。这个数据表明了本次是读取规则、写入规则还是将原有的规则清除。这个数据结构还包含了需要写入、读取的规则数目。
另外,还有几个关键数据需要说明。它们分别是UM模块中过滤规则首地址、存放UM模块中“规则数量”数据的地址以及存放上面“过滤规则包”信息说明结构(rules_packhead)的地址。在程序中,与硬件设计人员约定好这几个地址,并在头文件中预定义好。
写入规则的过程是:首先从界面中输入规则各项信息,形成规则链表;写入“过滤规则包”信息说明结构;写入规则。读取规则的过程是:写入“过滤规则包”信息说明结构;读取UM模块中规则数量;读取规则。清除规则的过程是:写入“过滤规则包“信息说明结构。
(2)过滤规则写入过程
过滤规则通过黑屏幕写入。程序运行后,将会提示。如果选择输入规则,则进入到输入规则的界面。进入该界面后,需要分别输入规则项。对于每一项,可以选择输入或者不输入。如若选择输入,则需按照提示的格式输入,如果选择不输入,则程序将自动生成数据,表明该项无效。规则输入的过程如图2所示。
图2 规则输入过程
输入规则后,将会形成一个规则链表。写入规则函数将这个链表的内容复制到到一个缓冲区中,然后利用nmac的写入源函数将这个缓冲区的数据写入UM相应位置。在写入UM前,需要读取UM模块中现有的规则数量,通过约定好的规则首地址知道新的规则要写入哪个地址。
(3)过滤规则读取和清楚过程
过滤规则读取过程相对比较简单。首先写入“过滤规则包”头部,说明要读取过滤规则。然后读取UM模块中的规则数量,根据约定好的规则头部地址读取过滤规则。读取后用链表存储,然后在屏幕上显示即可。
UM硬件实现分为两部分:(1)报文识别模块;(2)规则写入模块。
3.2.1报文识别模块
(1)信号说明
信号含义如表1和表2所示。
表1 CDP2UM的信号说明表
表2 向CDP的规则FIFO写规则的信号
注意:因为我们采用bypass模式,故um2cdp_rule[29]=1。
(2)状态机
L_Idle状态UM向发送cdp2um_tx_enable,然后CDP向UM发送第一条报文,并跳到CU_FIRST状态。
CU_FIRST状态读取第二条报文,其中[47:16]是源 ip,跳到下一个状态,CU_SECOND等是保留状态,以便以后对mac地址、端口等做过滤。
CU_FIFTH状态向CDP规则FIFO写规则CU_RULE状态数据复位:
um2cdp_rule_valid <= 1'b0;
um2cdp_rule_wrreq <= 1'b0;
cdp2um_tx_enable <= 1'b1;
然后回到CU_IDLE状态。
图3 报文识别模块状态机
(3)时序
①CDP2UM的时序
当UM模块资源空闲,有能力从CDP接收一个新的报文时,则给 CDP输入控制模块一个发送使能信号 cdp2um_tx_enable。CDP输入控制模块获得该使能信号后,同时向 UM和输入输出FIFO发送139位宽的报文数据cdp2um_data,并发送一个报文有效信号cdp2um_data_valid,此信号表明了报文的开始、中间和结束。UM一旦获得了报文的头部,就可以取消使能信号cdp2um_tx_enable,直到报文接收完毕。输入控制模块给 UM的报文是连续的。当一个报文发送结束后,UM可以重新产生发送使能信号,进行下一个报文的上传。(参考NetMagic 08 UM设计规范)。
②写rule的时序
UM接收到一个报文尾,且规则FIFO有剩余空间时,将规则写信号 um2cdp_rule_wrreq置高一拍,同时把匹配规则发送给CDP输出控制模块。
3.2.2规则写入模块
(1)信号说明
表3 规则写入模块的信号
(2)状态机
图4 规则写入模块状态机
①UM检测到ale=1且wr=0,跳到addr状态并采样地址并判断。如果为自己的地址空间则继续往下执行。如果不为自己的地址空间则不继续往下执行而是等待下一次操作;
②如果为自己的地址空间,则跳到wait状态;
③UM检测到Cs_n=0&rd_wr=0,则跳到data状态读取数据;
④UM检测到片选信号为1之后(data读取完毕),跳到了idle状态。
(3)时序
管理模块写UM管理模块把解析后的命令及数据发送给UM。UM获得命令及数据后,对相应的地址空间进行读写操作。如果为写操作,则UM完成写操作后,只需返回应答信号即可。管理模块时序图如图5所示。
图5 管理模块时序图
通过检查rule的变化判断是否过滤成功。首先,我们发的是一条理论上不被过滤的报文,我们可以看到rule从32’b0变成32’b10000000000000000000000000000010(即 30'h20000002),这代表报文正常转发;接着,我们发了一条理论上要被过滤的报文 , 我 们 可 以 看 到 rule从 32’b10000000000000000000000000000010变 成 了 32’b10001000000000000000000000000010(即 30'h22000002),这代表报文被丢弃。rule的变化过程如图6所示。
rule第一次变化 rule第二次变化
图6 rule变化过程
通过软件给UM发送规则报文,写过滤IP为 192.168.1.3,经过发送192.168.1.3的IP报文和检验接收端是否收到该报文,就可以检验规则报文是否成功写入和过滤功能是否实现。
测试时,我们设定接收端PC的IP是192.168.1.2。
注意:输入端口是port3,输出端口是port2。也就是说,PC1连接NM的port3,PC2连接NM的port2。注意端口不要接反了,刚开始测试的时候,因为端口接反了,造成测试不成功,及时发现后,改正回来就OK了。
(1)设定发送端的IP是192.168.1.1。
在发送端PINK接收端,如图7所示,发送成功。这是因为IP 192.168.1.1不是我们要过滤的报文IP。
图7 发送测试情况
(2)设定发送端的IP是192.168.1.3。
在发送端PINK接收端,如图8所示,发送不成功。这是因为IP 192.168.1.3就是我们要过滤的报文IP。而且,这证明了我们的规则报文也成功写入UM。
图8 发送测试情况
经过多次测试,都成功完成了写入规则和过滤IP的目标。
注意:输入端口是port3,输出端口是port2。注意port3发到port2要经过过滤IP,port2到port3不经过过滤IP,但是要建立通路,这个通路是很重要的,刚开始没有建立这个通路,实验没成功;后来增加了这个通路后,完全达到了我们的设计目标。
通过仿真实验,验证了NetMagic基于源IP的报文过滤功能。实验表明,NetMagic能正确完成设定的功能,对于匹配规则的数据报文进行过滤,对不匹配规则的数据报文进行转发。
[1] 曹成周,毛健彪,孙志刚,尹佳斌,林琦,龚小林.NetMagic平台硬件开发方法[J].计算机工程与科学,2014.
[2] 孙志刚,李韬.基于可编程实验平台NetMagic的路由交换原理实验教学[J].计算机教育,2016.
[3] 杨锦,姚望.基于 NetMagic的城域网流量仿真研究[J].电子质量,2012.
[4] 毛席龙,彭立宏,孙志刚,李韬.依托NetMagic平台推动计算机网络课程创新实践[J].计算机教育,2013.
[5] 毛席龙,程辉.基于NetMagic的流媒体传输延时抖动均方差估计[J].现代电子技术,2012.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!