(P26-P27)miniftpd项目实战26:最大连接数的限制,每个IP的连接数的限制

1.连接数限制的实现:最大连接数的限制

  • vsftpd服务连接数限制的实现,vim /etc/vsftpd.conf
    在这里插入图片描述
    第四次连接连不上了
    在这里插入图片描述

  • 将当前连接数保存于变量num_clients变量中,然后与配置项tunable_max_clients进行比较,如果超过了就不让登录。当一个客户登录的时候num_clients加1,当一个客户端退出的时候,num_clients减1。

  • eg:miniftpd26\main.c,miniftpd26\ftpproto.h

signal(SIGCHLD, handle_sigchld);
void check_limits(session_t *sess)
void handle_sigchld(int sig)
void ftp_reply(session_t *sess, int status, const char *text);
  • 测试:设置当前的最大连接数是2
    在这里插入图片描述
    连接3个客户端会失败
    在这里插入图片描述

2.连接数限制的实现:每个IP的连接数的限制

  • vsftpd每个IP的连接数的限制,vim /etc/vsftpd.conf
    某个特点的ip,它的连接数不能超过2次
    在这里插入图片描述
    因为同一台机器上客户端的ip都是一样的,每个ip的连接数,到达限制了,所以无法登录了
    在这里插入图片描述

  • 维护护两个哈希表

static hash_t *s_ip_count_hash;//ip与对应连接数的哈希表,ip是key,count是value
static hash_t *s_pid_ip_hash;//进程pid与ip对应关系的哈希表
  • 将当前ip的连接数保存在变量num_this_ip中,然后与配置项tunable_max_per_ip进行比较,如果超过了就不让登录。当一个客户登录的时候,要在s_ip_count_hash更新这个表中的对应表项,即该ip对应的连接数要加1,如果这个表项还不存在,要在表中添加一条记录,并且将ip对应的连接数置1。

  • 当一个客户端退出的时候,那么该客户端对应ip的连接数要减1,处理过程是这样的,首先是客户端退出的时候,父进程需要知道这个客户端的ip,这可以通过在s_pid_ip_hash查找得到,得到了ip进而我们就可以在s_ip_count_hash表中找到对应的连接数,进而进行减1操作。

  • eg:miniftpd27\main.c

static hash_t *s_ip_count_hash;//ip与对应连接数的哈希表,ip是key,count是value
static hash_t *s_pid_ip_hash;//进程pid与ip对应关系的哈希表

void handle_sigchld(int sig)
void drop_ip_count(void *ip)
void check_limits(session_t *sess)
  • 测试:最大连接数max_clients改为3,每个ip的最大连接数max_per_ip改为2个
    在这里插入图片描述
    当前ip不可以连接三次
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值