内核数据包处理
数据包处理的一些建议前言 我们大局部功能都需要解析数据,进行一系列的包匹配完成,但是目前,我们没有一个很好的框架来简化这个过程,大家处理数据包都是采用原生的linux内核接口,并且没有统一的标准要求如
数据包处理的一些建议 前言 我们大局部功能都需要解析数据,进行一系列的包匹配完成,但是目前,我们没有一个 linux 很好的框架来简化这个过程,大家处理数据包都是采用原生的内核接口,并且没有统 一的标准要求如何使用这些接口,所以,存在大量的陷阱,一不留神就造成宕机。 IP 获取头部 iph=ip_hdr(skb); structsk_buff{ ...... sk_buff_data_ttransport_header;/*Transportlayerheader*/ sk_buff_data_tnetwork_header;/*Networklayerheader*/ sk_buff_data_tmac_header;/*Linklayerheader*/ ...... } 1__netif_receive_skb()network_header 〕在进入三层处理前就对进行了设置。 2ip_rcv()IPnetfilter 〕中详细的检查保证了头部到后是完整的。 3netfilterip 〕可以尽情使用头部。 tcp 获取头部 1 错误: tcph=tcp_hdr(skb); 陷阱: netfilterTCP/IPTCP 的钩子点是属于协议栈的三层流程中,而四层的头部此时还没有 IP 正确获取,只是初始化为头部的值,无法直接使用。 2 错误: tcph=(char*)iph+(iph->ihl<<2); 陷阱: 数据包可能是非线性的

