- 论坛徽章:
- 0
|
原帖由 skipjack 于 2006-5-15 15:07 发表
没有你想像的那么复杂,过程是这样的:
1.用ADSL拨一次号,与ddos防护的服务器进行一次http访问,把此次三次握手的ack包保存起来。当然如果服务器用cookie认证也把http get这个数据包保存。
2.再用ADSL拨一 ...
我不知道你看过Linux的syncookie实现没有,反正你的方法肯定不会通过Linux的cookie检查。
saddr和sport不一样的话根本不行。
- static __u32 check_tcp_syn_cookie(__u32 cookie, __u32 saddr, __u32 daddr,
- __u16 sport, __u16 dport, __u32 sseq,
- __u32 count, __u32 maxdiff)
- {
- __u32 diff;
- /* Strip away the layers from the cookie */
- cookie -= cookie_hash(saddr, daddr, sport, dport, 0, 0) + sseq;
- /* Cookie is now reduced to (count * 2^24) ^ (hash % 2^24) */
- diff = (count - (cookie >> COOKIEBITS)) & ((__u32) - 1 >> COOKIEBITS);
- if (diff >= maxdiff)
- return (__u32)-1;
- return (cookie -
- cookie_hash(saddr, daddr, sport, dport, count - diff, 1))
- & COOKIEMASK; /* Leaving the data behind */
- }
复制代码
- static u32 cookie_hash(u32 saddr, u32 daddr, u32 sport, u32 dport,
- u32 count, int c)
- {
- __u32 tmp[16 + 5 + SHA_WORKSPACE_WORDS];
- memcpy(tmp + 3, syncookie_secret[c], sizeof(syncookie_secret[c]));
- tmp[0] = saddr;
- tmp[1] = daddr;
- tmp[2] = (sport << 16) + dport;
- tmp[3] = count;
- sha_transform(tmp + 16, (__u8 *)tmp, tmp + 16 + 5);
- return tmp[17];
- }
复制代码 |
|