【问题标题】:How to accept connections from local network only in Java如何仅在 Java 中接受来自本地网络的连接
【发布时间】:2017-10-31 08:37:35
【问题描述】:

我有一个 ServerSocket 对象,它正在使用接受方法进行侦听。如何接受仅来自同一网络而不是外部的连接?

【问题讨论】:

    标签: java network-programming


    【解决方案1】:

    如果您的系统有多个网络接口,其中一个仅接收本地连接而其他应被忽略,您可以使用 netork 接口的 IP 地址设置 ServerSocket 以将其仅绑定到该特定接口:

    ServerSocket ssocket = new ServerSocket(1234, 10, InetAddress.getByAddress("192.168.1.1"));
    

    对于 IPv4 和 IPv6,您显然需要两个 ServerSocket。

    如果从同一个网络接口接收到本地和远程连接,您必须自己检查远程对等点。这可以通过不同的方式完成:

    • 您可以设置实现checkAcceptSecurityManager,如果连接尝试来自错误的位置,则抛出SecurityException。这是一个全局设置,因此您无法在应用程序的其他应该接受来自那里的连接的部分设置ServerSocket
    • 您可以检查从ServerSocket 返回的Socket 的IP 和端口是否是本地的,如果不是则关闭套接字而不是继续请求
    • 您可以创建ServerSocket 的子类,覆盖方法checkAccept 其中调用super.accept,按照选项2 中所述执行相应检查,并且仅在符合您的条件时返回检索到的连接或以其他方式关闭它并且再次调用超级方法。

    【讨论】:

    • 感谢您的回答,但我找到了一种更简单的方法。如果连接来自本地网络,isAnyLocalAddress() 将返回 true。
    【解决方案2】:

    通过接受本地 IP 地址的构造函数创建 ServerSocket,并提供 127.0.0.1 作为该 IP 地址。

    【讨论】:

    • 据我了解,这是关于来自本地系统的连接,即与本地计算机位于同一网络中的系统。所以我们不是在谈论来自localhost的连接
    猜你喜欢
    • 2018-08-22
    • 2010-09-11
    • 2021-12-09
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多