SYN Cookie 中一个代码细节
时间:2011-01-24
来源:互联网
本帖最后由 Godbach 于 2011-01-24 10:10 编辑
2.6.24.4 的内核
处理连接请求的函数 tcp_v4_conn_request
感觉最后一部分代码用条件宏判断属于多余啊。
因为从代码上来看 want_cookie 之所以可以等于 1,也就是因为 CONFIG_SYN_COOKIES 选项配置了并且 sysctl_tcp_syncookies 非0.
2.6.24.4 的内核
处理连接请求的函数 tcp_v4_conn_request
QUOTE:
int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
{
struct inet_request_sock *ireq;
struct tcp_options_received tmp_opt;
struct request_sock *req;
__be32 saddr = ip_hdr(skb)->saddr;
__be32 daddr = ip_hdr(skb)->daddr;
__u32 isn = TCP_SKB_CB(skb)->when;
struct dst_entry *dst = NULL;
#ifdef CONFIG_SYN_COOKIES
int want_cookie = 0;
#else
#define want_cookie 0 /* Argh, why doesn't gcc optimize this
*/
#endif
......
if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
#ifdef CONFIG_SYN_COOKIES
if (sysctl_tcp_syncookies) {
want_cookie = 1;
} else
#endif
goto drop;
}
......
if (want_cookie) {
#ifdef CONFIG_SYN_COOKIES
syn_flood_warning(skb);
#endif
isn = cookie_v4_init_sequence(sk, skb, &req->mss);
} else if (!isn) {
{
struct inet_request_sock *ireq;
struct tcp_options_received tmp_opt;
struct request_sock *req;
__be32 saddr = ip_hdr(skb)->saddr;
__be32 daddr = ip_hdr(skb)->daddr;
__u32 isn = TCP_SKB_CB(skb)->when;
struct dst_entry *dst = NULL;
#ifdef CONFIG_SYN_COOKIES
int want_cookie = 0;
#else
#define want_cookie 0 /* Argh, why doesn't gcc optimize this

#endif
......
if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
#ifdef CONFIG_SYN_COOKIES
if (sysctl_tcp_syncookies) {
want_cookie = 1;
} else
#endif
goto drop;
}
......
if (want_cookie) {
#ifdef CONFIG_SYN_COOKIES
syn_flood_warning(skb);
#endif
isn = cookie_v4_init_sequence(sk, skb, &req->mss);
} else if (!isn) {
感觉最后一部分代码用条件宏判断属于多余啊。
QUOTE:
#ifdef CONFIG_SYN_COOKIES
syn_flood_warning(skb);
#endif
syn_flood_warning(skb);
#endif
因为从代码上来看 want_cookie 之所以可以等于 1,也就是因为 CONFIG_SYN_COOKIES 选项配置了并且 sysctl_tcp_syncookies 非0.
作者: Godbach 发布时间: 2011-01-24
从程序的逻辑来看,貌似是这样的。
作者: hritian 发布时间: 2011-01-24
QUOTE:
if (want_cookie) {
#ifdef CONFIG_SYN_COOKIES
syn_flood_warning(skb);
#endif
isn = cookie_v4_init_sequence(sk, skb, &req->mss);
#ifdef CONFIG_SYN_COOKIES
syn_flood_warning(skb);
#endif
isn = cookie_v4_init_sequence(sk, skb, &req->mss);
是啊,最后一样都直接使用 cookie 的方法计算 isn 了,明显进入了 syncookie 的流程中,前面反而还要加个条件宏判断,是否配置了 SYN_COOKIES
作者: Godbach 发布时间: 2011-01-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28