我有一个 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/