如何知道 IP 地址是否在 Linux 服务器上是本地的

How to Know an IP Address is Local or not on Linux Server

本文关键字:服务器 Linux IP 何知道 地址 是否      更新时间:2023-10-16

我们正在使用 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 地址),并查看差异。如果您之后需要进一步的帮助,请使用您收集的信息更新您的问题。