1
〕
__netif_receive_skb()
在进入三层处理前就对
network_header
进行了设置。
2
〕
ip_rcv()
中详细的检查保证了
IP
头部到
netfilter
后是完整的。
3
〕
netfilter
可以尽情使用
ip
头部。
获取
tcp
头部
错误
1
:
陷阱:
netfilter
的钩子点是属于
TCP/IP
协议栈的三层流程中,而四层的
TCP
头部此时还没有正
确获取,只是初始化为
IP
头部的值,无法直接使用。
错误
2
:
陷阱:
数据包可能是非线性的
struct sk_buff {
......
sk_buff_data_t
transport_header;
/* Transport layer header */
sk_buff_data_t
network_header;
/* Network layer header */
sk_buff_data_t
mac_header;
/* Link layer header */
......
}
iph = ip_hdr(skb);
tcph = tcp_hdr(skb);
tcph = (char *)iph + (iph->ihl << 2);