1

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

需要注意的几点:

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

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

任何帮助将不胜感激。这甚至可行吗?

4

3 回答 3

5

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

于 2012-06-25T05:19:05.157 回答
1

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

于 2012-06-25T06:10:03.450 回答
0

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

于 2012-07-08T06:05:00.180 回答