From 00833c4529b51ea99ae6b70761c36ab8657cf3c5 Mon Sep 17 00:00:00 2001 From: liuyang Date: Sun, 4 Nov 2018 16:19:39 +0800 Subject: [PATCH] =?UTF-8?q?mirror=5Fstream=20=E5=8D=8E=E4=B8=A5=E8=87=AA?= =?UTF-8?q?=E6=B5=8B=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/internal/mirror_stream_inl.h | 1 + .../src/decrypt_mirror_plugin.cpp | 4 +- .../decrypt-mirroring/src/mirror_stream.cpp | 115 ++++++++++++------ .../decrypt-mirroring/src/sendpkt.cpp | 2 +- 4 files changed, 85 insertions(+), 37 deletions(-) diff --git a/plugin/business/decrypt-mirroring/include/internal/mirror_stream_inl.h b/plugin/business/decrypt-mirroring/include/internal/mirror_stream_inl.h index 5b813b2..3e39b92 100644 --- a/plugin/business/decrypt-mirroring/include/internal/mirror_stream_inl.h +++ b/plugin/business/decrypt-mirroring/include/internal/mirror_stream_inl.h @@ -123,6 +123,7 @@ struct deliver_sendpkt_info struct deliver_globle_info { + int deliver_switch; char *fs2_name[FS2_COLUMN_NUM]; unsigned char* sendbuf[MAX_THREAD_NUM]; struct deliver_comm_info comminfo; diff --git a/plugin/business/decrypt-mirroring/src/decrypt_mirror_plugin.cpp b/plugin/business/decrypt-mirroring/src/decrypt_mirror_plugin.cpp index baa2400..6fb33a8 100644 --- a/plugin/business/decrypt-mirroring/src/decrypt_mirror_plugin.cpp +++ b/plugin/business/decrypt-mirroring/src/decrypt_mirror_plugin.cpp @@ -8,7 +8,7 @@ int decrypt_mirror_init(struct tfe_proxy * proxy) const char* filepath="./conf/decrypt_mirror.conf"; int thread_num=2, ret=0;//todo: aquire from proxy; ret=mirror_stream_init(thread_num, filepath); - assert(ret==0); +// assert(ret==0); return 0; } @@ -17,7 +17,7 @@ int decrypt_mirror_on_open_cb(const struct tfe_stream * stream, unsigned int thr { int ret=0; ret=mirror_stream_open(thread_id, stream->addr, pme); - assert(ret==0); +// assert(ret==0); return 0; } diff --git a/plugin/business/decrypt-mirroring/src/mirror_stream.cpp b/plugin/business/decrypt-mirroring/src/mirror_stream.cpp index b19bc3f..6533d39 100644 --- a/plugin/business/decrypt-mirroring/src/mirror_stream.cpp +++ b/plugin/business/decrypt-mirroring/src/mirror_stream.cpp @@ -119,22 +119,19 @@ void* deliver_filestat2(void* arg) int deliver_debug_log_v6(int level,char* module,struct deliver_pme_info* pmeinfo,int flag,int recv_len) -{ -#if 0 - +{ struct deliver_session_info* session_info=&(pmeinfo->session_info); struct deliver_pkt_info* pkt_info=&(pmeinfo->pkt_info); - struct sockaddr_in6* client_addr=(struct sockaddr_in6*)&(pmeinfo->addr_info.client); - struct sockaddr_in6* server_addr=(struct sockaddr_in6*)&(pmeinfo->addr_info.server); + const struct tfe_stream_addr_tuple4_v6* tuple4_v6 = pmeinfo->addr_info->tuple4_v6; char saddr_v6[INET6_ADDRSTRLEN ]={0}; char daddr_v6[INET6_ADDRSTRLEN ]={0}; - unsigned short sport=ntohs(client_addr->sin6_port); - unsigned short dport=ntohs(server_addr->sin6_port); + unsigned short sport=ntohs(tuple4_v6->source); + unsigned short dport=ntohs(tuple4_v6->dest); - inet_ntop(AF_INET6, (void *)&(client_addr->sin6_addr), saddr_v6, INET6_ADDRSTRLEN); - inet_ntop(AF_INET6, (void *)&(server_addr->sin6_addr), daddr_v6, INET6_ADDRSTRLEN); + inet_ntop(AF_INET6, (void *)&(tuple4_v6->saddr), saddr_v6, INET6_ADDRSTRLEN); + inet_ntop(AF_INET6, (void *)&(tuple4_v6->daddr), daddr_v6, INET6_ADDRSTRLEN); switch(flag) { @@ -154,28 +151,28 @@ int deliver_debug_log_v6(int level,char* module,struct deliver_pme_info* pmeinfo break; } -#endif + return 0; } + int deliver_debug_log_v4(int level,char* module,struct deliver_pme_info* pmeinfo,int flag,int recv_len) -{ -#if 0 +{ struct deliver_session_info* session_info=&(pmeinfo->session_info); struct deliver_pkt_info* pkt_info=&(pmeinfo->pkt_info); - struct sockaddr_in* client_addr=(struct sockaddr_in*)&(pmeinfo->addr_info.client); - struct sockaddr_in* server_addr=(struct sockaddr_in*)&(pmeinfo->addr_info.server); + + const struct tfe_stream_addr_tuple4_v4* tuple4_v4 = pmeinfo->addr_info->tuple4_v4; char saddr_v4[INET_ADDRSTRLEN]={0}; char daddr_v4[INET_ADDRSTRLEN]={0}; - unsigned short sport=ntohs(client_addr->sin_port); - unsigned short dport=ntohs(server_addr->sin_port); + unsigned short sport=ntohs(tuple4_v4->source); + unsigned short dport=ntohs(tuple4_v4->dest); - inet_ntop(AF_INET, (void *)&(client_addr->sin_addr.s_addr), saddr_v4, INET_ADDRSTRLEN); - inet_ntop(AF_INET, (void *)&(server_addr->sin_addr.s_addr), daddr_v4, INET_ADDRSTRLEN); + inet_ntop(AF_INET, (void *)&(tuple4_v4->saddr), saddr_v4, INET_ADDRSTRLEN); + inet_ntop(AF_INET, (void *)&(tuple4_v4->daddr), daddr_v4, INET_ADDRSTRLEN); switch(flag) { @@ -194,11 +191,12 @@ int deliver_debug_log_v4(int level,char* module,struct deliver_pme_info* pmeinfo session_info->send_pkt,session_info->recv_byte); break; } -#endif + return 0; } + int deliver_sendpkt_ether(int thread_seq,int buflen,unsigned char* buf,unsigned char* dmac) { int ret=0; @@ -298,7 +296,7 @@ int deliver_send_v6(int thread_seq,struct deliver_pme_info* pmeinfo,int payload_ deliver_do_checksum(g_deliver_globle_info.sendbuf[thread_seq]+offset, IPPROTO_TCP, SENDPACKET_TCP_H+payload_len); - deliver_do_checksum(g_deliver_globle_info.sendbuf[thread_seq]+offset, IPPROTO_IP, SENDPACKET_IP_H); +// deliver_do_checksum(g_deliver_globle_info.sendbuf[thread_seq]+offset, IPPROTO_IP, SENDPACKET_IP_H); deliver_build_ethernet((unsigned char*)(pmeinfo->dst_macaddr),(unsigned char*)(g_deliver_globle_info.sendinfo.src_macaddr), @@ -388,16 +386,20 @@ int deliver_send_syn(int thread_seq,struct deliver_pme_info* pmeinfo) pmeinfo->pkt_info.win = deliver_rand_range(1460, 65500); pmeinfo->pkt_info.ipid = deliver_rand() % 65535; pmeinfo->pkt_info.ttl=deliver_rand_range(32,65); - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_seq,pmeinfo,0,NULL); deliver_debug_log_v4(RLOG_LV_INFO,(char*)DELIVER_SENDPKT_START,pmeinfo,DELIVER_FLAG_SENDPKT,0); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_seq,pmeinfo,0,NULL); deliver_debug_log_v6(RLOG_LV_INFO,(char*)DELIVER_SENDPKT_START,pmeinfo,DELIVER_FLAG_SENDPKT,0); } + else + { + //TODO + } return 0; } @@ -410,14 +412,18 @@ int deliver_send_syn_ack(int thread_seq,struct deliver_pme_info* pmeinfo) pmeinfo->pkt_info.seq= deliver_rand(); pmeinfo->pkt_info.flag=TH_SYN|TH_ACK; - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_seq,pmeinfo,0,NULL); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_seq,pmeinfo,0,NULL); } + else + { +//TODO + } return 0; } @@ -435,14 +441,18 @@ int deliver_send_ack(int thread_seq,struct deliver_pme_info* pmeinfo) pmeinfo->pkt_info.flag=TH_ACK; - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_seq,pmeinfo,0,NULL); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_seq,pmeinfo,0,NULL); } + else + { +//todo + } return 0; } @@ -476,27 +486,35 @@ int deliver_set_pktinfo(struct deliver_pme_info* pmeinfo,int flag, int cur_dir,i int deliver_send_rst(int thread_seq,struct deliver_pme_info* pmeinfo) { deliver_set_pktinfo(pmeinfo,TH_RST,CONN_DIR_DOWNSTREAM,0); - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_seq,pmeinfo,0,NULL); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_seq,pmeinfo,0,NULL); } + else + { +//TODO + } deliver_set_pktinfo(pmeinfo,TH_RST,CONN_DIR_UPSTREAM,0); - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_seq,pmeinfo,0,NULL); deliver_debug_log_v4(RLOG_LV_INFO,(char*)DELIVER_SENDPKT_END,pmeinfo,DELIVER_FLAG_ENT,0); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_seq,pmeinfo,0,NULL); deliver_debug_log_v6(RLOG_LV_INFO,(char*)DELIVER_SENDPKT_END,pmeinfo,DELIVER_FLAG_ENT,0); } + else + { +//TODO + } return 0; } @@ -505,6 +523,12 @@ int deliver_send_rst(int thread_seq,struct deliver_pme_info* pmeinfo) int mirror_stream_open(int thread_id, const struct tfe_stream_addr* addr,void** pme) { + if(g_deliver_globle_info.deliver_switch == 0) + { + MESA_handle_runtime_log(g_deliver_globle_info.comminfo.logger,RLOG_LV_INFO,DELIVER_MODULE_INIT,"mirror_stream switch is 0,not run...."); + return -1; + } + struct deliver_pme_info* pmeinfo=NULL; deliver_init_pmeinfo(addr,pme); @@ -520,6 +544,11 @@ int mirror_stream_open(int thread_id, const struct tfe_stream_addr* addr,void** int mirror_stream_write(int cur_dir,const unsigned char * data, size_t len, void** pme,int thread_id) { + if(g_deliver_globle_info.deliver_switch == 0) + { + return -1; + } + int i=0; const unsigned char* payload=data; int payload_len=0; @@ -533,14 +562,18 @@ int mirror_stream_write(int cur_dir,const unsigned char * data, size_t len, void pmeinfo->session_info.recv_pkt++; pmeinfo->session_info.recv_byte+=len; - if(pmeinfo->addr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_debug_log_v4(RLOG_LV_DEBUG,(char*)DELIVER_RECVPKT_DEBUG,pmeinfo,DELIVER_FLAG_RECVPKT,len); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_debug_log_v6(RLOG_LV_DEBUG,(char*)DELIVER_RECVPKT_DEBUG,pmeinfo,DELIVER_FLAG_RECVPKT,len); } + else + { + //TODO + } for(i=0;iaddr_info->addrtype==TFE_ADDR_IPV4) + if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V4) { deliver_send_v4(thread_id,pmeinfo,payload_len,payload); } - else + else if(pmeinfo->addr_info->addrtype==TFE_ADDR_STREAM_TUPLE4_V6) { deliver_send_v6(thread_id,pmeinfo,payload_len,payload); } + else + { +//TODO + } } return 0; @@ -565,6 +602,12 @@ int mirror_stream_write(int cur_dir,const unsigned char * data, size_t len, void void mirror_stream_close(void** pme, int thread_id) { + if(g_deliver_globle_info.deliver_switch == 0) + { + return; + } + + struct deliver_pme_info* pmeinfo=(struct deliver_pme_info*)*pme; deliver_send_rst(thread_id,pmeinfo); @@ -608,6 +651,9 @@ int deliver_profile_init(const char* filepath,int* logger_level,char* logger_fil char mac_addr_str[DELIVER_MACADDR_STR_LEN]; char receiver_mac_name[DELIVER_CARDNAME_LEN]={0}; +//switch + MESA_load_profile_int_def(filepath,(char*)DELIVER_CONF_MODE,(char*)"mirror_switch",&(g_deliver_globle_info.deliver_switch),0); + //runtime log MESA_load_profile_int_def(filepath,(char*)DELIVER_CONF_MODE,(char*)"logger_level",logger_level,RLOG_LV_INFO); @@ -700,6 +746,7 @@ int mirror_stream_init(int thread_num, const char* filepath) //profile deliver_profile_init(filepath,&logger_level,logger_filepath); + //init runtime log g_deliver_globle_info.comminfo.logger=MESA_create_runtime_log_handle(logger_filepath,logger_level); if(g_deliver_globle_info.comminfo.logger==NULL) diff --git a/plugin/business/decrypt-mirroring/src/sendpkt.cpp b/plugin/business/decrypt-mirroring/src/sendpkt.cpp index 4f1bf59..1360f33 100644 --- a/plugin/business/decrypt-mirroring/src/sendpkt.cpp +++ b/plugin/business/decrypt-mirroring/src/sendpkt.cpp @@ -430,7 +430,7 @@ int deliver_build_ipv4(unsigned short carry_layer_len, unsigned char tos, unsign int deliver_build_tcp(unsigned short sp, unsigned short dp, unsigned int seq, unsigned int ack, unsigned char th_flags, unsigned short win, unsigned short urg, - const char *payload, int payload_s, unsigned char *buf) + const unsigned char *payload, int payload_s, unsigned char *buf) { struct mesa_tcp_hdr *tcp_hdr;