#if 0 1.本部分代码主要两个功能 1)完成底层数据包的获取, 支持多种数据获取方式pag,ppf,pfring, 2) 完成tcp、udp的流还原功能 3) 完成插件挂载功能 ********************************************************************* 20130802 刘庆云 1)tcp建立链接时,为了抗攻击,对单侧流必须有第三个包 2)增加控制开关,选择建立链接的方式 **************************************************************************** 20130803 刘庆云 优化流还原模块的处理 1) 每个包到来时按照两侧端口号,建立临时流表; 如果出现小端口为服务端时,通过syn判断出后,颠倒四元组; 每个流表进行hash时不在进行判断,直接用四元组; 2) 流表加入hash时按照四元组大小进行排序,插入的位置在findstream时提前算好,减少插入时的计算; 3) dealpkt部分的代码重新梳理,后得出能够独立运行的代码,不在依赖外层的 stack,support 4) 编写测试部分的独立测试函数,并进行测试; **************************************************************************** 20130805 刘庆云 1) 建立流表的端口的改为判断主机序列; 2)双向流收到第三个包后,直接进入数据表,起到保护真实链接的目标; **************************************************************************** 20130813 刘庆云 1)tcp流表的查找改为折半查找 ********************************************************************************************* 20130821 李佳 1)针对某项目需求: 如果IP包是由多个IP分片包重组而成, 应用层插件可以获取所有原始IP分片包, 新增加raw_ipfrag_list结构, 并在streaminfo结构中添加原始IP分片列表头指针. 修改stream.h、dealpkt.c、dealtcp.c、deal_ipv4.c、deal_ipv6.c、ip_reassembly.c等与IP分片相关代码. **************************************************************************** 20130822 刘庆云 1)增加tcp全包回调接口,全包回调时可能会没有pdetail, 2)为了能够判断正确是否有pdetail,之前服用pdetail信息来存储synseq的方式不再可行,增加了变量用于临时记录seq 同时,为了能够同时支持两种模式增加了pktstate和用于函数上下文的变量pktallme pktstate的变换逻辑如下:第一个包为pending,如果有函数需要则该为data,如无需要改为close,链接淘汰时为close 3)当有全包获取函数挂载时,正常的fin,rst不会淘汰链接只能等淘汰 4)为了在不同tcp接口情况下,挂载函数能够统一管理,函数调用链表函数需要传入xxstat和xxpme; 5) streaimindex改为预先分配需要的个数,这样是为了防止当处理过程中调用tcp_free_stream之后又进行使用出现野指针 另外一种避免的方法是没错传入**,接口比较麻烦,暂未使用 6)增加takeover模式,目前只支持注册一个接管函数; 7) syn+rst的报文也建立链接 ********************************************************************** 20130826 刘庆云 1) mkstreamhash 用frand参与hash运算多了一次拷贝, 并且大部分情况为0,造成hash冲突,因此只用地址参与运算 ********************************************************************** 20130917,18 刘庆云 1) hash_add_stream 必须在streamaddlist前进行,否则streamaddlist内淘汰一些链接后会造成 hash_add_stream利用的之前查找的结果为错误结果 2) 每次淘汰的链接数目为总链接数目的2% ****************************************************************************************** 20130922 李佳 1)增加NPacket捕包方式, 编译参数"CAPTURE_MODE=$(LINK_NP)", 对应配置文件"capdatamodlel=5" ****************************************************************************************** 20140302 刘庆云 从dealpkt到platform 合并之前的各种修改 1)dealpkt目录增加ipv6支持 2)dealpkt目录合并之前修改的tcp_allpkt接口,调整等 3)dealpkt目录合并之前修改的丢包计数分侧的bug 4)dealpkt目录中dealpkt.c dealtcp.c未合入108相关代码, call_app未合入863_control的代码 5)合并plugin 支持插件管理功能 (1)程序调用接口:plugctrl_proc() ;(无参数) (2)程序作用: a、自动扫描解析层、业务层、兼容插件三个文件夹下插件(默认路径分别是./plug/protocol,./plug/business,./plug/general,可通过./wyqd.conf中参数更改此路径),调用其初始化函数; b、并将IP_ENTRY,TCP_ENTRY,UDP_ENTRY三个入口指针分别挂载到对应函数调用链上; c、保存其他入口函数指针,解析层调用时使用; ****************************************************************************************** 20140322 刘庆云 为了支持代理嵌套,进行了若干修改 1)tcp部分原来设计只有当进入data状态后,才分配pdetail的空间;现在修改为 流一建立就分配pdetail的空间,当进入data后才分配half的空间 2)重新规整了stream结构体的定义, 原来和流相关的一些变量,全部移入pdetail,包括apme等; 3)流表的管理,用最里层的地址做hash,用多层地址递归进行比较 4)初步添加了对vlan的处理函数,待完善 ****************************************************************************************** 20140323 刘庆云 为了支持应用层代理,进行修改 1) tcpdetail结构体内增加proxylist指针,记录代理情况 2) proxylist的申请,释放,有代理解析层控制; 3) 代理结构体内自带pme,opstate,用这两个变量回调所有的接口函数 ****************************************************************** 20140406 李佳 1)增加对隧道的处理,理论上支持无限嵌套模式; 2)修改stream.h中ADDR_TYPE_IPV4地址类型定义,不再代表基于IPv4地址的四元组, 而是真正的IPv4地址对, 四元组使用struct stream_tuple4表示; 3)细化分层结构,TCP层不再存储四元组信息,而是仅存储本层的端口信息, 计算HASH以及地址比较时,再通过fstream找到IP地址; 4)修改计算HASH函数、HASH冲突后的比较函数; 5)将某项目的特殊应用,如标签、stream_id、原始IP分片包剥离并模块化, 使用开关灵活控制某个模块的启用; 6)把底层捕包库封装成.so模式,在不同的捕包模式间切换时,只要修改配置文件即可,无需从编译。 ****************************************************************** 20140422 李佳 1)为了处理效率,减少内存占用,及插件获取四元组的易用性, 将TCP、UDP的端口存储于IP层,TCP层用指针指向IP层此块内存,即可以直接获取四元组信息。 ****************************************************************** 20140515 李佳 针对863-UDP流还原测试硬件环境,增加QNF捕包接口. ****************************************************************** 20140616 李佳 1)增加project管理模块,在stream->pproject结构中,可以任意挂载多个应用信息; ****************************************************************** 20140619 李佳 1)增加raw_pkt_t结构,存储从捕包库获取的原始包信息; 2)插件入口函数增加原始包参数; 3)修改IP分片重组流程,支持隧道多层嵌套模式 ****************************************************************** 20140721 李佳 1)IP分片重组HASH支持多层嵌套模式; 2)将原IP分片重组HASH模块改成基于MESA_htable实现; ****************************************************************** 20140901 李佳 1)串联模式下,应用可能会误改原始包,增加对原始包数据校验功能。 ****************************************************************** 20140910 李佳 1)增加MESA_inject_pkt()发包接口,简化造包操作,减少传参数量. ****************************************************************** 20140922 李佳 1)增加MESA_kill_tcp_synack()接口, 用于IP-HMD的欺骗连接; ****************************************************************** 20141011 李佳 1)增加读取配置文件变量maxrandval, randkeyval,用于识别系统发出的RST包; 2)fd补救由平台实现, 插件可以认为MESA_kill_tcp()是可靠的! ****************************************************************** 20141113 李佳 1)修改创建连接有地址翻转时,因TCP流表查找错误,造成无法识别某些流的BUG。 ****************************************************************** 20141115 李佳 1)增加MESA_kill_connection()函数,除了可以实现MESA_kill_tcp()原有功能外, 还可以在串联模式下,对基于流的非TCP协议做fd(drop packet). ****************************************************************** 20141120 李佳 1)增加pcap读大包模式进度条显示,预测处理时间. ****************************************************************** 20141125 李佳 1)修改pcap模式下, 多线程分流BUG,其他模式(pag、pfring、dpdk等等)不受影响。 2)更新plunin模块,version:2014-11-24 ****************************************************************** 20141127 李佳 1)修改最大乱序包数最大值,由255扩展为65535, 修改了stream.h中关于maxunorder的定义. ****************************************************************** 20141202 李佳 1)修改在pcap读包模式下,读包线程调用freeall_stream()早于工作线程导致的BUG; 2)增加平台和packet_io_lib版本号对比判断,如果不一致会打印警告信息; 3)修改淘汰UDP流时,pktstate没有正确设置为CLOSE状态BUG; 4)配置文件增加"UdpStreamTimeout", 用于设置开启UDP流还原时,超时淘汰时间; 增加"load_plug_switch", 用于动态开启是否加载插件; 5)增加了sysinfo.log统计信息显示. ****************************************************************** 20141204 李佳 1)修复在pag模式下运行时,IPv4和IPv6共存时的BUG, 在顶级Makefile中增加"USE_PAG_GET_FRAME", 根据环境选择是否使用pag_get_frame()直接获取mac包. ****************************************************************** 20141205 李佳 1)修复IPv6-UDP数据包, 在开启UDP流还原的情况下, 无法找到对应的流, 造成HASH冲突链表爆炸BUG。 ****************************************************************** 20141208 李佳 1)增加build_net_layer_gre()函数,可以构造带GRE协议的rst包. ****************************************************************** 20141211 李佳 1)修改因IP分片重组后的包,而触发调用MESA_kill_tcp()的BUG; 2)修改MESA_kill_tcp()计算包长度BUG; 3)原始包结构raw_pkt_t中增加__magic__, 用于在papp和sapp平台之间区分原始包void *的实际类型. ****************************************************************** 20141217 李佳 1)增加pag模式下,使用pag_get_frame接口功能, 用顶层Makefile的USE_PAG_GET_FRAME选项控制; 2)修改流还原按data建连接时,以大端口为源的规则; 3)修改了因重载了系统标准库exit(), 造成程序退出时莫名其妙的BUG. ****************************************************************** 20141219 李佳 1)为了兼容之前插件, 修改IPv4, IPv6层插件原始包指针为本层IP包指针. ****************************************************************** 20141223 李佳, 刘庆云 1)增加SAPP_PKT_CB_FUN_T回调函数类型: char SAPP_PKT_EXAMPLE(const struct streaminfo *pstream, const void *this_hdr, const void *raw_pkt); ****************************************************************** 20141224 李佳 1)修改stream.h,将内部变量与外部变量分离,根据功能的不同,将stream.h分拆为: #include "stream_inc/stream_base.h" #include "stream_inc/stream_proxy.h" #include "stream_inc/stream_project.h" #include "stream_inc/stream_inject.h" #include "stream_inc/stream_control.h" #include "stream_inc/stream_entry.h" #include "stream_inc/stream_rawpkt.h" ****************************************************************** 20141225 李佳 1)将ip分片重组类型的包,用Pkttype标识,用于流管理层识别. 2)增加了一些不常见的协议类型处理, 如vlan、pppoe、ppp的非数据传输层协议. ****************************************************************** 20141226 李佳 1)增加PPP和GRE协议的解析; ****************************************************************** 20141230 李佳 1)增加addr_type_to_string()函数,用于插件输出协议地址类型字符串; 2)增加get_this_layer_header(),用于插件获取本层头部地址; 3)修改STREAM_CB_FUN_T回调函数的"原始包"参数,改为传输下层IP层的头部, 真正的全原始包应使用SAPP_STREAM_FUN_T类型回调. ****************************************************************** 20141231 刘庆云 李佳 1)平台同时支持传原始包和本层包头的接口,增加回调函数类型定义, 修改callapp.c中stream_register_xxx和stream_process_xxx系列函数. 2)合并dictator2的20141217版本. ****************************************************************** 20150104 李佳 1)修改stream_base.h, 将pkttype移动至struct layer_addr结构中, 将routedir扩展为uchar类型; 新增MESA_dir_reverse()函数, 用于发包时反向routedir. stream.h增加版本号和MD5验证值. 2)增加MESA_fakepacket_xxx系列函数. ****************************************************************** 20150107 刘庆云 1)reset重建链接时,重置计数器 2) 判断syn是否重传的条件 从原来的(thisseq+1 == rcv->first_data_seq) 改为( rcv->first_data_seq-thisseq <=1) 3) 为了防止syn重置的链接syn在第一个链接里面,改为先调用tcp,再调用tcpall 4) 由于3)的修改,对于每个链接重置时rst,需要传递原始包给free_stream的函数 ****************************************************************** 20150112 李佳 1)修改tcp_deal_data_stream,tcp_save_unorder,deal_tcp_stream等函数的参数, 增加Iphdr和tcphdr参数,用于传递重组后的IP分片包。 2)FD补救时增加判断条件,只有tcpdatalen > 0时,才继续调用MESA_kill_tcp, 以防止攻击或本机发送的RST包又被捕获; ****************************************************************** 20150123 刘庆云 1) pkttype 增加PKT_TYPE_TCPREORDER,需要每个包来了赋值 2) proxy增加对地址的虚拟转换 ****************************************************************** 20150126 lqy yw 1) pkttype 增加PKT_TYPE_TCPRESTRAS 增加重传报文的类型 2) tcp_stream_free重置顺序,先进行tcp,再进行tcpall 3) pkttype 分离成两个变量,pktipflagtype ****************************************************************** 20150129 李佳,刘庆云, 刘洋 1)sapp增加-v参数,用于识别版本功能, 对外提供的可执行文件要strip, 通过nm命令无法查看. 2)sapp内置libsesame_door,用于限制平台使用范围,保护软件产权; 3)callapp内支持udp_raw接口 4)插件管理更改;打开解析层插件,符号表为全局可见 ****************************************************************** 20150203 李佳 1)新增四个地址转换函数: const char *stream_addr_list_ntop_outward(const struct streaminfo *pstream); const char *stream_addr_list_ntop_inward(const struct streaminfo *pstream); const struct streaminfo *stream_addr_list_pton_outward(const char *addr_list_str, int thread_index); const struct streaminfo *stream_addr_list_pton_inward(const char *addr_list_str, int thread_index); 修改stream_base.h, 增加以上函数声明. 2)增加类型定义PKT_TYPE_IP_FRAG; 增加stream_register_ip_frag, stream_register_ipv6_frag入口函数. ****************************************************************** 20150205 李佳 1)增加基于PPP,GRE协议的RST包构造功能, 因GRE没有创建流,目前只能单向发送RST. ***************************************************************** 20150210 刘庆云 1) 修正tcp链接单流变双流时max_unorder未设置的问题 2) nouse状态看到syn标识重置链接,这样能够看到新流的建立过程; 3) 对于fin状态后的数据在未开tcpall接口时,tcp会新建链接进行处理 而开tcpall接口后,这些包都不会被tcp看到 tcpall接口的引入引起tcp处理包数的变换, 从正常协议栈的角度,引入tcpall接口后的处理是正常的; 但是有恶劣的情况是,tcp四元组复用,而又丢了syn的链接不能正常处理 ***************************************************************** 20150225 刘庆云 1)记录tcp报文的重叠长度internal内增加变量tcpoverlen 2)tcplen>0但是带fin,rst等标志的数据包不建立链接 3)对于syn后面第一个数据包乱序的情况,置标志位为tcpunorder 4)更新dictator2 到20150215版本 ****************************************************************** 20150226 李佳 1)修改stream_base.h, 将地址转换函数接口变更为: int stream_addr_list_ntop(const struct streaminfo *pstream, char *dst, int size); int stream_addr_list_pton(const char *addr_list_str, void *dst, int size, int thread_index); ****************************************************************** 20150306 李佳 1)解决隧道模式下, IPv6层无法回调的BUG. ****************************************************************** 20150311 李佳 1)解决IP分片重组包同时在TCP层是乱序包的BUG, (之前已解决, 后来在20150126版将pkttype分离后, 没有对pktipflagtype赋值, 此BUG重现). ****************************************************************** 20150312 李佳 1)修复raw_ip_frag_list模块,v4和v6混乱的BUG. ****************************************************************** 20150316 刘洋 1)1-plugin.c:1259 add funelem->called_flag =1; 否则如果pending状态没有调用业务层插件,每个data状态都会有pending的标示 2-pending 增加called_flag的初始化 3-close增加对调用的判断:如果该插件曾经被调用过或者当前字段是该插件所 需要的字段才在close状态调用,否则不调用 ****************************************************************** 20150319 李佳 1)修改tcp_change_stream_todata()函数, TCP半流结构内存泄露BUG. 2)平台不再使用liblogger.so. ****************************************************************** 20150311,25 刘庆云, 李佳 1)更新plugin到_20150325版本 2) 修改了乱序报文中对于cout_ideal的重置过程 3)0319修改tcp_change_stream_todata()函数, TCP半流结构内存泄露BUG . 4)0311对乱序缓存的数据,增加判断是否有重传重叠,如有则矫正 5)修改了对于seq的比较时出现的问题改为用after,before函数比较 6) 去掉了老版本的logger,更新为MESA_handle_logger 7) 修改test_app.so, TCP层插件统计信息错误BUG. ****************************************************************** 20150327 李佳 1)修改mac_n2p_fun()BUG. ****************************************************************** 20150409 李佳 1)修改配置参数MaxUdpStreams=0时, UDP插件得到的pdetail为NULL的BUG. ****************************************************************** 20150415 李佳,刘庆云 合并papp在20150401的BUG修复: 1)修改deal_tcp.c 对乱序包的处理逻辑 对于达到最大乱序数目的链接,乱序中又出现乱序的情况,跳出本次乱序处理; 对于乱序包的cout_ideal重置条件进行,只有当序号大时才从 ****************************************************************** 20150416 李佳 1)增加cycle_pkt_dump功能, 解决在线流量出了BUG,无法重现问题. main.conf中新增3个配置项: [pkt_dump] pkt_dump_switch=0 //总开关 pkt_dump_file_max_size=10000 //单位:MB, 每个线程 pkt_dump_file_root_dir=/dev/shm //pcap存储路径, 推荐/dev/shm, 速度快 ****************************************************************** 20150430 李佳 1)修改配置文件对连接超时时间无效问题. LinkTimeout=0, 用于TCP UdpResetTime=0, 用于UDP ********************************************************************* 20150507 李佳 1)新增加TCP连接数, 新建连接数,销毁连接数,HASH表冲突数统计。 ********************************************************************* 20150508 李佳 1)增加UDP连接数统计. ********************************************************************* 20150512 李佳 1)修复GRE负载长度为0时, Invalid read的BUG. ********************************************************************* 20150526 李佳 1)修复pkt_dump模块, 因信号中断读写错误的BUG. ********************************************************************* 20150610 李佳 1)修复流超时淘汰BUG. ********************************************************************* 20150612 刘庆云 1)修复del_stream_by_time()从链表尾部淘汰BUG. ********************************************************************* 20150615 李佳 1)修复MAC地址src,dst与流创建的反向不一致问题. ********************************************************************* 20150702 李佳 1)增加GRE-IPv6协议的解析。 ********************************************************************* 20150703 李佳 1)main.conf增加配置选项"skip_not_ip_layer", 用于双栈环境无法发送非IP承载的RST包问题。 ********************************************************************* 20150715 李佳 1)修复丢流BUG,原因: 在HASH函数比较地址时,只比较了IP忘记了端口,当在一个HASH-SLOT中有多个冲突链时, 如果凑巧这些四元组的IP都是相同的,那么就会造成后续的新包被误认为是已有流的一部分, 而不会被识别成一个新流. 2)增加从程序启动以来,处理的所有流数统计信息。 ********************************************************************* 20150902 李佳 1) 集成iknow, 方便获取更多、更详细的辅助信息; ********************************************************************* 20150908 李佳 1) 修改pkt_dump模块, 可以设置所有历史包总大小, 防止程序频繁重启造成无限制写硬盘; ********************************************************************* 20150916 李佳 1)集成MESA_sleep(), 防止在2.6.32内核以上,usleep(1)CPU占用率过高问题. ********************************************************************* 20150922 李佳 1)修改Iknow回调函数接口定义. ********************************************************************* 20150928 李佳 1)修改pcap捕包模块获取原始包长BUG, 应该使用caplen而不是Len, 因为可能没有加-s0选项,造成实际捕获的长度比理论包长小. ********************************************************************* 20150929 李佳 1)增加topsec捕包库接口, 用于木马设备项目, 不再单独维护一个分支版本. ********************************************************************* 20151014 李佳 1)增加MESA_sleep到平台,解决usleep()在高内核版本下CPU占用率太高问题. ********************************************************************* 20151027 李佳 1)修复不能按已有方式识别本机发出的RST包的BUG。 ********************************************************************* 20151030 李佳 1)修改teredo识别不准确问题; 2)修改sysinfo.h相关宏定义, 某些与start旧版有冲突, 造成sysinfo.log计数不准; ********************************************************************* 20151102 刘庆云,李佳 1)修改因乱序包触发插件返回DROPPKT,造成平台乱序包链表逐渐增长,致使CPU占用率高的BUG; ********************************************************************* 20151104 李佳 1)修改TCP、UDP流还原之后,没有更新IP分片状态标志BUG. ********************************************************************* 20151105 李佳 1)修改pkt_dump模块性能较差问题; ********************************************************************* 20151106 李佳 1)修改pkt_dump模块, 捕获SIGSEGV信号, 在信号处理函数中调用sync(), 保证触发segment fault的pcap包真正的保存到硬盘; ********************************************************************* 20151109 李佳 1)修改pkt_dump模块,增加BPF-Filter过滤功能. ********************************************************************* 20151112 李佳 1)增加新函数tcp_set_single_stream_drop_by_time(), 设置当前流不再根据RST、FIN等标志结束, 只能等超时、或移至LRU队尾后被free. 用于某些业务使用第三方的FD补救使用. ********************************************************************* 20151112-2 李佳 1)增加函数MESA_set_stream_opt(), 用于控制单个链接的属性, 使用类似setsockopt的方式, 不再增加独立函数. ********************************************************************* 20151118 李佳 1)去掉捕包模式下对包长度是否超过MTU的检查, 因为在TSO模式下, 本机捕包经常会有单包长度几万字节的情况, 导致应用层插件莫名其妙收不全数据。 ********************************************************************* 20151125 李佳 1)解决平台在高版本系统下编译警告和错误; 2)关闭Iknow的DEBUG打印信息; ********************************************************************* 20151207 李佳 1)修改流创建结构, 将IP和端口绑定在一个地址集合, 普通IPv4, IPv6协议只需一个streaminfo结构, TCP层不再通过pfather指针指向IP层地址, 可节约内存和提高性能; ********************************************************************* 20151209 李佳 1)增加配置参数: skip_ethernet_layer, 用于控制是否跳过ethernet层, 不再处理MAC地址信息, 提高运行效率. ********************************************************************* 20151215 李佳 1)HASH冲突链表增加LRU机制, 将最近使用最频繁的流放于链表第一个, 提高查找效率; 2)使用LINUX内核HASH时, 一次makehash计算可以得到多个HASH值, 使用一个HASH用于确定在HASH_SLOT的位置, 再使用另一个HASH用于快速比较地址是否相等. ********************************************************************* 20151223 李佳 1)在乱序包的情况下, 先增加了数据包和字节数, 导致插件还未拿到当前数据包, 但实际字节数已经增加, 导致计数不准确, 已修复. ********************************************************************* ************************* 2016 year ********************************* ********************************************************************* 2016-01-19 李佳 1)修复因将IP-PORT合并之后, inet_addr_list函数BUG。 ********************************************************************* 2016-06-08 李佳 1)修改在按data建连接时, 调用了TCPALL插件后, 即便插件返回DROP, 仍然会调用TCP插件的逻辑, 导致HMD不生效问题. ********************************************************************* 2016-06-15 李佳 1)增加丢弃纯ACK包功能, 靠配置文件discard_ack控制; 2)修改FD补救时, 由原来发送3个RST, 减少为1个. ********************************************************************* 2016-06-21 李佳 1)增加配置项:kill_tcp_remedy, 用于控制是否开启FD补救功能. ********************************************************************* 2016-09-01 李佳 1)for soq项目, 增加对隧道协议L2TP, PPTP, IPSEC的连接检测与日志记录。 新增stream_tunnel.h. ********************************************************************* 2016-09-30 李佳 1)修复IPv6分片重组线程ID设置错误, 导致在开启dictator后coredump, 而是用普通malloc模式无问题. ********************************************************************* 2016-10-09 李佳 1)修改stream_inject.h, 增加MESA_kill_tcp_feedback()等带反馈功能的函数接口. ********************************************************************* 2016-10-12 李佳 1)增加L2TP协议的FD功能. ********************************************************************* 2016-11-10 李佳 1)针对WY发包特殊需求--某插件不论网络中有无数据包, 都不能阻塞等待, 必须被持续不断调用, 新增POLLING类型插件入口, 保证无数据包时, 也会调用此接口的插件. ********************************************************************* 2016-11-24 李佳 1)修改sapp目录结构, 将原来test拆分为运行目录run, 和源码目录entry, 便于部署批量copy. ********************************************************************* 2016-12-01 李佳 1)增加PPP协议解析CHAP认证的用户名功能. ********************************************************************* 2016-12-05 李佳 1)修改stream_base.h, 增加layer_addr_ntop(), layer_addr_prefix_ntop(). ********************************************************************* 2016-12-15 李佳 1)增强IPv4包格式的校验, 增加对包截断等情况的判断; 1)修复pptp HASH插入失败后没有free的BUG. ********************************************************************* 2016-12-20 郑超, 李佳 1)更新dictator, 修复realloc BUG. ********************************************************************* 2016-12-21 李佳 1)更新stream_addr_list_ntop, stream_addr_list_pton等函数, 修改地址字符串前缀命名, 更易读. ********************************************************************* 2016-12-22 李佳 1)修复平台在非X86平台下无法编译问题; 2)修改dictator初始化读取配置文件顺序BUG. ********************************************************************* 2016-12-26 刘洋, 李佳 1)刘洋修改plungin, 插件加载失败后, 调用dlclose关闭dlopen打开的文件句柄; ********************************************************************* 2016-12-27 李佳 1)修改pptp解析层调用业务插件时, streaminfo结构体为NULL的BUG; ********************************************************************* 2016-12-29 李佳 1)修改pptp隧道无法反向inject包的BUG(暂时只支持双向流反向inject, 单向流仍无法支持); ********************************************************************* ************************* 2017 year ********************************* ********************************************************************* ********************************************************************* 2017-01-03 李佳 1)增加L2tp解析层HASH冲突严重问题, 超过阈值后不再处理新流. 2)修改TCP流管理BUG, tcp_reset_stream()将当前流移出lru_list, 在tcp_deal_unorder()函数中, 可能会再调用tcp_change_stream_tonouse(), 再次调用streamleavlist, 致使plist->head, tail都为NULL. ********************************************************************* 2017-01-05 李佳 1)修改PPTP, L2TP协议解析层hash算法, 减少冲突率. ********************************************************************* 2017-01-09 李佳 1)因2016-12-26, 插件加载失败后, 调用dlclose关闭dlopen打开的文件句柄的方案会造成程序崩溃且无法查看函数调用栈, 所以不再主动dlclose句柄; 2)修改打开ip_frag_list功能后, UDP超时重置时造成内存泄漏的BUG; 3)修改增加MESA_kill_tcp_feedback()函数后, MESA_sendpacket_iplayer()等函数, 在调用packet_io_send_fake_pkt()时, 传递参数错误BUG. ********************************************************************* 2017-01-20 李佳 1)pcap模式启用dictator后, 读包完退出时free线程不是包处理线程, 造成dictator assert失败. ********************************************************************* 2017-02-10 李佳 1)layer_addr_ntop()增加OpenVPN协议; 2)修改l2tp, pptp二元组HASH算法,减少HASH冲突; 3)临时增加SAPP_INSECTICIDE宏,用于检查莫名其妙的BUG,尽量早发现问题。 ********************************************************************* 2017-02-11 李佳 1)增加TCP-RST, UDP发包统计计数; ********************************************************************* 2017-02-16 李佳 1)修改get_stream_carry_tunnel_type()对于PPTP, L2TP的识别BUG。 ********************************************************************* 2017-02-24 李佳 1)因DPDK初始化时绑定当前线程到某CPU核心, 导致后续动态创建的所有线程都默认继承这个行为, 全绑定到同一个核心, 修改packet_io和plug_proc的初始化顺序。 ********************************************************************* 2017-04-07 李佳 1)增加新的pag_marsio模式, 主要用于使用marsio的pag_get_frame接口,和之前Zhuanyong网卡的pag_get_frame区分。 ********************************************************************* 2017-04-21 李佳 1)集成327的Ipfile读包模式。 ********************************************************************* 2017-05-11 李佳 1)main.conf增加配置文件ipentry_priority_over_ipfrag,用于控制IP层和IPFRAG层调用优先级; 2)增加包类型PKT_TYPE_IP_FRAG_LAST,表示同属于一个原始IP包的最后一个IP分片包。 ********************************************************************* 2017-05-15 李佳 1)支持marsio-4.1原生接口. ********************************************************************* 2017-06-12 李佳 1)平台修改流淘汰机制, 业务插件可设置独立的超时时间, 如果UDP流一段时间无包到达, 也不会因流表满而遭淘汰。 ********************************************************************* 2017-06-28 李佳 1)增加检测实际运行环境的stream_inc和当前sapp版本不一致,打印警告功能。 ********************************************************************* 2017-07-10 李佳 1)marsio模式,则增加从main.conf中获取app_name功能; 2)修改UDP超时淘汰机制,除reset当前流外,还可以淘汰其他超时的流; ********************************************************************* 2017-08-03 李佳 1)增加TCP单向流推测对端ISN功能; 1)增加TCP单向流推测对端总计接收字节数功能; ********************************************************************* 2017-08-08 李佳 1)修改tcpdump_mesa, 支持指定捕包线程ID ********************************************************************* 2017-08-24 李佳 1)修改tcpdump_mesa, 增加捕包采样率,防止在大流量环境下丢包。 ********************************************************************* 2017-09-04 李佳 1)增加函数sapp_get_platform_opt(), 供插件获取平台内部参数,如包数、字节数等。 ********************************************************************* 2017-09-05 李佳 1)修改tcp获取syn包选项dir方向参数BUG; ********************************************************************* 2017-09-26 李佳 1)修复2017-05-11修改ip_entry和ip_frag_entry调用优先级,导致IP包会调用ip_frag_entry的BUG. ********************************************************************* 2017-10-03 李佳 1)增加解析TCP包头部选项TCP_OPT_MULTI_PATH_TCP, 因选项不定长,且可能超过8字节, 原有结构不适用,为了向后兼容同时支持新选项, 新增struct tcp_option_ext结构, 及函数MESA_get_tcp_pkt_opts_ext(). ********************************************************************* 2017-10-10 李佳 1)修改在DDP模式下tcpdump_mesa的包捕获位置,可以捕获DDP内封装的原始包。 ********************************************************************* 2017-10-16 李佳 1)增加判断四元组重用的判断。 2)增加iknow_switch配置文件, iknow功能可以关闭, 默认开启. 3)增加symbol_conflict_check配置文件, 符号名检查可以关闭, 默认开启. ********************************************************************* 2017-10-19 李佳 1)增加anti_flood模块, 用于抵御SYN_flood, DNS_flood攻击; 2)修改TCPALL插件, 因乱序的SYN, SYN/ACK包,被误认为是四元组重用, 重置连接而导致被分拆为两个流的BUG. ********************************************************************* 2017-10-31 李佳 1)修复因pcap.h, libpcap.so在纯新的系统上缺失,第一次无法编译的情况; 2)修复PPTP隧道协议,因PPP头部压缩且没有获取PPTP控制连接时,无法解析的问题。 ********************************************************************* 2017-12-20 李佳 1)l2tp_protocol_plug修复地址解析长度超范围BUG; 2)更新TCP流还原机制, 四元组重用判断与最后一个包的时间间隔, 太短则认为是恶意逃逸, 丢弃. ********************************************************************* ************************* 2018 year ********************************* ********************************************************************* 2018-01-19 lijia add, 1-多个tcpdump_mesa同时启动时, 后续的连接会抢占第一个连接的数据流, 但使用第一个连接的过滤条件, 增加TCP命令连接的确认机制, 如果sapp不回复确认包, tcpdump_mesa不启动捕包. 2-增加丢包计数, 如果使用-a参数指定perceptive模式, sapp在发送包时, 在源MAC地址上打上序号, tcpdump_mesa检查序号是否连续, 以确认中间是否有丢包, 丢了几个包. ********************************************************************* 2018-03-02 lijia add, 1)因并联模式FD效果不好,增加FD补救向GDEV下发规则功能,依靠串联丢包提高FD率。 ********************************************************************* 2018-03-13 李佳 1)修复teredo隧道非标准端口无法识别问题. ********************************************************************* 2018-03-23 李佳 1) 修复GDEV规则下发插件BUG. ********************************************************************* 2018-04-25 李佳 1)修复get_this_layer_header()函数, 在流超时淘汰时的BUG; ********************************************************************* 2018-07-10 李佳 1)修改private_ip段识别错误BUG; ********************************************************************* 2018-08-01 李佳 1)针对3x7项目,增加剥离3x7数据包头功能,将内层原始数据包再注入ipv4_entry(); ********************************************************************* 2018-08-03 李佳 1)修复IP头部检测不支持ESP问题, 导致IPSEC业务被丢弃. ********************************************************************* 2018-09-23 李佳 1)增加对MAC_IN_MAC回流镜像格式的处理; 2)修复MAC_IN_MAC封装格式下, RST发送BUG. ********************************************************************* 2018-10-13 李佳 1)修改IP包头检测函数, 对协议类型字段的检查, 防止误丢弃某些不常见协议的数据包. ********************************************************************* 2018-10-19 李佳 1)修改field_stat输出TCP并发连接数BUG. ********************************************************************* 2018-10-24 李佳 1)增加对MAC_IN_MAC的地址解析, 从中获取GDEV_ID, LINK_ID, LINK_DIR等参数. ********************************************************************* 2018-11-02 李佳 1)修改mpls_hdr头部定义错误; 2)解析多层嵌套MPLS数据包. ********************************************************************* 2018-11-05 杨威 1)修改源码, 适配cmake编译. ********************************************************************* 2018-11-08 杨威 1.更新gprs tunnel协议识别逻辑,使用identify_gtp函数,取代原有的仅识别端口的逻辑 2.更新packet_io_send_fake_pkt_gdev函数逻辑,正确的计算偏移填写发包内容时的data和datalen 3.更新packet_io_send_fake_pkt,对于注入发包,直接调用packet_io_send_fake_pkt_by_gdev 4.MESA_send_handle新增raw_udp_fd用于从udp负载开始发送注入包 ********************************************************************* 2018-11-09 杨威 1.整理TODO,按重要程度分级 2.移除run目录下的log文件 3.更新GTP处理逻辑,增加对带seq消息的处理并保存在地址中 ********************************************************************* 2018-11-12 杨威,李佳 1.更新GTP处理逻辑, 增加对端地址(TEID,SEQ等)更新逻辑。 #endif