Java:安全套接字接受

标签 java sockets

我得到了别人编写的这个多线程服务器应用程序。 当它要接受带有 ServerSocket 对象的 Socket 对象时, 它通过一个名为“acceptSocketSafe”的方法运行。

这是程序的一个片段,其中包含了所需的代码部分:

public Socket acceptSocketSafe(ServerSocket x)  {
    boolean socketFound = false;
    Socket socket = null;

    do  {
        try {
            socket = x.accept();
            int i = socket.getInputStream().read();

            if ((i & 0xFF) == 14)   {
                socketFound = true;
            }
        } catch (Exception e)   {

        }
    } while (!socketFound);

    return socket;
}

我不明白的是,“acceptSocketSafe”方法如何使套接字接受比我的做法(简单、常规的方式)更安全。 (我相信它可以排除恶意连接(例如 DDoS)。

感谢您对此方法的任何解释!

最佳答案

这是默默无闻的安全。无论如何,套接字都会被接受,只是它检查客户端是否发送 0x0E (14) 作为第一个字节。如果没有,它会抛出(顺便说一句,不会关闭接受的套接字。)。

只要在连接后不发送任何内容,仍然可能受到 DDoS 攻击...

编辑:仔细观察,它甚至不需要是分布式攻击。单个客户端不发送任何字节将完全阻塞接受循环,任务完成。不管是谁写的,都不知道他在做什么。

关于Java:安全套接字接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555185/

相关文章:

java - 如何在 IBM HTTP SERVER 中进行粘性 session 配置?

在 c (gcc) centos 7 中实现的 unix 域套接字中的连接错误

java - "Address already in use"接收数据报中的DataramSocket

java - Awt/Swing - 框架在移动过程中不会重新绘制

java - spring-data-neo4j 与 Autowired 冲突

java - 以管理员身份发布到 Facebook 页面

java - 使用 Apache HTTPClient 的每个第二个请求都会失败

wcf - WCF 是否适合实现旧版网络服务?

java - 通过套接字发送多个数据值的最佳方法是什么?

c++通过1个数据包中的套接字发送大数据