在C / Unix中侦听IP子网的套接字

时间:2012-06-25 05:12:33

标签: c++ c unix network-programming unix-socket

我正在尝试用C编写服务器 - 客户端套接字程序。目标是服务器在特定端口上侦听,但是在 范围的IP地址 属于相同的IP子网。此IP子网是 127.x.x.x 范围的一部分(当然不是127.0.0.1)。

需要注意几点:

  • 这是一个基于流的套接字,而不是数据报套接字。
  • 这不是广播地址。
  • 仅在Unix / Linux平台上使用C / C ++实现

我不想在服务器上为该范围内的每个IP地址打开多个套接字。这不可扩展。

任何帮助都会受到理想的赞赏。这甚至可行吗?

3 个答案:

答案 0 :(得分:4)

您只能绑定到单个套接字上的一个地址。为什么不能绑定到INADDR_ANY并简单地拒绝任何未绑定到目标IP的数据包?或者,您可以绑定到任意端口并使用操作系统级魔法(例如iptables,bpf)将发往这些IP /端口组合的数据包重新路由到您的套接字。

答案 1 :(得分:1)

套接字API不允许绑定到子网 - 您可以绑定到一个IP或任何 IP。您可以侦听所有入站连接并拒绝那些不适用的入站连接。如果需要在同一服务器上的进程之间分配连接,请使用单个侦听套接字,并将传入连接传输到工作进程。

答案 2 :(得分:0)

您可以使用防火墙阻止所需子网外的任何人连接(在o / s级别)。您可以将套接字置于混杂模式并接受给定接口上的所有连接。我不知道你是否可以两者兼顾(在混杂模式下使用套接字并在其上运行iptables)。从本质上讲,它就像构建只侦听一个端口的数据包嗅探器一样。