完善过滤最内层数据包处理逻辑.

This commit is contained in:
lijia
2018-11-16 11:42:54 +08:00
parent 42956e1602
commit e601cdb8ca
2 changed files with 154 additions and 19 deletions

View File

@@ -27,7 +27,7 @@ static int vlan8021q_jump_to_layer(const char *raw_data, int raw_layer_type, in
static int ipv4_jump_to_layer(const char *raw_data, int raw_layer_type, int expect_layer_type);
static int ipv6_jump_to_layer(const char *raw_data, int raw_layer_type, int expect_layer_type);
static int treat_vlan_as_mac_in_mac_sw = 1;
int treat_vlan_as_mac_in_mac_sw = 0; /* <20><>vlanǿ<6E>ư<EFBFBD>mac_in_mac<61><63>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>, <20>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD>ݸ<EFBFBD>sapp, <20><>ΪӰ<CEAA><D3B0>sappȫ<70>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* ascii<69>ַ<EFBFBD>ת16<31><36><EFBFBD><EFBFBD> */
char MESA_ascii_to_hex(char ascii)
@@ -124,10 +124,19 @@ static int udp_jump_to_layer(const char *raw_data, int raw_layer_type, int expe
if((2152 == usport) && (2152 == udport)){
skip_len = gtp_jump_to_layer(raw_data+sizeof(struct mesa_udp_hdr), ADDR_TYPE_UDP, expect_layer_type);
}else if(4789 == udport){
/* vxlanģʽ<C4A3><CABD>ʱֻ֧<D6BB><D6A7>ethernet. TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hdlc, ppp<70><70>װ, <20><>Ҫʵ<D2AA><CAB5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vxlan_jump_to_layer()<29><><EFBFBD><EFBFBD> */
skip_len = eth_jump_to_layer(raw_data+sizeof(struct mesa_udp_hdr)+8, ADDR_TYPE_MAC, expect_layer_type);
if(skip_len < 0){
return -1;
}
skip_len += 8; /* skip vxlan header */
}else if((3544 == usport) || (3544 == udport)){
;
//TODO
//skip_len = teredo_jump_to_layer(raw_data+sizeof(struct mesa_udp_hdr), ADDR_TYPE_UDP, expect_layer_type);
/* teredoʵ<6F><CAB5>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ͷ, ֱ<><D6B1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ipv6<76><EFBFBD><E3BCB4> */
skip_len = ipv6_jump_to_layer(raw_data+sizeof(struct mesa_udp_hdr), __ADDR_TYPE_IP_PAIR_V6, expect_layer_type);
if(skip_len < 0){
return -1;
}
}else{
/* <20><><EFBFBD><EFBFBD>UDP<44><50><EFBFBD>Ͳ<EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת */
return -1;
@@ -247,6 +256,7 @@ static int ipv6_jump_to_layer(const char *raw_data, int raw_layer_type, int exp
if(ADDR_TYPE_UDP == expect_layer_type){
skip_len = next_hdr_ptr - (UINT8 *)raw_data;
}else{
/* TODO: IPv6<76><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
skip_len = -1;
}
goto done;
@@ -478,7 +488,7 @@ static int vlan8021q_jump_to_layer(const char *raw_data, int raw_layer_type, in
break;
default:
printf("TODO: jmp unsupport type in vlan8021q, 0x%x!\n", ntohs(vlan_hdr->type));
printf("unsupport type in vlan8021q, 0x%x, You can try set the '--vlan-as-mac-in-mac' arg!\n", ntohs(vlan_hdr->type));
skip_len = -1;
}