【问题标题】:server socket to accept connection from particular ip java服务器套接字接受来自特定 ip java 的连接
【发布时间】:2012-10-25 06:01:25
【问题描述】:

我有一个 serversocket 在我的服务器的一个端口上运行,比如 7761,ip 是 10.2.110.43 现在有许多客户端在不同的服务器上运行,等待端口 7761 上的连接,并将 ascii 格式的数据写入该端口。

我希望 serversocket 验证客户端 IP 地址,然后接受来自客户端的连接。

有没有办法做到这一点?

【问题讨论】:

  • 是什么阻止您在代码中验证客户端 IP?

标签: java sockets serversocket


【解决方案1】:

如果您不介意在SecurityManager 下运行并且IP 地址列表是静态的,您可以通过security.policy 文件完成此操作。只需将 SocketPermission"accept" 授予您想要接受来自其的连接的那些 IP 地址。但是,按照其他答案中的建议在代码或防火墙中执行此操作可能更可取。

【讨论】:

  • 我也一直在代码中这样做,但认为你建议的这种方式实际上更干净。由于列表在文件中,您还可以更轻松地配置范围(尽管从代码中执行类似操作也很容易)。
【解决方案2】:

我们在下面的代码中看到,我们无法检查对应的地址之前 accept()之后

Socket client = serverSocket.accept()
if( acceptedClients.contains( client.getInetAddress()) {
   ...
}
else {
   client.close();
}

带有acceptedClients 的知名InetAddress 集合。

【讨论】:

    【解决方案3】:

    如果您不希望连接到达您的 Java ServerSocket#accept(),除非它来自特定 IP,您必须配置防火墙来执行此操作。

    您始终可以在建立连接后验证 IP 地址,如果不是来自正确的 IP,则立即关闭它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2023-03-09
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多