5.6.3 用anvil_clnt_connect函数统计客户端并发连接数和连接频率
来源:互联网 发布:ubuntu重启搜狗输入法 编辑:程序博客网 时间:2024/06/06 14:12
anvil模块在5.2节已经做了介绍。在实际的协议解析开始前,先要将“恶意”客户排除在外。
/smtpd/smtpd.c48414842 /*4843 * XXX The client connection count/ratecontrol must be consistent in4844 * its use of client addressinformation in connect and disconnect4845 * events. For now we exclude xclientauthorized hosts from4846 * connection count/rate control.4847 *4848 * XXX Must send connect/disconnectevents to the anvil server even when4849 * this service is not connectioncount or rate limited, otherwise it4850 * will discard client message orrecipient rate information too4851 * early or too late.4852 */4853 if (SMTPD_STAND_ALONE(state) == 04854 && !xclient_allowed4855 && anvil_clnt4856 &&!namadr_list_match(hogger_list, state->name, state->addr)4857 &&anvil_clnt_connect(anvil_clnt, state->service, state->addr,4858 &state->conn_count, &state->conn_rate)4859 == ANVIL_STAT_OK) {4860 if (var_smtpd_cconn_limit > 04861 && state->conn_count> var_smtpd_cconn_limit) {4862 state->error_mask |=MAIL_ERROR_POLICY;4863 msg_warn("Connectionconcurrency limit exceeded: %d from %s for service %s",4864 state->conn_count,state->namaddr, state->service);4865 smtpd_chat_reply(state,"421 4.7.0 %s Error: too many connections from %s",4866 var_myhostname, state->addr);4867 break;4868 }4869 if (var_smtpd_crate_limit > 04870 && state->conn_rate> var_smtpd_crate_limit) {4871 msg_warn("Connection ratelimit exceeded: %d from %s for service %s",4872 state->conn_rate,state->namaddr, state->service);4873 smtpd_chat_reply(state,"421 4.7.0 %s Error: too many connections from %s",4874 var_myhostname, state->addr);4875 break;4876 }4877 }
4857 用anvil_clnt_connect统计客户端并发连接数与连接频率,结果放在SMTPD_STATE结构体conn_count和conn_rate字段中。同时还要保证其他条件:xclient是客户端测试命令,所以不算作真实的客户端连接。hogger_list,即smtpd_client_event_limit_exceptions参数,在pre_jail_init函数中被初始化,表示不作频率控制检测的地址。所以我们要确保我们现在检测的地址不在这些地址中。
4860-4877如果统计结果超出smtpd_client_connection_count_limit和smtpd_client_connection_rate_limit参数限制则报错。
anvil模块的统计功能在接下来的解析中还会被使用。统计函数anvil_clnt_mail,anvil_clnt_rcpt在mail_cmd函数和rcpt_cmd函数中的应用方法与此类似,我们不在重复列出代码。 0 0
- 5.6.3 用anvil_clnt_connect函数统计客户端并发连接数和连接频率
- 统计TCP连接数和状态
- IIS并发连接数和数据库连接池
- linux 连接数统计
- 浏览器并发连接数
- 并发连接数
- 浏览器并发连接数
- 查看并发连接数
- 并发连接数 算法
- 并发连接数算法
- Linux下查看并发连接数和连接状态
- 提高TCP并发连接数和连接速度的方法
- [CODE] 通过tcpserver实现对同一IP的最大连接数和连接频率的限制
- 并发连接数、请求数、并发用户数
- 并发连接数、请求数、并发用户数
- 并发连接数、请求数、并发用户数
- 并发连接数、请求数、并发用户数
- linux netstat 统计连接数
- JS禁止网页被复制以及禁止鼠标右击代码
- Unity3d 读写文本
- springmvc hadoop nginx ffmpeg 在线转码实现点播服务demo
- neo4j入门
- 应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案
- 5.6.3 用anvil_clnt_connect函数统计客户端并发连接数和连接频率
- 数据库-FMDatabase在多线程下的使用
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- 5.6.4 esmtp特性掩码
- Notification通知
- Neo4j介绍与使用
- unsigned char,short,int ,long在16位32位和64位机器的长度
- 文章标题
- 关于dwz框架查找带回使用过程中遇到的问题