Linux中的套接字 - serv_addr.sin_addr.s_addr = INADDR_ANY;

时间:2013-06-04 17:02:31

标签: linux sockets

我正在Linux中进行Socket编程。有一个问题。 我们如何允许特定的IP地址连接到我们的服务器

例如:

  • 允许10.0.0.1
  • 拒绝10.0.0.1

我正在专门讨论这行代码,我们将 INADDR_ANY 填入 sockaddr_in struct

serv_addr.sin_addr.s_addr = INADDR_ANY;

其余代码仅供参考:

struct sockaddr_in serv_addr;


serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY; // Here's my question!!
serv_addr.sin_port = htons(portno);

1 个答案:

答案 0 :(得分:1)

它被称为防火墙。在linux上,您可以使用iptables(8)进行设置。

如果你想在你的应用程序中执行它,就不可能根据对等方的地址有选择地进行监听(你只能根据你的地址有选择地监听,如果你在Linux上使用“弱端系统模型” “你必须检查一下你是否理解这意味着什么!---监听特定地址可能并不完全符合你的预期,也不是从不受信任的接口丢弃数据包的安全方法。”。

相反,请听取INADDR_ANY,然后在接受的fd上调用getpeername(2),验证它,如果它与您的应用程序的过滤器不匹配,请关闭连接。