java - 如何让套接字仅接受来自本地主机的连接(在 Java 中)?

标签 java sockets localhost loopback serversocket

我有一个 java 应用程序(不在任何应用程序容器中运行),它在 ServerSocket 上监听连接。我希望它只接受来自本地主机的连接。目前,在接受连接后,它会检查对等 IP,如果不是环回地址则拒绝它,但我知道对等 IP 地址可以被欺骗。所以,如果可能的话,我宁愿绑定(bind)到一个只监听环回接口(interface)的套接字;这可能吗?

我尝试了一些不同的方法(例如在调用 bind() 时将“127.0.0.1”指定为本地地址)但没有成功。


更新:

我很尴尬地承认这都是我的错误。我们的应用程序监听两个不同的端口,我将一个绑定(bind)到环回接口(interface),但对另一个进行测试。当我实际尝试远程登录到正确的端口时,一切正常(即,绑定(bind)到“127.0.0.1”完全符合预期)。

至于欺骗环回地址,你们是对的。我不应该让它听起来像是主要问题。实际上,所需的行为是只接受本地连接,并且只绑定(bind)到本地接口(interface)是比接受所有连接然后关闭非本地连接更直接的实现方式。

最佳答案

无法以这种方式欺骗对等 IP 地址,您不必担心使用检查对等点并决定在建立期间断开连接的技术。

但是:绑定(bind)到 127.0.0.1 应该有效,并且如果它们连接到其他 IP 地址的系统之一,操作系统会告诉连接主机没有任何监听。你能用一个可编译的例子修改这个问题吗?也许您犯了一个简单的错误。

关于java - 如何让套接字仅接受来自本地主机的连接(在 Java 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/99020/

相关文章:

java - 如何在 hibernate 查询中使用嵌套属性作为命名参数?

java - Haskell 中的 Android 应用程序

python - 无法关闭 KeyboardInterrupt 上的套接字

java - 当 socket.close() 抛出 Java 时我能做些什么?

c++ - 我如何打印主机的IP

java - 创建对象数组但找不到符号

java - 在静态中声明辅助类方法的原因是什么

node.js - Socket.io 未保存在 Mongoose save() 上

oauth - 当我的本地域未在 Yahoo 注册时,我如何在本地开发时让 Yahoo OAuth 工作?

docker - 使用 'localhost' 连接到 docker-machine