因为手的感觉分担了一部分本该属于头的感觉,找个东西代替手就会好些。
__u32 secure_tcp_syn_cookie(__u32 saddr, __u32 daddr, __u16 sport,
__u16 dport, __u32 sseq, __u32 count, __u32 data)
{
__u32 tmp[16 + HASH_BUFFER_SIZE + HASH_EXTRA_SIZE];
__u32 seq;
...//懒惰初始化
memcpy(tmp+3, syncookie_secret[0], sizeof(syncookie_secret[0]));
tmp[0]=saddr;
tmp[1]=daddr;
tmp[2]=(sport << 16) + dport;
HASH_TRANSFORM(tmp+16, tmp);
seq = tmp[17] + sseq + (count << COOKIEBITS); //根据4元素计算出的摘要值加上syn序列号再在高8位加上当前jiffies,seq设为S,sseq设为SS
memcpy(tmp+3, syncookie_secret[1], sizeof(syncookie_secret[1]));
tmp[0]=saddr;
tmp[1]=daddr;
tmp[2]=(sport << 16) + dport;
tmp[3] = count;
HASH_TRANSFORM(tmp+16, tmp); //又算出一个tmp[17]
return seq + ((tmp[17] + data) & COOKIEMASK); //不影响高八位的情况下计算出最终的syn-cookie,设为K
}
__u32 check_tcp_syn_cookie(__u32 cookie, __u32 saddr, __u32 daddr, __u16 sport,
__u16 dport, __u32 sseq, __u32 count, __u32 maxdiff)
{
__u32 tmp[16 + HASH_BUFFER_SIZE + HASH_EXTRA_SIZE];
__u32 diff;
...//和懒惰初始化相左
memcpy(tmp+3, syncookie_secret[0], sizeof(syncookie_secret[0]));
tmp[0]=saddr;
tmp[1]=daddr;
tmp[2]=(sport << 16) + dport;
HASH_TRANSFORM(tmp+16, tmp);
cookie -= tmp[17] + sseq; //cookie即是K,减掉了SS和4元素计算出的摘要
diff = (count - (cookie >> COOKIEBITS)) & ((__u32)-1 >> COOKIEBITS);
if (diff >= maxdiff) //从高8位得到syn包到达的时间,如果时间太久了ack才到,那么就视为非正常现象,丢弃
return (__u32)-1;
memcpy(tmp+3, syncookie_secret[1], sizeof(syncookie_secret[1]));
tmp[0] = saddr;
tmp[1] = daddr;
tmp[2] = (sport << 16) + dport;
tmp[3] = count - diff; 得到原始syn包的jiffies
HASH_TRANSFORM(tmp+16, tmp);
return (cookie - tmp[17]) & COOKIEMASK; //最终得到data
}
自己×××头部为何没有别人×××舒服-还有syn-cookie
原创
©著作权归作者所有:来自51CTO博客作者dog250的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
低代码为何这么“香”
带你熟悉低代码开发,实现应用的快速开发和上线。
开发者 数据 数据库 低代码 astro -
为何别人会仿造自己的作品
由于Apple是原创,采取正确的措施,所以仍然是手机世界的老大。在第三方插件市场,要想打消同行仿造的恶性竞争思想,最好的方法就是给他们灌输正确的竞争思想,这就是:第三方插件象牙宝塔……
开发什么能赚钱 业内权威 中华开发者 开发者无从选择 赚钱规则 -
为什么你的 IntelliJ IDEA 没有别人的好用?
为什么你的 IntelliJ IDEA 没有别人的好用?
java 编程语言 eclipse github python