拉黑 IP

在某些场景下,我们可能需要拉黑某些 IP 地址,以防止其访问我们的服务器。本文将演示如何在 Tio-Boot 中通过简单的代码实现 IP 拉黑功能。

代码实现

以下是一个基于 Tio-Boot 的简单 IP 拉黑控制器的实现:

import com.litongjava.tio.boot.http.TioRequestContext;
import com.litongjava.tio.core.Tio;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.tio.http.common.utils.HttpIpUtils;
import com.litongjava.tio.http.server.annotation.RequestPath;

import lombok.extern.slf4j.Slf4j;

@RequestPath("/admin.php")
@Slf4j
public class BlackIpController {
  @RequestPath
  public HttpResponse index(HttpRequest request) {
    // 获取请求的真实IP地址
    String realIp = HttpIpUtils.getRealIp(request);
    log.info("blackIp:{}", realIp);

    // 将IP地址添加到黑名单中
    Tio.IpBlacklist.add(realIp);

    // 返回响应
    return TioRequestContext.getResponse();
  }
}

代码说明

  1. 获取真实 IP 地址: 使用 HttpIpUtils.getRealIp(request) 获取客户端的真实 IP 地址。这里我们使用了 HttpIpUtils 工具类来获取客户端的真实 IP 地址。

  2. 日志记录: 使用 log.info 记录被拉黑的 IP 地址,以便调试和跟踪。

  3. 添加到黑名单: 只需要一行代码 Tio.IpBlacklist.add(realIp); 就可以将该 IP 添加到黑名单中。

  4. 返回响应: 通过 TioRequestContext.getResponse() 返回响应。

日志输出

在添加 IP 到黑名单后,你可以在日志中看到以下信息:

2024-08-25 12:09:43.007 [tio-group-5] INFO  c.l.t.a.c.BlackIpController.index:19 - blackIp:0:0:0:0:0:0:0:1
2024-08-25 12:09:43.011 [tio-group-5] INFO  c.l.t.c.Tio.send:1168 - can't send data, server:0.0.0.0:10002, client:$UNKNOWN:2, isClosed:true, isRemoved:true
2024-08-25 12:09:43.011 [tio-group-5] INFO  c.l.t.c.u.TioUtils.checkBeforeIO:37 - server:0.0.0.0:10002, client:$UNKNOWN:2, isopen:false, isClosed:true, isRemoved:true
2024-08-25 12:09:54.654 [tio-group-6] INFO  c.l.t.s.AcceptCompletionHandler.completed:53 - 0:0:0:0:0:0:0:1在黑名单中, tio-boot
2024-08-25 12:09:54.654 [tio-group-7] INFO  c.l.t.s.AcceptCompletionHandler.completed:53 - 0:0:0:0:0:0:0:1在黑名单中, tio-boot

从上述日志中可以看到,IP 0:0:0:0:0:0:0:1 已经成功被添加到黑名单中,后续的访问请求将被拒绝。

总结

通过简单的几行代码,我们便能够在 Tio-Boot 中实现 IP 拉黑的功能。这对于提升系统的安全性、预防恶意攻击等场景非常实用。如果你在使用 Tio-Boot 开发过程中需要对特定 IP 进行限制,不妨试试这段代码。