发明内容
本发明要解决的技术问题是CPE在桥转发模式下,无法转发来自有线侧PC机的数据帧。针对这个问题,本发明提供一种MAC地址伪装方法及装置来解决这个问题。
本发明的技术方案提供一种WLAN MAC地址伪装方法,在CPE设备中执行包括以下过程,
数据帧MAC地址伪装过程,包括获取CPE设备无线端的MAC地址,作为要伪装的MAC地址;接收连接到CPE设备有线侧的客户端设备的数据帧,将数据帧的源MAC地址伪装成获取到的CPE设备无线端的MAC地址,如果数据帧所包含的上层协议数据包中具有与源MAC地址有关的部分也进行伪装,将伪装后的数据帧通过无线端发送出去;
数据帧MAC地址解伪装过程,包括从CPE设备无线端接收来自无线接入设备的数据帧,将数据帧的目的MAC地址还原,如果数据帧所包含的上层协议数据包中具有与目的MAC地址有关的部分也进行还原,将还原之后的数据帧通过相应端口发送给对应的客户端设备。
而且,数据包MAC地址伪装过程中,对数据帧所包含的上层协议数据包中与源MAC地址有关的部分进行伪装实现如下,
如果是DHCP请求包,则只将数据包中的flag字段修改为广播方式,不修改DHCP包中的Client MAC地址字段;
如果是ARP数据包,则获取该ARP包中发送方填充的源IP地址,记录并更新该源IP地址和源MAC地址对应关系;然后将ARP包中的发送方的MAC地址修改为CPE设备无线端的MAC地址;
如果是IP数据包,则记录并更新该数据包的源IP地址和源MAC地址对应关系。
而且,数据包MAC地址伪装过程中,所述源IP地址和源MAC地址对应关系采用MAC/IP地址映射表存储,MAC/IP地址映射表通过在内核中已有的HASH表的基础上增加IP地址项实现。
而且,数据帧MAC地址解伪装过程实现如下,
如果是DHCP响应包,则获取包的客户端的MAC地址,并将数据帧发送给相应设备;
如果是ARP响应包或者普通IP包,则获取数据包目的IP地址,在MAC/IP地址映射表中查找与该目的IP地址对应的项,如果未找到则将数据包丢弃,如果找到则将数据帧的目的MAC地址修改为查找到的MAC地址,并且如果所封装的包内容中含有与目的MAC地址相关的字段,则将相关的字段修改为查找到的MAC地址;
如果是其他类型的数据包,则将数据帧的目的MAC地址修改为广播地址。
本发明还相应提供一种WLAN MAC地址伪装系统,在CPE设备中设置包括以下单元,
数据帧MAC地址伪装单元,用于获取CPE设备无线端的MAC地址,作为要伪装的MAC地址;接收连接到CPE设备有线侧的客户端设备的数据帧,将数据帧的源MAC地址伪装成获取到的CPE设备无线端的MAC地址,如果数据帧所包含的上层协议数据包中具有与源MAC地址有关的部分也进行伪装,将伪装后的数据帧通过无线端发送出去;
数据帧MAC地址解伪装单元,用于从CPE设备无线端接收来自无线接入设备的数据帧,将数据帧的目的MAC地址还原,如果数据帧所包含的上层协议数据包中含有与目的MAC地址有关的部分也进行还原,将还原之后的数据帧通过相应端口发送给对应的客户端设备。
本发明针对当前CPE在桥转发模式下,不能转发有线侧所连接的PC机的数据,发明了一种MAC地址伪装技术,用于将有线侧来自其他PC机的数据帧的源MAC地址伪装成CPE设备无线侧的MAC地址后转发;并且将无线侧来自AP的数据帧解伪装,找到数据帧真正的目的MAC地址,正确发往PC机。本发明的有益效果是不需要对现有设备进行很大改动,也不需要提供额外设备就能够简单有效地实现CPE设备的桥转发,保证了通信的正常进行。
具体实施时也可以提供相应一种WLAN MAC地址伪装系统,在CPE设备中设置包括以下单元,
数据帧MAC地址伪装单元,用于获取CPE设备无线端的MAC地址,作为要伪装的MAC地址;接收连接到CPE设备有线侧PC机等设备的数据帧,将数据帧的源MAC地址伪装成获取到的CPE设备无线端的MAC地址,如果数据帧中所包含的上层协议数据包中还具有与源MAC地址相关的部分,也需要进行伪装处理,并将伪装后的数据帧通过无线端发送出去;
数据帧MAC地址解伪装单元,用于从CPE设备无线端接收来自无线接入设备的数据帧,将数据帧的目的MAC地址还原,如果数据帧所包含的上层协议数据包中含有与目的MAC地址有关的部分也进行还原,将还原之后的数据帧通过相应端口发送给对应的客户端设备。
伪装的具体流程可设计为根据数据帧中所包含的上层协议数据包类型对包内与源MAC地址相关的部分进行分别处理,然后伪装数据帧的源MAC地址。解伪装的具体流程可设计为直接根据数据帧中所包含的上层协议数据包类型对数据帧进行分别处理。因为如果是DHCP响应数据包,由于伪装的时候将flag字段修改为广播方式,因此DHCP服务器回应时将数据帧的目的MAC地址设置为广播方式(全F的广播地址),但是DHCP响应包中的clientMAC字段并没有被修改,只需要将数据帧的目的MAC地址修改为client MAC Address字段对应的地址即可,实质上实现了将数据帧的目的MAC地址还原。如果是IP数据包或者ARP数据包,除需要将数据帧的目的MAC地址还原成伪装之前的MAC地址外,如果数据帧中所包含的上层协议数据包中具有与目的MAC地址相关的部分,也需要进行还原处理,并将处理之后的数据帧通过相应端口发送给对应的PC机等设备。
其中MAC地址伪装流程可分为以下步骤进行:
(1)获取CPE设备无线侧的MAC地址
(2)接收来自有线侧PC机的数据帧
(3)分析数据帧中所携带的上层协议数据包的类型,进入不同处理流程,
如果是ARP数据包或者普通IP数据包等源IP地址已知的数据包,则记录并更新该数据包的源IP地址和源MAC地址对应关系;如果是源IP地址未知的数据包,例如DHCP请求包,无法记录源IP地址与源MAC地址对应关系。因此,本发明进一步提出,所述数据包MAC地址伪装过程中,所述记录并更新源IP地址与源MAC地址对应关系实现如下,
根据获取到的源IP地址,在已有的源IP地址与源MAC地址对应关系表中查找对应项,如果查询到对应项,则直接返回;否则若未查询到对应项,则新建一个IP地址与MAC地址对应关系选项。
修改数据帧的源MAC地址为(1)中获取的CPE设备无线侧的MAC地址(所有数据帧源MAC地址都要被修改),根据数据帧所携带的上层协议数据包类型进行处理,如果是DHCP请求包,则只将数据包中的flag字段修改为广播方式,不修改数据包中的client MAC Address字段;如果数据帧中携带的其他上层协议数据包中有内容与源MAC地址有关,则将这部分内容进行伪装(例如ARP数据包中的sender MACAddress字段)。
(4)将伪装以后的数据帧通过相应端口发送出去。
MAC地址解伪装流程可分为以下步骤进行:
(1)无线侧接收来自AP的数据帧,对数据帧进行解析,获取数据帧的目的MAC地址以及帧中携带的上层协议数据包的类型等信息;
(2)检查该数据帧的目的MAC地址是否合法(广播或者CPE设备无线端MAC为合法地址),如果不合法,则丢弃。
(3)根据上层协议数据包类型,进入不同的处理流程,主要是获取数据包的目的IP地址,在IP地址与MAC地址对应关系表中,查询到伪装前的MAC地址,即该数据要发往的目的MAC地址。
例如,如果是DHCP响应包,由于在伪装的时候,将数据包中的flag字段修改成了广播方式,因此DHCP服务器响应时将数据帧的目的MAC地址设置成了全F的广播地址,但是数据包中的client MAC Address字段没有被修改过,因此只需要获取包的client MAC Address字段,并将数据帧的目的MAC地址修改为client MAC Address对应的值;如果是ARP响应包或者普通IP包,则获取数据包目的IP地址,在IP地址与MAC地址对应关系表中查找与该目的IP地址对应的项,如果未找到,则将数据包丢弃,否则如果找到,则将数据帧的目的MAC地址修改为查找到的MAC地址,并且如果上层协议数据包内容中含有与目的MAC地址相关的字段(例如ARP响应包中的dest MAC Address),则将其修改为查找到的MAC地址;否则,如果是其他类型的数据包,则将数据帧的目的MAC地址修改为广播地址。
(4)将修改后的数据帧发送出去。
为便于实施参考起见,提供现有技术中DHCP协议的报文格式表如下表1,提供现有技术中ARP协议的报文格式表如下表2,提供现有技术中IP协议的报文格式表如下表3。提供现有技术的链路层帧封装格式如下表4。
表1:
表2:
表3:
表4:
目的MAC地址(6字节) |
源MAC地址(6字节) |
帧类型 |
数据(46~1500字节) |
CRC校验(4字节) |
注:表4中的数据部分就是表1经过多层封装或者表2、3的内容。
为便于实施参考起见,本发明实施例进一步提供了具体流程设计如下。
附图2所示为MAC地址伪装实施流程:
在步骤S1中,开始MAC地址伪装;然后进入步骤S2。
在步骤S2中,获取CPE设备无线端的MAC地址;然后进入步骤S3。
在步骤S3中,对CPE有线侧接收到的其他PC机的数据帧进行解析,取得数据帧中上层协议数据包的类型,然后进入步骤S4。
在步骤S4中,判断上层协议数据包的类型是否为DHCP Discovery(DHCP发现包)或者DHCP Request(DHCP请求包),DHCP Discovery包和DHCP Request在图中统称DHCP请求包,本说明书中未明确指出的DHCP请求包都是指DHCP Discovery和DHCP Request的统称,DHCP是本领域的动态主机设置协议,如果不是,则进入步骤S7;如果是的,则进入步骤S5;
在步骤S5中,由于包类型为DHCP Discovery或者DHCP Request,将包中的flag字段(标志字段,参见表1)修改为广播方式,则DHCP服务器回复的响应帧的目的MAC地址为广播地址;然后进入步骤S6。
在步骤S6中,将数据帧的源MAC地址(链路层所封装的帧头里面的源MAC地址字段,参见表4)修改为步骤S2中获取的CPE设备无线端的MAC地址,并通过无线端将数据帧发送出去;然后进入步骤S12。
在步骤S7中,判断上层协议数据包的类型是否为ARP数据包,ARP是本领域的地址解析协议,如果不是,则进入步骤S10;如果是的,则进入步骤S8。
在步骤S8中,由于包类型为ARP包,发送该数据包的PC机已经获取到了IP地址,因此获取该ARP包中发送方填充的源IP地址(参见表2的Sender IP Address字段),在MAC/IP地址映射表中查找是否存在该IP地址对应项,如果找到,则返回,如果没有找到,则在MAC/IP地址映射表中创建一个MAC/IP地址映射项,实现记录并更新MAC/IP地址映射表;然后进入步骤S9。
在步骤S9中,将ARP包中的Sender MAC Address字段(发送方的MAC地址的字段,参见表2)修改为步骤S2中获取的CPE设备无线端的MAC地址;然后进入步骤S6。
在步骤S10中,判断上层协议数据包的类型是否是IP数据包,如果不是,则进入步骤S6;如果是的,则进入步骤S11。
在步骤S11中,由于包类型为IP数据包,数据包的源IP地址已知,因此获取到数据包的源IP地址(参见表3的Source IP Address字段),在MAC/IP地址映射表中查找是否存在该IP地址对应项,如果找到,则返回,如果没有找到,则在MAC/IP地址映射表中创建一个MAC/IP地址映射项;然后进入步骤S6。
在步骤S12中,结束对该数据包MAC地址伪装流程。
附图3所示为MAC地址解伪装实施流程:
在步骤S101中,开始MAC地址解伪装;然后进入步骤S102。
在步骤S102中,CPE设备无线端接收来自AP的数据帧并解析,然后进入步骤S103。
在步骤S103中,检查数据帧的有效性,主要是检查目的地址是否有效,如果数据帧的目的MAC地址(链路层所封装的帧头中目的MAC地址字段,参见表4)不为广播地址或者CPE设备无线端的MAC地址,则说明目的地址无效,进入步骤S104;否则进入步骤S105。
在步骤S104中,丢弃该数据包;然后进入步骤S1015。
在步骤S105中,获取该数据帧中上层协议数据包的类型;然后进入步骤S106。
在步骤S106中,判断上层协议数据包的类型是否为DHCP OFFER或者DHCP ACK包(统称DHCP响应包),如果是的,则进入步骤S107,否则进入步骤S109。DHCP OFFER:DHCP提供包,为DHCP Discovery包的确认。DHCP ACK:DHCP确认包,为DHCP Request包的确认。
在步骤S107中,因为数据包的类型为DHCP响应包,解析DHCP响应包,获取包的ClientMAC Address字段(客户端硬件地址,参见表1);然后进入步骤S108。
在步骤S108中,根据步骤S107所得client MAC Address字段,将其作为DHCP响应包的目的地址,即将数据帧的目的MAC地址(链路层封装的帧头中的目的MAC地址)修改为client MAC Address字段,然后进入步骤S1015。即将表1中的client MAC Address字段当作DHCP响应包要发往的目的地址。
在步骤S109中,判断该数据包的类型是否为ARP响应包,如果是,则进入步骤S1010;否则进入步骤S1013。
在步骤S1010中,获取数据包的目的IP地址(参见表2和3分别的Dest IP ddress),并根据该地址在MAC/IP地址映射表中查找对应的目的MAC地址,然后进入步骤S1011。
在步骤S1011中,根据在MAC/IP地址映射表中是否查找到对应映射项,判断步骤S1010中查找的MAC地址是否存在,如果存在,进入步骤S1012;否则进入步骤S104。
在步骤S1012中,将数据帧的目的MAC地址(链路层封装的帧头中的目的MAC地址)修改为S1010中查找到的MAC地址,然后根据上层协议数据包类型分别处理,若为ARP响应包,所封装的包内容中含有与目的MAC地址相关的dest MAC Address字段,则修改包内容中的dest MAC Address字段(表示目的MAC,参见表2的Dest MAC Address)为S1010中查找到的MAC地址,发送修改后的数据帧至相应客户端设备,然后进入步骤S1015,否则说明为IP数据包,直接进入步骤S1015。
在步骤S1013中,判断数据包的类型是否为IP数据包,如果是的,则进入步骤S1010;否则进入步骤S1014。
在步骤S1014中,将数据帧目的MAC地址(链路层封装的帧头中的目的MAC地址)修改为广播地址后发送,这样有线侧的每个端口都能够收到该数据包;然后进入步骤S1015。
在步骤S1015中,结束MAC地址解伪装流程。
MAC/IP地址映射表可通过在内核中已有的HASH表的基础上增加IP地址项实现。现有技术中,CPE内核中的桥模块是基于MAC地址来转发数据包的,CPE内核的桥模块上的MAC地址以HASH(哈希)表的形式存在,通过此HASH表可以获得一个MAC地址表,每个连接到CPE有线侧的PC机需要转发数据时,都将在这个MAC地址表获得唯一一个节点,该节点记录了MAC与端口号的对应信息。且当有一个MAC地址长时间没有需要进行转发的数据时,该MAC地址对应的信息将会自动删除。本发明建立的MAC/IP地址映射表是基于上述MAC地址表实行的,具体实施时可以在CPE的桥模块中添加一个关于IP地址的HASH表,该HASH表的每个节点不仅包含IP地址的相关信息,还指向对应的MAC地址表项;当连接到CPE有线侧的PC机需要转发数据时,都将其IP地址与MAC地址信息记录到IP地址的HASH表中;通过IP地址可以在IP地址HASH表中查询到一个唯一的节点,进而获取到其对应的MAC地址信息。