最近因为要做防火墙相关的一些东西,看了一下ipfw,发现它被调用是在IP分片重组之前的,直接在交给IP层处理之前就做了过滤:
ether_input -> ether_demux -> ether_ipfw_chk -> ip_fw_chk_ptr [ipfw_chk]
处理之后如果需要往下走,才进行协议分析并调用netisr_dispatch交给协议栈处理。在ipfw_chk函数中对于分片的第一个分片直接确认它至少有一个L4的协议头,否则就失败了:
#define PULLUP_TO(len, p, T) \
do { \
int x = (len) + sizeof(T); \
if ((m)->m_len < x) { \
args->m = m = m_pullup(m, x); \
if (m == NULL) \
goto pullup_failed; \
} \
p = (mtod(m, char *) + (len)); \
} while (0)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有