Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java:安全套接字接受

Java:安全套接字接受
EN

Stack Overflow用户
提问于 2014-07-03 05:36:12
回答 2查看 302关注 0票数 0

我有一个其他人写的多线程服务器应用程序。当它要接受带有ServerSocket的套接字对象时,它是通过一个名为"acceptSocketSafe“的方法运行的。

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

代码语言:javascript
运行
AI代码解释
复制
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))。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 06:37:58

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

只要在连接后不发送任何东西,这件事仍有可能.

编辑:仔细看,它甚至不需要是分布式攻击。一个客户机只要没有发送任何字节,就会完全阻塞accept循环,任务就完成了。不管是谁写的都不知道他在做什么。

票数 1
EN

Stack Overflow用户

发布于 2014-07-03 06:37:20

一点也不安全。这会让事情更糟。

此代码在接受线程上执行客户端I/O操作。这意味着,恶意客户端安装DOS攻击所需做的就是连接和发送任何东西。然后,只有在客户端发送或关闭连接之前,才能接受其他客户端。

至于它所做的事情,它只是拒绝了不以14字节开头的客户端连接。这是一个很弱的测试:256个随机尝试中就有1个会通过。通过在应用程序协议中进行适当的错误检查,可以更好地完成这一任务。无论如何,你还是要这样做,所以根本就没有实际的优势。

此代码还泄漏已拒绝的套接字。

把它扔掉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24555185

复制
相关文章
Java套接字
  本文补充一下Java关于套接字方面的内容,因为其应用相对比较简单,所以下面介绍两个程序实例。
云海谷天
2022/08/09
8020
Java套接字
套接字
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88673990
zy010101
2019/05/25
1.3K0
Java网络编程--套接字Socket
一、套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序)。 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通信占用。 当两个程序需要通信时,可以通过Socket类建立套接字对象并连接在一起。(端口号与IP地址的组合得出的一个网络套接字) 二、示例 (1)客户端服务器端一对一;聊天 1 package mychat; 2 3 import java.io.BufferedReader; 4 import ja
听着music睡
2018/05/18
1.6K0
Java NIO套接字【源码笔记】
本文以代码示例跟踪调用Native函数,看下原型函数的具体释义。例子中“客户端”从文件test02.tmp读取内容后,通过socket发送到“服务端”后写入test01.tmp文件中。
瓜农老梁
2020/02/26
9050
Java NIO之套接字通道
前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道。在展开说明之前,咱们先来聊聊套接字的由来。套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Berkeley sockets。UNIX 4.2BSD 内核版本中加入了 socket 的实现,此后,很多操作系统都提供了自己的 socket 接口实现。通过 socket 接口,我们就可以与不同地址的计算机实现通信。
田小波
2018/04/26
1.2K0
Java NIO之套接字通道
Socket(套接字)
TCP/IP只是一个协议栈,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
老马的编程之旅
2022/06/22
1.3K0
套接字选项
选项影响套接字操作,如 封包路由,OOB数据传输,获取和设置套接字选项分别是 getsockopt  setsockopt 用法如下: int getsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); int setsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); 每个协议层套接字的选项有不同的级别: 应用层:SOL_SOCKET 传输层:IPPR
用户1154259
2018/01/17
1.3K0
Python套接字
Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进程间通信)、AF_INET(基于网络)家族。
用户4845306
2019/03/14
1.6K0
16(套接字)
套接字描述符在Unix系统中是用文件描述符实现的。事实上,许多处理文件描述符函数(read和write)都可以处理文件描述符 要创建一个套接字,可以调用socket函数
提莫队长
2019/02/21
9960
OpenSSL安全套接字密码库命令
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序,OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的;
全栈工程师修炼指南
2022/09/29
1.1K0
套接字随笔1
accept函数接受一个客户端请求后会返回一个新的SOCKFD值,当有不同的客户端同时有不同请求时,会返回不同的SOCKFD的值。这个不同的值和建立SOCKET 时生成的SOCKFD还是不同的。服务器与客户端之间的通信就是在这些不同的SOCKFD上进行的。
随心助手
2022/11/30
5670
IPC|网络套接字
为了访问由UDP提供的服务,你需要像以前一样使用套接字和close系统调用,但你需要用两个
heidsoft
2022/04/18
1.1K0
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/12/07
1.3K0
套接字Socket编程
java编程_socket_套接字_网络编程
============================================================ 
Hongten
2018/09/13
1.2K0
Socket 套接字协议
A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.
vanguard
2020/03/18
1.5K0
linux 网络套接字
在内核分析网络分组时,底层协议的数据将传输到跟高的层。而发送数据的时候顺序是相反的。每一层都是通过加(首部+净荷)传向跟底层,直至最终发送。
233333
2019/05/25
2.8K0
Socket - 套接字编程
目录 Socket - 套接字编程 Socket 通信流程图 Socket模块 socket()方法 部分参数 bind()方法 listen()方法 accept()方法 accept()函数返回值:sock、addr connect() 方法 close()方法 服务端客户端对比 简单案例 简易通信循环 优化通信循环 黏包问题 Struct 模块 规定报头 解决黏包问题 上传文件案例 UDP通信 Socket - 套接字编程 只要涉及到远程数据交互必须要操作OSI七层模型,那么每层都需要相应的程序
HammerZe
2022/03/25
1K0
Socket - 套接字编程
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/10/18
1.4K0
Python与套接字
服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时 客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应 数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束
星陨1357
2023/03/14
2.4K0
Python与套接字
Java Socket:飞鸽传书的网络套接字
在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快、会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”。而在 Java 中,网络套接字(Socket)扮演了同样的角色。
沉默王二
2019/08/22
8610

相似问题

安全连接Java套接字

19

Java套接字接受队列长度

47

Java套接字流安全吗?

35

Java套接字只接受标头

15

如何在java中使接受的套接字成为非阻塞套接字

50
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档