在 C/Unix 中的 IP 子网上侦听的套接字
Socket listening on an IP subnet in C / Unix
>我正在尝试用 C 语言编写服务器-客户端套接字程序。目标是让服务器侦听特定端口,但侦听属于同一 IP 子网的 IP 地址范围。此 IP 子网是 127.x.x.x 范围的一部分(当然不是 127.0.0.1)。
需要注意的几点:
- 这是一个基于流的套接字,而不是数据报套接字。
- 这不是广播地址。
- 仅在 Unix/Linux 平台上实现 C/C++
我不想在服务器上为范围内的每个 IP 地址打开多个套接字。这是不可扩展的。
任何帮助将不胜感激。这甚至可行吗?
您只能绑定到单个套接字上的一个地址。 为什么不能绑定到INADDR_ANY并简单地拒绝任何未绑定到目标 IP 的数据包? 或者,您可以绑定到任意端口并使用操作系统级别的魔法(例如iptables,bpf)将发往这些IP/端口组合的数据包重新路由到您的套接字。
套接字 API 不允许绑定到子网 - 您可以绑定到一个 IP 或任何 IP。您可以侦听所有入站连接,并拒绝不适用的入站连接。如果需要在同一服务器上的进程之间划分连接,请使用单个侦听套接字,并将传入连接传输到工作进程。
您可以使用防火墙来阻止所需子网外部的任何人进行连接(即在 o/s 级别)。 您可以将套接字置于混杂模式并接受给定接口上的所有连接。 我不知道你是否可以同时做这两件事(有一个混杂模式的套接字并在其上运行iptables)。 从本质上讲,这就像构建一个只侦听一个端口的数据包嗅探器。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 从网链套接字请求连接设备的列表
- 将套接字传递给子进程
- 在 C/Unix 中的 IP 子网上侦听的套接字
- 如何使用 p2p 暗网应用程序合并用于直接隧道的端口/套接字
- 具有多个客户端的套接字服务器.杀死子进程
- 访问子线程中的套接字描述符时"Bad file descriptor"