我有一个Java应用程序(不在任何应用程序容器中运行),它侦听ServerSocket以获取连接。我希望它只接受来自本地主机的连接。目前,在接受连接之后,它会检查对等IP并拒绝它,如果它不是环回地址,但我知道对等IP地址可能会被欺骗。因此,如果可能的话,我更喜欢绑定到仅侦听环回接口的套接字;这是可能的吗?
我已经尝试了一些不同的方法(例如在调用bind()时指定“127.0.0.1”作为本地地址),但没有成功。
更新:
我很尴尬地承认这全是我的错。我们的应用程序侦听两个不同的端口,我将其中一个绑定到环回接口,但针对另一个进行测试。当我实际尝试使用telnet连接到正确的端口时,一切正常(即,绑定到“127.0.0.1”恰好执行了它应该执行的操作)。
至于欺骗环回地址,你们是对的。我不应该让它听起来像是主要问题。实际上,期望的行为是仅接受本地连接,并且仅绑定到本地接口比接受所有连接然后关闭非本地连接更直接。
我已经尝试了一些不同的方法(例如在调用bind()时指定“127.0.0.1”作为本地地址),但没有成功。
更新:
我很尴尬地承认这全是我的错。我们的应用程序侦听两个不同的端口,我将其中一个绑定到环回接口,但针对另一个进行测试。当我实际尝试使用telnet连接到正确的端口时,一切正常(即,绑定到“127.0.0.1”恰好执行了它应该执行的操作)。
至于欺骗环回地址,你们是对的。我不应该让它听起来像是主要问题。实际上,期望的行为是仅接受本地连接,并且仅绑定到本地接口比接受所有连接然后关闭非本地连接更直接。