【问题标题】:How to detect pings inside a Servlet?如何检测 Servlet 中的 ping?
【发布时间】:2015-04-24 16:15:30
【问题描述】:

我们正在尝试作为 Internet 安全项目执行拒绝服务攻击,因此我们设置了客户端和服务器。 客户端执行以下操作

private void pingAttack() throws Exception {
    String url = "127.0.0.1";
    InetAddress inet = InetAddress.getByName(url);
    for(int counter = 0; counter < 1000000000; counter++) {
        System.out.println(inet.isReachable(5000) ? "available" : "NA");
    }
}

在服务器中,我需要对此进行反测量,因此我需要检测发送的 ping 并在特定数量的 ping 后断开与用户的连接,但我不知道该怎么做。在doGet()方法中我们应该在服务端写什么呢?

【问题讨论】:

  • 这听起来更像是防火墙/操作系统级别的配置,而不是 servlet 内部的配置。大多数 servlet 只处理 http/https 协议,因此它们看不到 icmp 消息。这实际上是一个 servlet 还是只是一个侦听特定端口的服务?
  • 我在 servlet 编程方面的经验非常有限。我认为我可以从服务器端做一些事情,但从答案来看,这似乎是不可能的。我能知道 servlet 和在端口上侦听的服务有什么区别吗?谢谢

标签: java servlets denial-of-service


【解决方案1】:

isReachable 不会产生 HTTP 请求,因此您的 doGet, doXXX 方法将永远不会被调用。

来自 InetAddress 的 Javadocs

测试该地址是否可达。尽最大努力 实现尝试访问主机,但防火墙和服务器 配置可能会阻止请求导致无法访问状态 而一些特定的端口可能是可访问的。一个典型的实现 如果可以获得特权,将使用 ICMP ECHO REQUEST, 否则它将尝试在端口 7 (Echo) 上建立 TCP 连接 目的主机。

但是,如果您试图阻止 HTTP 请求的 DoS,则可以将容器(Tomcat、Jetty 等)配置为仅接受最大数量的并发请求,之后将忽略其他请求。

【讨论】:

  • 谢谢!我想我可以从服务器内部做一些事情,这样我就可以向我的教授展示。是否有我可以编写的操作系统脚本来执行此操作。我们使用 apache
【解决方案2】:

什么都没有。如果他们欺骗你执行 doGet() 你已经在加载你的服务器。您应该查看您的防火墙配置。

【讨论】:

  • 我知道我无法通过 doGet() 方法进行处理,但我不想通过防火墙进行处理
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多