仅启用来自指定 IP 地址的传入连接

Posted

技术标签:

【中文标题】仅启用来自指定 IP 地址的传入连接【英文标题】:Enable incoming connections from specified IP-address only 【发布时间】:2011-06-02 13:00:35 【问题描述】:

我有一个在特定 IP 端口上打开了侦听套接字的服务器应用程序。 如何允许套接字仅启用来自一个指定 IP 地址的传入连接?

【问题讨论】:

【参考方案1】:

您必须使用某些防火墙软件来限制对该端口的传入请求,或者关闭您不想服务的已接受连接(基于accept 返回的套接字地址)。

可能有一些库可以为您执行此操作,但套接字 API 无法自动执行此操作。

【讨论】:

【参考方案2】:

当您接受连接时,您可以在接受后检查 sockaddr,看看它是否来自正确的地址。如果没有,您立即关闭接受返回的连接套接字。

【讨论】:

我的意思是只接受来自指定IP地址的对等主机的连接! @andrey:我知道,我误读了你的问题。我已经改变了答案。 @hackworks:是的,但无论如何,重点是没有实际意义的。我回答错了问题。 Win32 API 有一个很好的方法来在接受中注册一个函数。根据函数返回的内容,accept 成功或失败。参考链接:msdn.microsoft.com/en-us/library/ms741513(v=vs.85).aspx【参考方案3】:

你必须用accept()来接受连接,如果你不想要它就关闭它(如果你的协议支持的话,可能会发送一个错误响应)。这对于大多数应用程序来说已经足够了。

【讨论】:

【参考方案4】:

试试:libauth,这是一种健壮的访问控制方式http://linux.die.net/man/3/libauth

【讨论】:

以上是关于仅启用来自指定 IP 地址的传入连接的主要内容,如果未能解决你的问题,请参考以下文章

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

怎么解决:无法启动INTERNET连接共享。一个已经用IP地址配置的LAN连接需要自动IP地址

是否可以获取传入 websocket 连接的 IP 地址?

Oracle JDBC 连接被拒绝(仅来自 jdbc 代码)

internet 连接共享访问被启用时 一个已经用IP 地址配置的Lan连接需要自动IP地址

C++ Winsock API如何在接受连接之前获取连接客户端IP?