如何知道 IP 地址是否在 Linux 服务器上是本地的
How to Know an IP Address is Local or not on Linux Server
我们正在使用 C/C++ 在 Linux 上开发服务器软件,该软件将限制来自 Internet 的请求的下载速率,但对于来自本地计算机(内部网)的请求,它不会设置任何限制。
问题是如何判断IP地址是本地的,是否有可能通过读取一些网络号码设置(也许从路由器?
更新
当我说本地 IP 时,我的意思是它来自公司内部。例如,假设公司有三个子网(该公司只有到互联网的DSL链接),它们是 10.123.1.xxx,172.16.1.xxx 和 192.168.1.xxx,那么这三个子网中的所有IP地址都应被视为本地地址。
专用地址范围为:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
您可能还希望过滤掉链路本地地址 (169.254/16)
然后,您可以在代码中解析IP地址(要获取地址,您可以使用avahi或类似的东西,将所有地址保存到文件中,然后单独解析每个地址)并检查它是否与这些地址匹配。如果没有,则限制其连接
编辑
您还可以考虑使用将列出本地地址的getifaddrs函数。
如果您在请求连接的计算机的 IP 地址上运行traceroute
,您应该能够看到该路由是否将您带到"公司外部网关"(通常是您的 ISP)。我家一个简单的例子是我的内部路由器连接到的时代华纳网关。如果到客户端的路由不通过ISP(如您所提到的,您有一个DSL链接;因此应该知道DSL端点的IP地址),则它是一个内部请求。这不需要您知道公司内部IP地址的完整地图 - 您可以假设您的路由器已经弄清楚了。
要获取此信息,您可以从程序内部运行系统命令并解析响应。
首先,从命令行运行它(使用已知的"内部"和"外部"IP 地址),并查看差异。如果您之后需要进一步的帮助,请使用您收集的信息更新您的问题。
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- Linux 服务器中的 Recv 缓冲区大小
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 如何使用 clang 和 distcc 在不同架构(例如 Mac/Linux)的从属服务器上编译
- 从主机向在VirtualBox linux机器上运行的服务器发送http请求
- 在 Linux 系统上正常关闭 TCP 服务器
- NAS(使用 qt/linux)- 无法建立简单的音频服务器连接测试
- BLE在Linux环境中使用C++的服务器端实现
- 在putty上使用g++编译器进行编译会将我的代码传递到linux服务器吗
- 无法在 matlab 中的 UDP 客户端和 Linux 中的服务器之间发送数据
- 我们如何远程调试在 Linux 服务器上运行的C++应用程序
- C++ Linux 代理服务器通信
- C++轻量级linux web直通服务器
- Linux服务器和Windows客户端上的C 源代码
- 如何将SFML游戏服务器部署到Linux服务器
- Linux 上的 C/C++ 中的简单原始套接字服务器
- Linux TCP服务器问题C++
- 如何在Linux上使用Qt5访问远程MySQL服务器
- 在C linux中服务器和客户端之间的共享内存
- C++服务器Linux机器上的分段故障-适用于Mac